C++ OpenMP,循环并行,大整数

C++ OpenMP,循环并行,大整数,c++,openmp,C++,Openmp,是否可以为索引不是整数的循环创建并行for? 我使用大整数(新对象)。OpenMP 4.0规范是一年前制定的。它要求并行循环的变量应为有符号或无符号整数类型,或随机访问迭代器类型或指针类型(§2.6,第51页) 因此,基本上不可能对任何变量类型的循环进行并行。您可以自己实现调度。下面是一个示例,它使用了与GCC内置的128位整数相当的schedule(static) #pragma omp parallel { __int128 start = omp_get_thread_num()*

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

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


因此,基本上不可能对任何变量类型的循环进行并行。

您可以自己实现调度。下面是一个示例,它使用了与GCC内置的128位整数相当的
schedule(static)

#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);
}

只有内置整数类型和随机访问迭代器可以用作循环变量。非常感谢您的回答
__int128 cnt = 0;
#pragma omp parallel
for(__int128 i=0;;) {
    #pragma omp atomic capture
    i = cnt++;
    if(i>=N) break;
    foo(i);                                    
}