2016-04-11 15 views
-2

私はgccOpenMPソースを学ぶ必要があります。私はOpenMP(3.0と4.0)の文書を読んだ。私が知っているように、OpenMPはwork-sharingメカニズムを使用しました。私が理解しているように、メカニズムはスレッド間でタスクを転送しますスレッドが実行中です。または、これらのスレッドを実行する前に、スレッド間でのデータの分散が実行されていますか?作業共有メカニズム(OpenMP)は、スレッドが実行中にスレッド間でタスクを送信しますか?

+0

[自分自身でワークシェアリングを実装することで、多くのことを教えることができます](http://stackoverflow.com/a/30591616/2542702)。 –

答えて

1

のタスクでOpenMPを使用している場合、タスクは1つ以上のタスクキューに格納されます。スレッドは、アイドル状態のスレッドを検出すると、隣接するキューからタスクをスヌーピングします。これはlibgompの内部です。

静的スケジュールのOpenMP を並列のに使用すると、タスクスヌーピングは実行されません。

のOpenMP を動的スケジュールで使用すると、チーム内のスレッドが動的に作業を分割して、アイドル状態のスレッドが他のチームからタスクを引き継ぎます。

一般に、スレッドが実行時に通信する必要がある場合、サイクルは処理から消費されます。

+0

本当にありがとう! –

関連する問題