Parallel processing 使用OpenMP并行化独立指令列表

Parallel processing 使用OpenMP并行化独立指令列表,parallel-processing,openmp,Parallel Processing,Openmp,我有一个可以并行执行的独立指令(长)列表。这些不是循环,它们只是这样: istr1; istr2; ... istrN; 如何使用OpenMP将它们并行化?我知道我可以在一些pthread中手动拆分它们,但我想知道是否有更简单的方法,可以像OpenMP那样根据cpu的数量自动调整线程的数量。这就是OpenMP部分的用途 #pragma omp平行段 { #pragma-omp段 istr1; #pragma-omp段 istr2; ... #pragma-omp段 地峡; } 另一种选择是使

我有一个可以并行执行的独立指令(长)列表。这些不是循环,它们只是这样:

istr1;
istr2;
...
istrN;

如何使用OpenMP将它们并行化?我知道我可以在一些pthread中手动拆分它们,但我想知道是否有更简单的方法,可以像OpenMP那样根据cpu的数量自动调整线程的数量。

这就是OpenMP部分的用途

#pragma omp平行段
{
#pragma-omp段
istr1;
#pragma-omp段
istr2;
...
#pragma-omp段
地峡;
}
另一种选择是使用显式任务:

#pragma omp并行
{
#布拉格omp单曲
{
#pragma-omp任务
istr1;
#pragma-omp任务
istr2;
...
#pragma-omp任务
地峡;
}
}

任务在
单个
构造中创建,以防止在所有线程中创建任务(从而防止每个任务被创建num_线程次)。使用显式任务可能会带来更好的性能,因为大多数OpenMP运行时在调度部分时使用了相当愚蠢的逻辑。

谢谢,这很有效。不幸的是,我的性能实际上越来越差,可能是因为编译器可以对原始代码进行更好的优化,并且指令不足以实际利用并行性。OpenMP引入了一些开销。如果每个部分/任务的代码只需要很少的时间就可以完成,那么开销可能会很高,从而抵消并行运行的好处。也可能是你正在经历类似虚假分享的事情。