0

この種のネストされたループがあります:これを最適な形で並列化する方法を知りたいです:

  1. 2回目と3回目for、5回目と6回目forの同時走行

  2. forシリアルの最初と 4 番目

24 コアがあり、16 スレッド間でアウターを分割し、それらの残りを使用してインナーforを実行する場合、たとえば、for1 つのスレッドだけでなく 8 スレッドで 2 番目を実行する場合、どうすればよいですか?

void main()
{
//first_for
   for(int y=0; y< height; y++)
{
      //second_for 
      for(int x=0; x< width-1; x++)
   {
     func1();
   }
      //third_for
      for(int x=0; x< width-1; x++)
   {
     func2();
   }

}
//fourth_for
   for(int x=0; x<width; x++)
{
     //fifth_for
     for(int y=0; y< height-1; y++)
   {
     func3();
   }
     //sixth_for
     for(int y=0; y< height-1; y++)
   {
     func4();
   }
}
}
4

2 に答える 2

0

前述の内容に加えて、ネストされた並列処理を明示的に有効にしたい場合があります。これは、実行時のライブラリ呼び出しまたは環境変数 (OpenMP の場合) のいずれかで行うことができます。

詳細については、このOracle Docsを参照してください。

于 2013-07-23T17:02:46.527 に答える