c 中的 pragma omp 快捷方式
pragma omp shortcuts in c
我有一些全局变量需要在程序的并行化部分中使用。所以我写了这个:
#define N 2000
int x[N], matrix[N][N]
int main(int argc, char **argv)
...
#pragma omp parallel
{
#pragma omp privatethread(x,matrix)
#pragma omp for
for(int k=0; k<100;++k)
/*some function to modify values of x and matrix differently
from run to run*/
...
}
...
带#pragma的部分是否等同于:
...
#pragma omp privatethread(x,matrix) parallel for
...
声明#pragma omp parallel然后#pragma omp privatethread和先声明#pragma有区别吗omp privatethread 然后 #pragma omp parallel for?我必须在 privathread 部分之后放一个 { 吗?
#pragma omp privatethread(x,matrix)
{ //<-- here
#pragma omp for
最后,这是在 c 中处理大向量的好方法,还是在我的 pragma omp 中使用 malloc 并删除私有线程部分更好? (如果我在新的 post 中问这个结尾问题是否更好,请告诉我)
1.The 下面的代码给你一个错误。即使你删除 for.
...
#pragma omp privatethread(x,matrix) parallel for
...
声明必须遵循此语法
#pragma omp threadprivate (list)
2.There没有区别,
#pragma omp parallel
{
#pragma omp privatethread(list)
//CODE
}
和
#pragma omp privatethread(list)
#pragma omp parallel
{
//CODE
}
如您所见,您不必在 #pragma omp privatethread 之后放置 { 括号。此语句不会 运行 任何并行代码只是使全局范围变量局部化并持久化到线程。
我有一些全局变量需要在程序的并行化部分中使用。所以我写了这个:
#define N 2000
int x[N], matrix[N][N]
int main(int argc, char **argv)
...
#pragma omp parallel
{
#pragma omp privatethread(x,matrix)
#pragma omp for
for(int k=0; k<100;++k)
/*some function to modify values of x and matrix differently
from run to run*/
...
}
...
带#pragma的部分是否等同于:
...
#pragma omp privatethread(x,matrix) parallel for
...
声明#pragma omp parallel然后#pragma omp privatethread和先声明#pragma有区别吗omp privatethread 然后 #pragma omp parallel for?我必须在 privathread 部分之后放一个 { 吗?
#pragma omp privatethread(x,matrix)
{ //<-- here
#pragma omp for
最后,这是在 c 中处理大向量的好方法,还是在我的 pragma omp 中使用 malloc 并删除私有线程部分更好? (如果我在新的 post 中问这个结尾问题是否更好,请告诉我)
1.The 下面的代码给你一个错误。即使你删除 for.
...
#pragma omp privatethread(x,matrix) parallel for
...
声明必须遵循此语法
#pragma omp threadprivate (list)
2.There没有区别,
#pragma omp parallel
{
#pragma omp privatethread(list)
//CODE
}
和
#pragma omp privatethread(list)
#pragma omp parallel
{
//CODE
}
如您所见,您不必在 #pragma omp privatethread 之后放置 { 括号。此语句不会 运行 任何并行代码只是使全局范围变量局部化并持久化到线程。