是否有必要在OpenMP中将循环索引设置为私有变量?

时间:2017-04-07 08:27:24

标签: openmp

我正在阅读此OpenMP tutorial,并遇到以下程序:

i

我有点困惑,循环索引private是否必须是i变量。从同一个教程开始:

  

所有线程都可以修改和访问所有变量(循环索引除外)

所以线程似乎无法控制i,是不是?顺便说一句,我尝试从private变量中删除String,结果似乎没问题。

1 个答案:

答案 0 :(得分:1)

不,没有必要指定循环索引变量为#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char *p ; char *q ; char *l = "aaaaaasdfsfdqwecvxcxfwdsagfd" ; p = (char*)malloc(sizeof(l)) ; q = (char*)malloc(strlen(l)) ; strcpy(p, l) ; strcpy(q, l) ; printf("%s\n",p) ; printf("%s\n",q) ; printf("%d\n",strlen(l)) ; return 0 ; } 。 OpenMP强制执行该操作,并在其许多页面中的某个位置标准状态。

此外,OpenMP标准的要求禁止对循环内的循环索引变量进行任何调整。实际上,OpenMP在C(和C ++)程序上强制执行Fortran内置的约束之一。这使得运行时能够在首次遇到循环时正确地调度跨线程的多次迭代,而不必担心在执行期间分发可能无效。

请记住,在循环初始化时,线程将被分配private的值集合,这些值根据指定的调度(由程序员或某些实现定义的默认值)分配各个循环迭代。允许线程更新本地&#39; i的值会导致疯狂的代码