标签: parallel-processing

使用Xeon Phi进行R并行处理,最少的代码更改?

看着购买一对Xeon Phi 5110P,但试图估计我需要改变多少代码或其他需要的软件.

目前我利用好R对多核心的Windows机器(24个内核)使用foreach包,通过它其他的包forecast,glmnet等做我的并行处理.

有一个Xeon Phi我明白我想编译R https://software.intel.com/en-us/articles/running-r-with-support-for-intel-xeon-phi-coprocessors我明白这可能是完成了Parallel Studio XE的跟踪版本.

那么我是否需要编辑R的Makeconf文件,添加C/C++标志和Phi?在Parallel Studio上的跟踪到期之前编译所有需要的包?或者我是否不需要编辑Makeconf以获得foreachPhi 的好处?

似乎其中一些将在编译R后自动处理,并由Math Kernel Library(MKL)完成卸载,但我不完全确定这一点.

一些相关的问题:英特尔至强融核是否可以在没有昂贵的英特尔编译器的情况下使用?

此外revolutionanalytics.com似乎有一些相关的博客文章,但不是完全确凿的对我来说:http://blog.revolutionanalytics.com/2015/05/behold-the-power-of-parallel.html

parallel-processing foreach r xeon-phi

5
推荐指数
1
解决办法
531
查看次数

前缀和的并行化(Openmp)

我有两个向量,a [n]和b [n​​],其中n是一个大数.

a[0] = b[0];

