标签: parallel-processing

带有foreach的两个rbinded数据帧的输出列表

假设我想foreachdoParallel包中使用返回两个不同维度的数据框列表,如下所示:

a<-NULL
b<-NULL
for(i in 1:100){
  a<-rbind(a,data.frame(input=i,output=i/2))
  if(i > 5){
    b<-rbind(b,data.frame(input=i,output=i^2))
  }
}
list(a,b)
Run Code Online (Sandbox Code Playgroud)

因为foreach返回一个对象,所以没有(至少对我来说)显而易见的方法来执行上述操作foreach.

注意:这是我实际使用的问题的一个简化版本,因此通过使用lapply(或沿着这些行的某些东西)来解决问题是行不通的.我的问题的精神是如何做到这一点foreach.

parallel-processing for-loop r parallel-foreach

4
推荐指数
1
解决办法
2572
查看次数

OpenMP 4中的任务依赖性

以下代码基于OpenMP 4.0规范工作:

out和inout依赖类型.生成的任务将是所有先前生成的兄弟任务的从属任务,其引用入口,出口或入口依赖类型列表中的至少一个列表项.

这意味着task3变得依赖于task2.对?但它没有意义!为什么输入 - 输出依赖性任务应该是输入依赖性任务的依赖?

为了使它们独立,我需要做什么?ps:在Linux上使用g ++ 4.9进行代码测试.

