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?_Multithreading_Openmp - Fatal编程技术网

Multithreading 在不同的线程下运行相同的代码有什么意义-openMP?

Multithreading 在不同的线程下运行相同的代码有什么意义-openMP?,multithreading,openmp,Multithreading,Openmp,发件人: 平行结构 并行构造启动并行块。它创建了一个团队 N个线程(其中N在运行时确定,通常从 CPU核的数量,但可能会受到一些因素的影响),所有 执行下一条语句(或下一个块,如果该语句 是一个{…}-enclosure)。在语句之后,线程重新连接到 一个 我想了解在不同线程下运行相同代码的意义。在什么样的情况下它会有帮助?OpenMP的基本思想是分配工作。为此,您需要创建一些线程 parallel构造创建这个数量的线程。之后,您可以将工作分配/共享给其他构件,如omp for或omp task

发件人:

平行结构

并行构造启动并行块。它创建了一个团队 N个线程(其中N在运行时确定,通常从
CPU核的数量,但可能会受到一些因素的影响),所有 执行下一条语句(或下一个块,如果该语句 是一个{…}-enclosure)。在语句之后,线程重新连接到 一个


我想了解在不同线程下运行相同代码的意义。在什么样的情况下它会有帮助?

OpenMP的基本思想是分配工作。为此,您需要创建一些线程

parallel
构造创建这个数量的线程。之后,您可以将工作分配/共享给其他构件,如
omp for
omp task


这种区别的一个可能好处是,当您必须为每个线程分配内存(即线程本地数据)时。

OpenMP的基本思想是分配工作。为此,您需要创建一些线程

parallel
构造创建这个数量的线程。之后,您可以将工作分配/共享给其他构件,如
omp for
omp task

这种区别的一个可能好处是,当您必须为每个线程分配内存(即线程本地数据)时

我想了解在不同线程下运行相同代码的意义。在什么样的情况下它会有帮助

当您在不同的数据上运行相同的代码时

例如,如果我想反转10个矩阵,我可以在10个线程上运行矩阵反转代码。。。与1个线程和
循环相比,获得(理想情况下)10倍的加速比

我想了解在不同线程下运行相同代码的意义。在什么样的情况下它会有帮助

当您在不同的数据上运行相同的代码时


例如,如果我想反转10个矩阵,我可以在10个线程上运行矩阵反转代码。。。要获得(理想情况下)10倍于1个线程的加速比和
循环的

通过使用
omp\u get\u thread\u num()
可以检索线程ID,从而使您能够针对该线程ID参数化所谓的“相同代码”

举个例子:

A
是一个1000维整数数组,需要使用2个OpenMP线程对其值求和

您可以设计如下代码:

int A_dim = 1000
long sum[2] = {0,0}
#pragma omp parallel  
   { 
     int threadID = omp_get_thread_num();
     int start = threadID * (A_dim / 2)
     int end = (threadID + 1) * (A_dim / 2)
     for(int i = start; i < end; i++)
       sum[threadID] += A[i]
   }
int A_dim=1000
长和[2]={0,0}
#pragma-omp并行
{ 
int threadID=omp_get_thread_num();
int start=threadID*(A_dim/2)
int end=(线程ID+1)*(A_dim/2)
for(int i=start;i
start
是线程开始求和的下限(例如:线程#0将从0开始求和,而线程#1将从500开始求和)


end
start
几乎相同,但它是线程将求和到的数组索引的上限(例如:线程0将求和到500,求和值从
A[0]
A[499]
,而线程1将求和到1000,求和值从
A[500]
A[999]

通过使用
omp\u get\u thread\u num()
您可以检索线程ID,该ID使您能够针对该线程ID参数化所谓的“相同代码”

举个例子:

A
是一个1000维整数数组,需要使用2个OpenMP线程对其值求和

您可以设计如下代码:

int A_dim = 1000
long sum[2] = {0,0}
#pragma omp parallel  
   { 
     int threadID = omp_get_thread_num();
     int start = threadID * (A_dim / 2)
     int end = (threadID + 1) * (A_dim / 2)
     for(int i = start; i < end; i++)
       sum[threadID] += A[i]
   }
int A_dim=1000
长和[2]={0,0}
#pragma-omp并行
{ 
int threadID=omp_get_thread_num();
int start=threadID*(A_dim/2)
int end=(线程ID+1)*(A_dim/2)
for(int i=start;i
start
是线程开始求和的下限(例如:线程#0将从0开始求和,而线程#1将从500开始求和)

end
start
几乎相同,但它是线程将求和到的数组索引的上限(例如:线程0将求和到500,求和值从
A[0]
A[499]
,而线程1将求和到1000,求和值从
A[500]
A[999]

我想了解在不同线程下运行相同代码的意义。在什么样的情况下它会有帮助

一个例子:在物理学中,你的代码中有一个随机过程(碰撞、初始麦克斯韦等),你需要多次运行代码才能得到平均结果,在这种情况下,你需要多次运行相同的代码

我想了解在不同线程下运行相同代码的意义。在什么样的情况下它会有帮助

一个例子:在物理学中,你的代码中有一个随机过程(碰撞、初始麦克斯韦等),你需要多次运行代码才能得到平均结果,在这种情况下,你需要多次运行相同的代码