标签: parallel-processing

支持所有c ++ 11并发功能的c ++编译器?

我尝试学习用c ++ 11的线程库编写并行代码所以首先我需要一个支持这个库的编译器我的问题是什么编译器可以支持c ++ 11的所有并发特性?

警告:

这个问题是关于c ++ 11的并发特性,而不是最适合C++ 11的编译器.

c++ parallel-processing shared-memory c++11

8
推荐指数
1
解决办法
2041
查看次数

如何在F#3.0中使用pseq?

在F#3.0中使用PSeq的最佳方法是什么?

F#3.0没有动力装置,没有证据表明PSeq包含在3.0中.

parallel-processing f#

8
推荐指数
1
解决办法
1130
查看次数

N-Body问题:双循环的高效并行化

关于N体问题的一个非常普遍的问题是使用双循环来计算粒子之间的相互作用.考虑到n个粒子的N体问题,可以编写循环

for (i = 0, i < n; i++)
    for (j = i+1, j < n; j++)
        // calculate interaction
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用不同的线程并行化这个循环.目标是每个线程"理想地"必须计算相同数量的交互.

我的想法是在不同的时间间隔上分离外部循环,即i循环,例如a_k = a(k),其中k = 1,2,...,p其中p是我们想要划分的线程数问题进入.

因此,循环可以写成

for (k = 1, k < p; k++)
    for (i = a(k), i < a(k+1); i++)
        for (j = i+1, j < n; j++)
            // calculate interaction
Run Code Online (Sandbox Code Playgroud)

最外循环,即k循环,是要并行化的循环.

因为最内循环(j循环)的交互次数是n-(i + 1),所以每个线程计算的交互次数是

\ sum_ {i = a(k)} ^ {a(k + 1)} n - (i + 1)

这意味着人们希望找到离散函数a_k以使其具有功能性

f [a_k] =\sum_ {i = a(k)} ^ …

math parallel-processing optimization

8
推荐指数
1
解决办法
267
查看次数

Xvfb多显示器用于并行处理?

对运行多个xvfb显示器感到好奇:我有10-50个并行运行的脚本实例连接到xvfb显示器.是否有利于运行相同数量的xvfb显示并连接1对1?或者多个进程可以共享同一个显示?RAM不是问题,处理能力也不是问题.

python parallel-processing rendering xvfb

8
推荐指数
1
解决办法
5716
查看次数

并行最小生成树算法

我知道一些最小的生成树算法:Boruvka,Prim和Kruskal.哪些可以并行实现?

谢谢!

algorithm parallel-processing graph-algorithm

8
推荐指数
1
解决办法
1839
查看次数

为什么plyr包不使用我的并行后端?

我正在尝试使用parallelR中的包进行并行操作,而不是doSNOW因为它是内置的,表面上是R Project想要的东西.我做错了,但我不能确定.以此为例:

a <- rnorm(50)
b <- rnorm(50)

arr <- matrix(cbind(a,b),nrow=50)

aaply(arr,.margin=1,function(x){x[1]+x[2]},.parallel=F)
Run Code Online (Sandbox Code Playgroud)

这很好用,产生了我的两列的总和.但是,如果我尝试引入并行包:

library(parallel)
nodes <- detectCores()
cl <- makeCluster(nodes)
setDefaultCluster(cl)

aaply(arr,.margin=1,function(x){x[1]+x[2]},.parallel=T)
Run Code Online (Sandbox Code Playgroud)

它抛出错误

2: In setup_parallel() : No parallel backend registered
3: executing %dopar% sequentially: no parallel backend registered 
Run Code Online (Sandbox Code Playgroud)

我初始化后端错了吗?

parallel-processing r plyr

8
推荐指数
1
解决办法
5886
查看次数

使用openMP并行化嵌套for循环

我正在尝试使用openMP优化下面函数generate_histogram()中的嵌套for循环.基于我在SE帖子中读到的内容,我尝试了不同的编译指示组合.

问题是嵌套for循环在没有openMP的情况下比使用openMP更快!

如果我尝试使用简化而不是原子编译来并行化我的代码,我最终会遇到netchunk失败.有人知道这个花哨的调整吗?我试图将数据分成直方图.因此,直方图在实际代码中的大小可变,与下面的代码段不同.

