OpenMP,并行for循环,bigIntegers

时间:2015-06-18 15:53:15

标签: c++ openmp

是否可以创建一个索引不是整数的并行for循环? 我使用bigIntegers(新对象)。

2 个答案:

答案 0 :(得分:2)

一年前,OpenMP 4.0规范是finalised and published。它要求并行循环的变量应该是有符号或无符号整数类型或随机访问迭代器类型或指针类型(§2.6,p.51)。

所以,基本上不行,不可能用任何变量类型制作并行的for循环。

答案 1 :(得分:1)

您可以自己实施日程安排。下面是一个使用等效schedule(static)和GCC内置128位整数的示例。

#pragma omp parallel
{
    __int128 start = omp_get_thread_num()*N/omp_get_num_threads();
    __int128 finish = (omp_get_thread_num()+1)*N/omp_get_num_threads();
    for(__int128 i=start; i<finish; i++) foo(i);
}

如果你想要等同于schedule(dynamic),你可以

__int128 cnt = 0;
#pragma omp parallel
for(__int128 i=0;;) {
    #pragma omp atomic capture
    i = cnt++;
    if(i>=N) break;
    foo(i);                                    
}