标签: parallel-processing

GNU中的递归作业的并行化

我正在寻找一种优雅的方式来实现GNU make中的作业并行化.这是我到目前为止所做的一个例子.以串行方式处理目录dir-1,dir-2和dir-3,这是合乎逻辑的,但不是我的意图:

SUBDIRS=dir-1 dir-2 dir-3

default: all

all:
  @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE)); done

.PHONY: clean

clean:
  @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) clean); done
Run Code Online (Sandbox Code Playgroud)

有没有办法支持使用"-j"选项并行处理这些目录而不为每个目录指定特定目标?

parallel-processing makefile

14
推荐指数
2
解决办法
8132
查看次数

MPI_Bcast的相应接收例程

什么是广播例程MPI_Bcast的相应MPI接收例程.

也就是说,一个处理器向一个组广播一个消息,比方说全世界,我如何在这些进程中传递消息?

谢谢.

问候

SREC

parallel-processing mpi

14
推荐指数
1
解决办法
9764
查看次数

如何让R使用计算机的所有核心?

我已经读过R只使用一个CPU.如何让R使用所有可用的内核来运行统计算法?

parallel-processing multicore r

14
推荐指数
2
解决办法
9630
查看次数

Scala Parallel Collections-如何提前返回?

我有一个可能的输入值列表

val inputValues = List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我有一个非常长的计算功能,给我一个结果

def reallyLongFunction( input: Int ) : Option[String] = { ..... }
Run Code Online (Sandbox Code Playgroud)

使用scala并行集合,我可以很容易地做到

inputValues.par.map( reallyLongFunction( _ ) )
Run Code Online (Sandbox Code Playgroud)

为了得到所有结果,并行.问题是,我真的不想要所有的结果,我只想要FIRST的结果.一旦我的一个输入成功,我想要我的输出,并希望继续我的生活.这做了很多额外的工作.

那么我如何才能充分利用这两个世界呢?我想要

  1. 获取第一个返回我的long函数的结果
  2. 从无用的工作中停止我所有的其他线程.

编辑 - 我解决它就像一个愚蠢的java程序员一样

@volatile var done = false;
Run Code Online (Sandbox Code Playgroud)

在我的内部设置和检查reallyLongFunction.这有效,但感觉不太scala.想要一个更好的方法来做到这一点....

parallel-processing scala scala-2.9

14
推荐指数
1
解决办法
968
查看次数

在Python 3.2中并行执行for循环

可能重复:
如何并行化一个简单的python循环?

我是Python的新手(使用Python 3.2),我有一个关于并行化的问题.我有一个for循环,我希望在Python 3.2中使用"多处理"并行执行:

def computation:    
    global output

    for x in range(i,j):
        localResult = ... #perform some computation as a function of i and j
        output.append(localResult)
Run Code Online (Sandbox Code Playgroud)

总的来说,我想在i = 0到j = 100的范围内执行此计算.因此,我想创建一些进程,每个进程使用总范围的子域调用函数"calculate".有关于如何做到这一点的任何想法?有没有比使用多处理更好的方法?

更具体地说,我想执行域分解,我有以下代码:

from multiprocessing import Pool

class testModule:

    def __init__(self):
        self

    def computation(self, args):
        start, end = args
        print('start: ', start, ' end: ', end)