#include<stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define float_t float
#include <time.h>
#include <omp.h>

float_t generate_histogram(float_t **matrix, int *histogram, int mat_size, int hist_size)
{
int i,j,k,count;
float_t max = 0.;
float_t sum;

//set histogram to zero everywhere
for(i = 0; i < hist_size; i++)
    histogram[i] = 0;


//matrix computations
#pragma omp parallel for private(i) shared(histogram,j,k,max) schedule(dynamic)
//#pragma omp parallel for schedule(runtime)
for (i = 1; i < (mat_size-1); i++)
{
    #pragma omp parallel …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing for-loop openmp

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

Julia中的并行编程

我一直在关注julia中的并行编程的文档,而我的想法就像openMP或MPI一样,我发现设计选择很奇怪.

我有一个应用程序,我希望数据在进程之间分配,然后我想告诉每个进程将一些操作应用于它分配的任何数据,但我没有看到在Julia中这样做的方法.这是一个例子

julia> r = remotecall(2, rand, 2)
RemoteRef{Channel{Any}}(2,1,30)

julia> fetch(r)
2-element Array{Float64,1}:
 0.733308
 0.45227 
Run Code Online (Sandbox Code Playgroud)

所以在进程2中存在一个包含2个元素的随机数组.我可以通过这个数组应用一些函数

julia> remotecall_fetch(2, getindex, r, 1)
0.7333080770447185
Run Code Online (Sandbox Code Playgroud)

但是,如果我应用一个应该改变向量的函数,为什么它不起作用,如:

julia> remotecall_fetch(2, setindex!, r, 1,1)
ERROR: On worker 2:
MethodError: `setindex!` has no method matching setindex!(::RemoteRef{Channel{Any}}, ::Int64, ::Int64)
 in anonymous at multi.jl:892
 in run_work_thunk at multi.jl:645
 [inlined code] from multi.jl:892
 in anonymous at task.jl:63
 in remotecall_fetch at multi.jl:731
 in remotecall_fetch at multi.jl:734
Run Code Online (Sandbox Code Playgroud)

我不太清楚如何描述它,但似乎工人只能回归"新"事物.我不知道如何将一些变量和函数发送给worker并让函数修改变量.在上面的例子中,我希望数组存在于一个进程中,理想情况下我能够告诉该进程在该数组上执行某些操作.完成所有操作后,我可以获取结果等.

parallel-processing mpi julia

8
推荐指数
1
解决办法
960
查看次数

在Java中安全发布不可变对象

我想了解是否volatile需要发布不可变对象.

例如,假设我们有一个不可变对象A:

// class A is immutable
class A {
  final int field1;
  final int field2;

  public A(int f1, int f2) {
    field1 = f1;
    field2 = f2;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我们有一个B从不同线程访问的类.它包含对类对象的引用A:

// class B publishes object of class A through a public filed
class B {
  private /* volatile? */ A toShare;

  // this getter might be called from different threads
  public A getA(){
    return toShare;
  }

  // this might be called …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing concurrency java.util.concurrent

8
推荐指数
1
解决办法
756
查看次数

如何与Julia CUDArt同步?

我刚刚开始使用Julia的CUDArt包来管理GPU计算.我想知道如何确保如果我从gpu(例如使用to_host())中提取数据,而在执行所有必要的计算之前我不这样做.

通过一些实验,似乎to_host(CudaArray)在特定的CudaArray更新时会滞后.那么,或许只是使用它就足以确保安全?但它看起来有点渺茫.

现在,我正在使用该launch()函数来运行我的内核,如包文档中所述.

CUDArt文档给出了一个使用Julia的@sync宏的例子,看起来它可能很可爱.但是出于@sync我的目的,我完成了我的"工作"并准备好在内核启动后立即继续launch(),而不是一旦完成.据我了解的操作launch()- 没有办法改变这个功能(例如,让它等待接收函数的输出"启动").

我怎样才能实现这种同步?

parallel-processing julia julia-gpu

8
推荐指数
2
解决办法
264
查看次数