使用单一ExecutorService和多个CompletionService使用相同线程池的实例是否安全?
CompletionService<Object> collector = new ExecutorCompletionService<Object>(threadPool);
Run Code Online (Sandbox Code Playgroud)
因此,将有多个线程创建上面的实例,'collector'与一个singleton threadPool.
我想让ddply在我的mac上并行运行.我使用的代码如下:
library(doMC)
library(ggplot2) # for the purposes of getting the baseball data.frame
registerDoMC(2)
> system.time(ddply(baseball, .(year), numcolwise(mean)))
user system elapsed
0.959 0.106 1.522
> system.time(ddply(baseball, .(year), numcolwise(mean), .parallel=TRUE))
user system elapsed
2.221 2.790 2.552
Run Code Online (Sandbox Code Playgroud)
当我运行.parallel = TRUE时为什么ddply会变慢?我在网上搜索无济于事.我也尝试registerDoMC()了,结果是一样的.
我有一个由OpenMP并行化的循环,但由于任务的性质,有4个critical子句.
什么是最好的方式来分析加速,找出哪些关键条款(或可能非关键(!))占用循环内的最多时间?
我使用Ubuntu 10.04和g ++ 4.4.3
就像标题所说的那样.我有一段代码如下:
pid_t = p;
p = fork();
if (p == 0) {
childfn();
} else if (p > 0) {
parentfn();
} else {
// error
}
Run Code Online (Sandbox Code Playgroud)
我想确保父或子在另一个之前执行(但不返回)各自的功能.
像sleep()这样的调用可能会起作用,但是不能通过任何标准来保证,并且只是利用操作系统调度程序的实现细节......这可能吗?vfork会工作吗?
编辑:两个函数都找到了一个system()调用,其中一个函数在另一个函数启动之前不会返回.所以要重新迭代:我需要确保父或子只调用它们各自的函数(但不返回,因为它们不会,这是下面提供的所有基于互斥锁的解决方案提供的).有任何想法吗?抱歉缺乏清晰度.
edit2:有一个进程调用sched_yield和sleep,我似乎得到了非常可靠的结果.vfork确实提供了我正在寻找的语义,但是对于我在子进程中可以做的事情有很多限制(我几乎只能调用exec).所以,我发现了一些足够好的解决方案,但没有真正的解决方案.vfork可能是我所寻找的最接近的东西,但下面提出的所有解决方案都会或多或少地起作用.
我正在重构前一段时间编写的代码,当linq和delegates不存在时,很多代码都是令人尴尬的并行化,所以AsParallel我随时都可以使用但是我不太确定当涉及到有序列表时会发生什么在这样的查询中.例如,
/* suppose we have the following list
SortedList<DateTime, SomeClass> list1
*/
var projection = list1.AsParallel().Select(t => t.Key);
var skippedProjection = list1.AsParallel().Select(t => t.Key).Skip(1);
var zipped = projection.AsParallel().Zip(skippedProjection, someComputation);
Run Code Online (Sandbox Code Playgroud)
我的问题如下:并行查询中是否保留了排序?换句话说,上面的示例是否会按照我的预期工作,或者Select后续查询会AsParallel以随机顺序返回事物,具体取决于幕后使用的策略?
我试图找出MPI通信器中实际进程通信是如何发生的.我有8个节点,每个节点有12个核心(96个实例正在运行).每个进程都分配了唯一的级别,并且进程之间能够相互通信.那么流程如何获得独特的排名并管理发送实际的消息?根据一些幻灯片,有一个开放运行时环境(ORTE),它"驻留在该单元上启动进程的机器上.(例如,集群的前端).负责在单元上启动进程.监视单元健康状况(节点,进程).将单元状态报告给Universe的其余部分.在单元之间路由通信." 我还没有找到任何MPI实现的开发者文档和/或体系结构文章.任何人都有想法如何实现MPI流程之间的实际沟通,即他们如何设法找到自己并获得指定的排名?是否有中央或多个中央MPI内部流程进行路由(例如,每个节点)?
谢谢,大卫
我在一个ruby脚本中有4个测试,我使用命令运行
ruby test.rb
Run Code Online (Sandbox Code Playgroud)
外观看起来像
Loaded suite test
Started
....
Finished in 50.326546 seconds.
4 tests, 5 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
Run Code Online (Sandbox Code Playgroud)
我想要实现的是,并行运行所有4个测试而不是顺序测试.像4个线程一样运行一个测试,有效地将执行时间减少到4个测试中最慢的时间+并行执行的时间很少.
我遇到了这个,但这似乎并行运行多个ruby测试文件 - 比如说我有test1.rb,test2.rb test3.rb,然后所有这三个文件将并行运行.
任何帮助将不胜感激.
问题:鉴于詹金斯/哈德森的一些工作,每个工作都分配了一个我们可以调用的数字.此数字的范围从1到n,多个作业可以具有相同的级别.现在,我想定义那些(否则是独立的)作业运行,使得级别1必须在级别2之前构建,并且我希望Jenkins/Hudson并行启动多个作业,如果作业的从属执行者定义是免费的.
这个级别的数字并不重要,它只是用于解释问题.
重要提示:我希望能够自动生成这些作业,因为我知道哪些作业取决于哪些作业,哪些作业可以并行运行,所以如果解决方案是config.xml中的某些配置,那么听到这个就很好了,这样我就可以自动生成那些配置文件的脚本.

谢谢你的时间.
编辑:还有一个我想知道的,如果有一些优雅的解决方案:假设作业X由Build Flow Plugin触发,它就失败了.如果我希望Build Flow Plugin再次触发相同的作业(在我修复它之后),并且正常继续通过插件定义的作业,有什么办法吗?
parallel-processing continuous-integration hudson jenkins jenkins-plugins
我开始使用PETSc库来并行求解线性方程组.我已经安装了所有软件包,构建并成功运行了petsc/src/ksp/ksp/examples/tutorials /文件夹中的示例,例如ex.c
但我无法理解如何通过从文件中读取矩阵来填充矩阵A,X和B.
这里我提供了ex2.c文件中的代码:
/* Program usage: mpiexec -n <procs> ex2 [-help] [all PETSc options] */
static char help[] = "Solves a linear system in parallel with KSP.\n\
Input parameters include:\n\
-random_exact_sol : use a random exact solution vector\n\
-view_exact_sol : write exact solution vector to stdout\n\
-m <mesh_x> : number of mesh points in x-direction\n\
-n <mesh_n> : number of mesh points in y-direction\n\n";
/*T
Concepts: KSP^basic parallel example;
Concepts: KSP^Laplacian, 2d
Concepts: Laplacian, 2d
Processors: n
T*/
/* …Run Code Online (Sandbox Code Playgroud) 为什么
List.range(0,100).contains(2)
Run Code Online (Sandbox Code Playgroud)
工作,而
List.range(0,100).par.contains(2)
Run Code Online (Sandbox Code Playgroud)
才不是?
这计划在未来?