OpenMP中数组归约时各线程的私有数组初始状态是什么?
OpenMP 4.5数组归约的私有数组初始化规则
OpenMP 4.5支持对原生数组执行归约操作,语法为reduction(+:array[:]),用法和传统标量归约reduction(+:scalar)类似。目前关于标量归约的私有变量初始化资料较多,但数组归约的私有数组初始化细节很少,这里明确回答核心疑问:
各线程的私有数组会初始化为全零数组(选项b)。
依据OpenMP 4.5标准的归约规则,无论归约对象是标量还是数组,私有副本的初始化都遵循「对应操作符的单位元」原则:
- 对于加法归约(
+),数值类型的单位元是0; - 私有数组的每个元素都会初始化为0,也就是全零数组。
需要注意的是,原数组的初始值不会影响私有数组的初始化——只有在并行块执行完毕、归约操作完成后,所有线程私有数组的累加结果才会合并到原数组中。
内容的提问来源于stack exchange,提问作者张亦弛
相关产品推荐
相关产品推荐