for (i = 1; i < size; i++) {
        a[i] = a[i-1] + b[i];
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,我们尝试实现a [i]包含b []中所有数字的总和,直到b [i].我需要使用openmp并行化这个循环.

主要的问题是a [i]取决于[i-1],因此我想到的唯一直接方法是等待每个[i-1]数字准备就绪,这需要花费大量时间并没有任何意义.openmp中有没有解决这个问题的方法?

c parallel-processing loops openmp

5
推荐指数
1
解决办法
894
查看次数

Mayavi2使用多处理的Mlab可视化

我正在使用Mayavi2 mlab模块进行一些科学可视化。我想将大约10万个文件可视化并另存为图像,以便稍后将它们组合到gif动​​画中。为了加快这种可视化,我将使用多处理模块。下面是一个简单的示例。

from mayavi import mlab

def test_plot3d(dummy):
   mlab.options.offscreen = True
   l = mlab.plot3d([1,2], [1,2], [1,2])
   mlab.savefig(str(dummy)+".png")
   mlab.close()

from multiprocessing import Pool
NP = 2
pool = Pool(NP,maxtasksperchild=1)
res = pool.imap(test_plot3d,[x for x in xrange(0,4000)])
for r in res:
    print "OK"
print "FINISH"
Run Code Online (Sandbox Code Playgroud)

当NP为2时,一切正常。当NP> 2时,出现下一个错误:

[xcb] Unknown sequence number while processing queue [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
Run Code Online (Sandbox Code Playgroud)

该程序会生成一些图像,但是会挂在其他图像上,因此它永远不会完成。Google告诉我,这与GTK和多线程有关,但是我将pool的maxtasksperchild指定为1,这意味着每个进程只有一个任务,然后它将重新启动,并且每个进程上只有一个mayavi实例(但是如我所见,它不会发生)。

因此,问题是如何正确启动用于并行mayavi可视化的进程池?

python parallel-processing visualization mayavi python-multiprocessing

5
推荐指数
0
解决办法
143
查看次数

并行训练森林

我有一个非常大的数据框,包含790,000行和140个预测变量。其中一些相互之间具有很强的相关性,并且规模不同。有了这个randomForest程序包,我可以只使用一小部分数据在每个核心上生长一个森林,然后使用foreach它们并将其与combine()函数合并以获得一棵大树,如下所示:

rf.STR = foreach(ntree=rep(125, 8), .combine=combine, .multicombine=TRUE, .packages='randomForest') %dopar% {
  sample.idx = sample.int( nrow(dat), size=sample.size, replace=TRUE)
  randomForest(x=dat[sample.idx,-1, with=FALSE], 
               y=dat[sample.idx, retention], ntree=ntree)
  }
Run Code Online (Sandbox Code Playgroud)

不同尺度上的相关变量使我想使用party软件包中的条件随机森林,但是没有combine()关于森林的方法,因此我不确定如何组合多个森林对象来获得一个重要图或一个预测。

有没有办法在较小的数据子集上训练一个大森林,或者制作几个小森林并将它们组合成一个更大的条件森林模型?

parallel-processing r party random-forest

5
推荐指数
1
解决办法
1084
查看次数

并行运行sed

我天真地冒险使用以下命令来处理数据文件:

cat old.one | parallel --pipe 'sed -r "s/\./\,/g"' > new.one
Run Code Online (Sandbox Code Playgroud)

目标是取代"." ",".但结果文件顺序处理获得的文件不同:

sed -r "s/\./\,/g" old.one > new.one
Run Code Online (Sandbox Code Playgroud)

也许并行工作可以不同的方式完成?在没有信号量的情况下,这将是很好的,并且仅在最后组合这些部分.

非常感谢!这是我的结果:

  • sed:13.834 s

    sed -r"s /./,,/ g"old.one> new.one

  • 平行sed:12.489 s

    猫old.one | parallel -k --pipe'sed -r"s /./\,/ g"'> new.one

  • tr:6.480秒

    猫old.one | tr"." ","> new.one

  • 并行tr:5.848 s

    cat new.one | parallel -k --pipe tr"." ","> old.one

linux parallel-processing posix gnu sed

5
推荐指数
1
解决办法
3112
查看次数

Haskell parMap性能如何?

我试图用一个非常简单的例子来测试parMap vs map:

import Control.Parallel.Strategies
import Criterion.Main

sq x = x^2

a = whnf sum $ map sq [1..1000000]
b = whnf sum $ parMap rseq sq [1..1000000]

main = defaultMain [
    bench "1" a,
    bench "2" b
  ]
Run Code Online (Sandbox Code Playgroud)

我的结果似乎表明parMap没有加速,我想知道为什么会这样?

benchmarking 1
Warning: Couldn't open /dev/urandom
Warning: using system clock for seed instead (quality will be lower)
time                 177.7 ms   (165.5 ms .. 186.1 ms)
                     0.997 R²   (0.992 R² .. 1.000 R²)
mean                 185.1 ms   (179.9 ms .. 194.1 ms) …
Run Code Online (Sandbox Code Playgroud)

parallel-processing haskell

5
推荐指数
1
解决办法
213
查看次数

OpenMP:深度优先搜索的良好策略

我正在编写一个C++程序,对闭合的Knight巡演进行蛮力搜索.代码在这里.

我想使用OpenMP并行化这个.我的问题是以一种创造足够程度的并行性的方式来做到这一点.目前,我的代码的相关部分看起来像这样

#pragma omp parallel for reduction(+:count) if (depth==4)
  for (size_t i=0;i<g.neighbours[last].size();i++){
    auto n = g.neighbours[last][i];
    // See if n can be used to extend or complete the tour
Run Code Online (Sandbox Code Playgroud)

if (depth==4)是我尝试确保没有创建太多并行任务,但另一方面创建了足以保持所有处理器繁忙的任务.设置depth==2不会更改程序的运行时.

这似乎没有成功.对于3x12问题,在我的双核处理器上,OpenMP版本消耗的总CPU时间约为130秒,而没有OpenMP的单线程版本需要大约40秒的CPU时间.

我将很感激有关如何更好地使用OpenMP的建议或者不适合此问题的原因.

更新:感谢@Zulan我有一个使用OpenMP任务的更新版本,具有更快的顺序性能和良好的并行化.

c++ parallel-processing openmp

5
推荐指数
1
解决办法
933
查看次数

NUMA意识到Cpp容器

是否有一种方便有效的方式以NUMA识别方式使用cpp标准容器API?

我想在cpp环境中进行OpenMP并行稀疏矩阵向量乘法.要分配和初始化关于NUMA域的向量和矩阵值,C代码将以某种方式看起来像这样:

size_t N = 1000000;
double* vecVal = malloc (N*sizeof(double));

#pragma OMP parallel for
for (size_i=0; i<N; ++i)
{
    vecVal[i] = 0.;
}
/* do spMV */
delete vecVal;
Run Code Online (Sandbox Code Playgroud)

在Cpp中我想使用std :: vector(具有固定大小的std :: array也可以).std :: vector :: reserve()可以做到吗?做这样的事情是合法的:

std::vector<double> vec;
vec.reserve(N);
double *vecVal = vec.data();

#pragma OMP parallel for
for (size_i=0; i<N; ++i)
{
    vecVal[i] = 0.;
}
/* do spMV */
Run Code Online (Sandbox Code Playgroud)

我怎样才能在std :: vector中设置正确的大小?

有谁知道更优雅的方式?

c++ parallel-processing performance memory-management numa

5
推荐指数
1
解决办法
527
查看次数

gnu parallel:带有主机名的前缀输出

parallel当我在多台主机上运行相同命令时,是否可以在gnu输出的前面加上前缀?

我在一个工作池中有10台工作计算机,其中任何一台都可以接管工作,我想通过grep在所有日志文件中找出是哪个工作人员接管了:

parallel --nonall -S host1,host2,host3 grep job_id_123 /var/log/my_log.log
Run Code Online (Sandbox Code Playgroud)

打印类似:

initing job_id_123
doing phase1 job_id_123
doing phase2 job_id_123
wrapping up job_id_123
Run Code Online (Sandbox Code Playgroud)

我想要的是

host2: initing job_id_123
host2: doing phase1 job_id_123
host3: doing phase2 job_id_123
host1: wrapping up job_id_123
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

parallel --nonall -S host1,host2,host3 "hostname && grep job_id_123 /var/log/my_log.log"
Run Code Online (Sandbox Code Playgroud)

但是前缀是我所希望的。

我使用GNU parallel 20160422Ubuntu precise (12.04.5 LTS)

parallel-processing ubuntu gnu gnu-parallel

5
推荐指数
1
解决办法
466
查看次数

如何在python中并行for循环?

更新1.0开始

看来打电话的时候

for i, Wi in enumerate(W.T):
    idx.append(i)
    result.append(pool.apply_async(ALS_Y, (X, Wi, Q, lambda_, n_factors, i,)))
Run Code Online (Sandbox Code Playgroud)

传递给函数的参数ALS_Y/ALS_X不是引用,它复制了参数.所以,当XY非常large matrixes,例如,在我的情况下,它是6000*40左右(并且它是a for-loop,让我们假设迭代次数是50 000,所以......) ,它超出了记忆的极限.
然后我尝试使用全局参数,只是将索引作为参数传递给函数,

import multiprocessing
import time
import numpy as np

def func(idx):
    global a
    a[idx] += 1



if __name__ == "__main__":
    a=range(10)
    for j in xrange(2):
        pool = multiprocessing.Pool(processes=8)
        result = []
        for i in xrange(10):
            result.append(pool.apply_async(func, (i, )))
        pool.close()
        pool.join()
        print a
        print "Sub-process(es) done."
Run Code Online (Sandbox Code Playgroud)

它输出:`

[0, …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing gpu matrix matrix-factorization

5
推荐指数
0
解决办法
532
查看次数