#include <stdio.h>
#include <omp.h>
#include <unistd.h>
int main() {
int x,y;
#pragma omp parallel num_threads(10)
{
#pragma omp single nowait
 {
#pragma omp task depend (out:x)  //task1
  {
        x=1;
  }
#pragma omp task depend(in:x) depend(out:y)  //task2
  {
        sleep(2); //Does task3 wait for us? Yes!
        y=x+1;
  }
#pragma omp task depend (inout:x)  //task3
  {
        x++;
        printf("task3(x): %d\n" , x);
  }
#pragma omp task depend (in:x,y)  //task4
 {
        printf("task4 (x+y): %d\n" …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing dependencies task openmp

4
推荐指数
1
解决办法
4324
查看次数

并行执行使用异步的循环

我正在编写Windows服务,并且正在寻找一种并行执行多个foreach循环的方法,其中每个循环都调用异步(TAP)方法.我最初尝试了以下代码,但由于Parallel.ForEach和async/await不兼容,因此无效.有谁知道是否有替代方法可以实现这一目标?

Parallel.ForEach(messagesByFromNumber, async messageGroup =>
{
    foreach (var message in messageGroup)
    {
        await message.SendAsync();
    }
});
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,由于SendAsync()的运行方式,foreach循环的每个副本必须按顺序执行; 换句话说,foreach循环不能同时/并行.

c# parallel-processing concurrency asynchronous async-await

4
推荐指数
1
解决办法
1446
查看次数

如何在并行包中跟踪R中mclapply的进度

我的问题与这个问题有关.但是,上面引用的问题使用的multicore是被替换的包parallel.无法在parallel包中复制响应中的大多数功能.有没有办法跟踪进度mclapply.在查看mclapply文档时,有一个名为的参数mc.silent,我不确定这是否能够跟踪进度,如果可以,我们如何以及在哪里可以看到日志文件?我在ubuntulinux OS 上运行.请参阅下面的重复性示例,我想对其进行处理.

require(parallel) 

wait.then.square <- function(xx){
  # Wait for one second
  Sys.sleep(2);
  # Square the argument 
  xx^2 } 

output <- mclapply( 1:10, wait.then.square, mc.cores=4,mc.silent=FALSE)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

parallel-processing r lapply mclapply

4
推荐指数
2
解决办法
1892
查看次数

何时在R中的插入符包中使用train()的索引和种子参数

主要问题:

在阅读文档和谷歌搜索之后,我仍然难以确定预先定义重采样指数的情况,例如:

resamples <- createResample(classVector_training, times = 500, list=TRUE)
Run Code Online (Sandbox Code Playgroud)

或预定义的种子,如:

seeds <- vector(mode = "list", length = 501) #length is = (n_repeats*nresampling)+1
for(i in 1:501) seeds[[i]]<- sample.int(n=1000, 1) 
Run Code Online (Sandbox Code Playgroud)

我的计划是通过doParallel软件包使用并行处理来训练一堆不同的可重现模型.由于已经设置了种子,是否不需要预定义重新采样?我是否需要以上述方式预定义种子,而不是在trainControl对象中设置seeds = NULL,因为我打算使用并行处理?是否有任何理由预先定义索引和种子,因为我通过搜索谷歌至少看过一次?什么是使用indexOut的原因?

问题:

到目前为止,我已经设法为RF运行良好的列车:

rfControl <- trainControl(method="oob", number = 500, p = 0.7, returnData=TRUE,   returnResamp = "all", savePredictions=TRUE, classProbs = TRUE, summaryFunction = twoClassSummary, allowParallel=TRUE)
mtryGrid <- expand.grid(mtry = 9480^0.5) #set mtry parameter to the square root of the number of variables
rfTrain <- train(x = training, y = classVector_training, method …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r machine-learning data-mining r-caret

4
推荐指数
1
解决办法
2298
查看次数

用于在MPI中的3D过程分解中交换2D晕圈的子阵列数据类型的数量

假设一个全局的维度立方体,GX*GY*GZ使用3D笛卡尔拓扑将其分解为每个过程中3D的大小多维数据集PX*PY*PZ.添加Halos以便交换数据(PX+2)*(PY+2)*(PZ+2).假设我们使用Subarray数据类型进行2D光环交换 - 我们是否需要定义12子数组类型?

我的理由是:对于YZ平面,我们创建一个Subarray类型用于发送,一个子阵列类型用于接收,因为起始坐标将在子阵列数据类型本身中指定.但是有2 YZ平面,导致4Subarray数据类型.虽然全局和本地数据大小保持不变但由于起始索引 - 我们需要定义4不同的子阵列类型.使用Vector数据类型发送其中四个平面是不是更好,其余两个使用Subarray数据类型?

c 3d parallel-processing 2d mpi

4
推荐指数
1
解决办法
452
查看次数

GNU Parallel:如何确定您正在使用的作业“插槽”?

我试图找到一种方法来确定命令当前正在使用的作业“插槽”或​​“核心” parallel。例如,我们都看到过类似的parallel命令分配方式图像:

在此处输入图片说明

如果我想知道某个过程在哪一列中,我怎么知道?

我的具体问题得到了说明:如果设置-j 4为一次只允许运行4个作业,我想动态地知道一个命令占用的插槽是1 2 3还是4。问题是我有一些不能并行运行的命令,但是如果我知道我正在运行哪个插槽,我很好。

再举个例子,说我有要并行化的这些命令:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource4 file4.rb
command resource1 file5.rb
command resource2 file6.rb
command resource3 file7.rb
command resource4 file8.rb
Run Code Online (Sandbox Code Playgroud)

一次只能使用一个命令来使用每个资源。假设我parallel像往常一样一次将这些命令放入4个作业中,并且作业3完成并转到队列中的下一个,我现在并行运行这些命令:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource1 file5.rb
Run Code Online (Sandbox Code Playgroud)

注意resource1正在被两个命令使用,不好。我需要一个环境变量或告诉下一个命令使用资源号4的东西,以便并行化的命令如下所示:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource4 file5.rb
Run Code Online (Sandbox Code Playgroud)

我曾考虑过使用文件系统或其他一些正在使用资源的外部标志,但我认为使用并行进程时,可能会出现竞争条件。

我到处都看过,非常感谢您的帮助!

parallel-processing gnu-parallel

4
推荐指数
1
解决办法
463
查看次数

bnlearn的并行化(并行包)

我正在使用该R软件包bnlearn来估计贝叶斯网络结构.它使用parallel包内置并行化.但是,这不起作用.

使用联机帮助页中的示例bnlearn::parallel integration:

library(parallel)
library(bnlearn)

cl = makeCluster(2)

# check it works.
clusterEvalQ(cl, runif(10))    # -> this works

data(learning.test)
res = gs(learning.test, cluster = cl)
Run Code Online (Sandbox Code Playgroud)

我在这里得到错误 "Error in check.cluster(cluster) : cluster is not a valid cluster object."

有人知道怎么做这个吗?

parallel-processing r

4
推荐指数
1
解决办法
1652
查看次数

Apache Spark为什么不兼容函数?

阅读http://spark.apache.org/docs/latest/programming-guide.html上的 Apache Spark指南,它指出:

在此输入图像描述

为什么取功能不能并行运行?并行实现这种功能有什么困难?是否与事实有关,为了获取RDD的前n个元素,需要遍历整个RDD?

parallel-processing scala apache-spark

4
推荐指数
1
解决办法
2380
查看次数

带有doParallel集群(R)的foreach()中的未知错误(工作线程初始化失败:21)

这是第一次发布的海报.在发布之前,我按照推荐阅读常见问题和发布指南,所以我希望我以正确的格式发布我的问题.

我在R 64位控制台v.3.1.2中使用doParallel集群后端运行foreach()任务.在Windows 8上.相关软件包是foreach v.1.4.2和doParallel v.1.0.8.

一些示例代码可以让您了解我在做什么:

out <- foreach (j = 1:nsim.times, .combine=rbind, .packages=c("vegan")) %dopar% {

b<-oecosimu(list.mat[[j]], compute.function, "quasiswap", nsimul=nsim.swap) ## where list.mat is a list of matrices and compute.function is a custom function
..... # some intermediate code
return(c(A,B)) ## where A and B are some emergent properties derived from object b from above

}
Run Code Online (Sandbox Code Playgroud)

在我的一个任务中,我遇到了一个我从未见过的错误.我试图在线搜索错误,但找不到任何线索.

错误是:

Error in e$fun(obj, substitute(ex), parent.frame(), e$data) :
worker initialization failed: 21
Run Code Online (Sandbox Code Playgroud)

有一次我收到了这个错误,我在停止上一个任务后运行了代码(使用R Console中的"停止"按钮)但没有通过"stopCluster()"关闭集群.

通过'stopCluster()'停止集群并注册新集群'makeCluster()'和'registerDoParallel()'后,我再次运行相同的代码,任务运行正常.

有没有人遇到过这个错误,或者可能有任何关于如何找出问题的线索/提示?该错误可能与不停止以前的doParallel集群有关吗?

非常感谢任何帮助或建议!

干杯谢谢!

parallel-processing foreach r

4
推荐指数
1
解决办法
7006
查看次数