能否为OpenMP的masked指令的filter()指定多个线程?
OpenMP 6.0中masked构造指定多线程子集的方法
OpenMP 6.0规范第12.5章定义的masked构造filter子句,并非接受多个线程号参数,而是要求传入一个整数掩码值。线程组内的每个线程会根据自己的线程号(从0开始计数),检查掩码值中对应位置的二进制位是否为1:如果是,该线程就会执行masked区域的代码块。
要指定线程1和3执行目标代码,你需要通过位运算生成对应的掩码:线程1对应第1位(1 << 1,值为2),线程3对应第3位(1 << 3,值为8),用按位或运算符|组合这两个值,得到掩码10(二进制1010)。
修正后的代码如下:
#include <omp.h> #include <stdio.h> int main() { #pragma omp parallel masked filter( (1 << 1) | (1 << 3) ) { printf("Hello from %d\n", omp_get_thread_num()); } return 0; }
你也可以直接传入计算好的十进制掩码值,效果完全相同:
#pragma omp parallel masked filter(10)
注意:线程号从0开始计数,若要包含线程0,需将第0位置1(1 << 0,值为1)。
内容的提问来源于stack exchange,提问作者brain-sturm
相关产品推荐
相关产品推荐

