2021年10月4日月曜日

物理コア数の検出

 前回結果より、スレッド数は、必ずしも多ければよい、という訳ではないということが分かったので、FirstOrderMethodを使用する場合には、次のAlgorithmで、スレッド数を決定しようと思います。

if 物理コア数が4以下 ⇒スレッド数=4

else ⇒スレッド数=物理コア数-1 

例えば、論理コア数が16、物理コア数が8のときは、7となります。

それで、物理コア数の検出が必要になるのですが、残念ながら物理コア数を得るLinux/Windowsで統一的に得る方法がない! らしいです。実際、以下のコードでコメントアウトしたのは、論理コア数を得るコードらしく、Ryzen5800Xでは、16が得られてしまいます。



//int cores = omp_get_num_procs();
//unsigned int cores = std::thread::hardware_concurrency();
      int cores = VCL_NAMESPACE::physicalProcessors();
      if (cores <= 4) {
            threads = cores;
        }else {
            threads = cores - 1;
        }
        cout << "threads=" << threads << endl;
}

これで、走らせてしまうと15スレッドが駆動されてしまうので、却ってパフォーマンスが低下してしまいます。(ベストな7スレッド駆動にしたい) そこで、StackOverFlowで紹介されたhttps://github.com/vectorclass/add-on/tree/master/physical_processors

を用いて、物理コア数を検出するようにしました。

0 件のコメント:

コメントを投稿