簡體   English   中英

使用OpenMP並行化for循環

[英]Using OpenMP to parallelize a for loop

我是OpenMP的新手。 當我使用並行化for循環時

  #pragma omp parallel for num_threads(4)
  for(i=0;i<4;i++){
    //some parallelizable code
  }

是否保證每個線程都只取一個i值? num_threads不等於for循環的總次數或不平均分配for循環的總次數時,通常如何在線程之間分配循環工作? 是否可以使用命令指定每個線程僅使用i一個值,或者每個線程使用i的值個數?

循環結構中的工作划分由進度表決定。 如果不存在schedule子句,則使用def-sched-var調度,它是實現定義的。

您可以使用schedule (static, 1) ,在您的情況下,它可以確保每個線程都將恰好獲得一個值。

我強烈建議您看一下OpenMP規范 ,表2.5和2.7.1.1。

進行這種假設可能有正當的理由,但總的來說,循環代碼的正確性不應該依賴於此。 首先,我會將其視為性能提示。

根據您的用例,您可能需要考慮任務或只是並行構造。 如果您將此類詳細信息用於循環,請確保在標准中對循環進行了詳細說明,而不僅僅是在您的特定實現中有效。

暫無
暫無

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

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