testMod = testModule()
length = 100
np=4
p = Pool(processes=np)
p.map(yes tMod.computation, [(length, startPosition, length//np) for startPosition in    range(0, length, length//np)]) 
Run Code Online (Sandbox Code Playgroud)

我收到一条提到PicklingError的错误消息.任何想法可能是这里的问题?

python parallel-processing pickle multiprocessing python-3.x

14
推荐指数
2
解决办法
2万
查看次数

从R脚本中将作业提交到从属节点?

为了得到myscript.R使用作业调度集群从属节点上运行(即,PBS)

目前,我使用以下命令将R脚本提交给从属节点

qsub -S /bin/bash -p -1 -cwd -pe mpich 1 -j y -o output.log ./myscript.R
Run Code Online (Sandbox Code Playgroud)

R中是否有函数允许我在头节点上运行myscript.R并将各个任务发送到从节点?就像是:

foreach(i=c('file1.csv', 'file2.csv', pbsoptions = list()) %do% read.csv(i)
Run Code Online (Sandbox Code Playgroud)

更新:qsub命令的替代解决方案是#/usr/bin/Rscript从第一行删除myscript.R并直接调用它,如@Josh所指出的

qsub -S /usr/bin/Rscript -p -1 -cwd -pe mpich 1 -j y -o output.log myscript.R
Run Code Online (Sandbox Code Playgroud)

parallel-processing hpc r qsub torque

14
推荐指数
1
解决办法
2226
查看次数

Scala中的并行迭代器

是否有可能,使用Scala的并行集合来并行化并且事先Iterator 没有完全评估它?

这里我谈论的是并行化函数转换Iterator,即mapflatMap.我认为这需要Iterator提前评估一些元素,然后计算更多,一旦消耗了一些元素next.

我所能找到的只需要将迭代器转换为a Iterable或者Stream最多.在Stream当我打电话,然后得到完全评估.par就可以了.

如果没有现成的建议,我也欢迎实施建议.实现应该支持并行mapflatMap.

parallel-processing scala scala-collections

14
推荐指数
2
解决办法
5313
查看次数

R并行计算和僵尸进程

这基本上是对这个更专业化问题的跟进.在进行并行计算时,有一些关于创建僵尸进程的帖子R:

  1. 如何阻止R离开僵尸进程
  2. 如何杀死doMC工作人员?
  3. 使用并行包删除僵尸进程

有几种方法可以进行并行计算,我将重点介绍目前在本地计算机上使用的三种方法.我在带有内核的本地计算机上使用doMCdoParallel使用foreach4:

(a)注册一个fork集群:

library(doParallel)
cl <- makeForkCluster(4)
# equivalently here: cl <- makeForkCluster(nnodes=getOption("mc.cores", 4L))
registerDoParallel(cl)
    out <- foreach(i=1:1000, .combine = "c") %dopar% {
        print(i)
    }
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

(b)注册PSOCK集群:

library(doParallel)
cl <- makePSOCKcluster(4)
registerDoParallel(cl)
    out <- foreach(i=1:1000, .combine = "c") %dopar% {
        print(i)
    }
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

(c)使用 doMC

library(doMC)
library(doParallel)
registerDoMC(4)
    out <- foreach(i=1:1000, .combine = "c") %dopar% {
        print(i)
    }
Run Code Online (Sandbox Code Playgroud)

有几个用户观察到在使用该doMC方法时 - 这只是mclapply函数的包装器,所以它不是 …

parallel-processing r zombie-process

14
推荐指数
1
解决办法
5003
查看次数

R中foreach()内的try()问题

我试图使用该try()函数来处理我的并行化for循环中发生的错误:

results <- foreach (i = 1:2, .errorhandling = 'remove') %dopar% {
    res <- try(myfun(i), TRUE)
}
Run Code Online (Sandbox Code Playgroud)

myfun <- function(i){
    if (i==1) return(rnorm(1))
    else stop('error')
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息

Error in checkForRemoteErrors(val) : 
  one node produced an error: Error in myfun(i) : error
Run Code Online (Sandbox Code Playgroud)

如何让foreach"循环"忽略错误消息(或者至少更优雅地处理它)?

parallel-processing foreach r try-catch

14
推荐指数
2
解决办法
3199
查看次数

使用PyCUDA后没有输出

我已经安装PyCUDA使用pip.我试过两台电脑.
一个全新安装,Python 3.7.1一个安装Python 3.6.5.

使用后一切都失败PuCUDA,没有错误消息.

最小的例子是这样的:

import sys
import pycuda.driver as cuda
import pycuda.autoinit # <-- Comment in order for `print` to work

if __name__ == '__main__':
    print('Print works')
    sys.stdout.write("Sys print works")
Run Code Online (Sandbox Code Playgroud)

除非我删除,否则不会打印任何内容pycuda.autoinit.

另一个例子是使用printf:

import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule

if __name__ == '__main__':
    mod = SourceModule("""
        #include <stdio.h>

        __global__ void test() {
          printf("I am %d.%d\\n", threadIdx.x, threadIdx.y);
        }
        """)

    func = …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing python-3.x pycuda

14
推荐指数
1
解决办法
217
查看次数