私は、ブルートフォース最適化を行う並列化されたC++プログラムを持っています。何らかの理由で、コアあたりの収穫逓減が最大6コアになり、その時点で壁にぶつかり、さらにコアが速度を上げません。これは、8コアまたは16コアのマシンで実行した場合に一貫しています。
実行するstrace -f ./progname
と、プログラムのマルチスレッドセクションで特に発生する次のようなものが大量に発生します。[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0
そして次々に発生するこれらのいくつか:[pid 2645] mprotect(0x7ffe78030000, 4096, PROT_READ|PROT_WRITE <unfinished ...>
-[pid 2646] <... mprotect resumed> ) = 0
しかし、彼らはいつも同じからではありませんpid
。
コアの数を減らすと、上記のメッセージが少なくなり、2つまたは3つのコアでは何も表示されません。
私が推測できる唯一のことは、多分それは各スレッドで行われる大量のベクトル割り当てとアクセスに関係しているということです。必要に応じて、他のメモリ管理ライブラリは使用していません。