OpenMP を使用して誤った共有が発生していると思います。それを特定して修正する方法はありますか?
私のコードは次のとおりです: https://github.com/wchan/libNN/blob/master/ResilientBackpropagation.hpp 36 行目。
シングル スレッドの 1 コア バージョンと比較して 4 コア CPU を使用しても、追加のパフォーマンスは 10% しか得られませんでした。NUMA 32 物理 (64 仮想) CPU システムを使用している場合、CPU 使用率は約 1.5 コアでスタックします。これは、フォールス シェアリングの直接的な症状であり、スケーリングできないと思います。
また、Intel VTune プロファイラーで実行してみましたが、ほとんどの時間が "f()" および "+=" 関数に費やされていることがわかりました。私はこれが合理的であり、なぜ私がこんなに貧弱なスケーリングを得ているのかを本当に説明していないと信じています...
アイデア/提案はありますか?
ありがとう。