簡體   English   中英

OpenMP,並行for循環,bigIntegers

[英]OpenMP, parallel for loop, bigIntegers

是否可以創建一個索引不是整數的並行for循環? 我使用bigIntegers(新對象)。

OpenMP 4.0規范於一年前完成並發布 它要求並行循環的變量應該是有符號或無符號整數類型,或者是隨機訪問迭代器類型或指針類型(第2.6節,第51頁)。

所以,基本上沒有,不可能使用任何變量類型進行並行for循環。

您可以自己實施調度。 下面是使用與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);
}

如果你想要相同的schedule(dynamic)你可以做

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM