Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用openmp崩溃处理可能的线程数 int-DIMENSION=4,totalPair=0; #pragma omp并行专用(sx、dy、dx) 对于(sy=0;syaddreduce(+:totalPair)到每个pragmaThanks获取答案。实际_Multithreading_Nested_Openmp - Fatal编程技术网

Multithreading 使用openmp崩溃处理可能的线程数 int-DIMENSION=4,totalPair=0; #pragma omp并行专用(sx、dy、dx) 对于(sy=0;syaddreduce(+:totalPair)到每个pragmaThanks获取答案。实际

Multithreading 使用openmp崩溃处理可能的线程数 int-DIMENSION=4,totalPair=0; #pragma omp并行专用(sx、dy、dx) 对于(sy=0;syaddreduce(+:totalPair)到每个pragmaThanks获取答案。实际,multithreading,nested,openmp,Multithreading,Nested,Openmp,使用openmp崩溃处理可能的线程数 int-DIMENSION=4,totalPair=0; #pragma omp并行专用(sx、dy、dx) 对于(sy=0;syaddreduce(+:totalPair)到每个pragmaThanks获取答案。实际上,我的目标是确保所有线程都在每个值上运行一次(使用特定的组合(sy=0,sx=0,dy=0,dx=0),假设分配给线程0)因此,使用collapse,是否有可能使线程重叠(sy=0,sx=0,dy=0,dx=0),同时分配给两个线程)。使用r

使用openmp崩溃处理可能的线程数
int-DIMENSION=4,totalPair=0;
#pragma omp并行专用(sx、dy、dx)

对于(sy=0;syadd
reduce(+:totalPair)
到每个pragmaThanks获取答案。实际上,我的目标是确保所有线程都在每个值上运行一次(使用特定的组合(sy=0,sx=0,dy=0,dx=0),假设分配给线程0)因此,使用collapse,是否有可能使线程重叠(sy=0,sx=0,dy=0,dx=0),同时分配给两个线程)。使用reduce,我无法在本例中进行检查。但是,它给出了256的正确答案。如果希望所有线程都执行相同的任务,请不要使用
for
构造。此构造将单个循环的迭代分布在线程之间,当使用collapse`(
collapse(2))时,它将扩展到多个循环
将仅并行化
sx
sy
维度。如果希望所有线程分别生成
totalPair=256
,则使用单个
#pragma omp parallel
。在您的示例中,您的程序具有竞争条件(循环的结果不确定),这是使用
reduce
指令解决的。另一个问题出现了,我发现collapse适用于最多16个嵌套循环。在16个嵌套循环中,此子句以0次迭代运行所有循环。
int DIMENSION = 4, totalPair = 0;
#pragma omp parallel for private(sx,dy,dx) 
 for(sy=0; sy<DIMENSION; sy++)
  for(sx=0; sx<DIMENSION; sx++)
   for(dy=0; dy<DIMENSION; dy++)
     for(dx=0; dx<DIMENSION;dx++){ 
    totalPair++;                                                                 
 }
int DIMENSION = 4, totalPair =0;
#pragma omp parallel for collapse(4) private(dx) 
 for(sy=0; sy<DIMENSION; sy++)
  for(sx=0; sx<DIMENSION; sx++)
   for(dy=0; dy<DIMENSION; dy++)
    for(dx=0; dx<DIMENSION;dx++){ 
    totalPair++;                                                                 
 }
int DIMENSION = 4, totalPair =0;
#pragma omp parallel for collapse(2) private(dy,dx) 
 for(sy=0; sy<DIMENSION; sy++)
  for(sx=0; sx<DIMENSION; sx++)
   for(dy=0; dy<DIMENSION; dy++)
    for(dx=0; dx<DIMENSION;dx++){ 
    totalPair++;                                                                 
 }