ITK (3.20.1) スレッドのプロセッサ アフィニティを設定する方法はありますか。「SetGlobalDefaultNumberOfThreads」を持つ ITK::MultiThreader クラスを調べていました。しかし、私はアフィニティについて何かを言っている関数/メソッドを見つけていません。
任意の助けをいただければ幸いです..
ITK (3.20.1) スレッドのプロセッサ アフィニティを設定する方法はありますか。「SetGlobalDefaultNumberOfThreads」を持つ ITK::MultiThreader クラスを調べていました。しかし、私はアフィニティについて何かを言っている関数/メソッドを見つけていません。
任意の助けをいただければ幸いです..
私がインストールしたバージョン (3.18) では、この機能はサポートされていないようです。しかし、MultiThreader
ヘッダー ファイルを見ると、実装がネイティブ OS スレッド メカニズムに依存していることに気付きました。これは、Linux では、pthreads が実際に生成され、pthread_t
に直接使用されるThreadProcessIdType
ことを意味します。これは、コア アフィニティに Linux 独自の拡張機能を使用できる可能性があることを意味します。
この回答から別の質問への引用:
残念ながら、posix スレッド API には、スレッドの CPU アフィニティを設定する方法がありません。Linux プラットフォーム
pthread_attr_setaffinity_np
で提供される移植性のない拡張cpuset
機能を使用して、スレッド アフィニティを構成する関数のファミリを使用できます。
スレッドはすでに実行されているため、アフィニティを設定する前にスレッド属性を取得する必要があります。Linux には、そのための移植性のない関数がもう 1 つありますpthread_getattr_np
。
また、このcpuset
機能はカーネルに組み込む必要がありますが、これはマルチコアをサポートするほとんどのプラットフォームに当てはまります。
参照: