Мне кажется, что я испытываю ложный обмен при использовании OpenMP. Есть ли способ идентифицировать и исправить это?
Мой код: https://github.com/wchan/libNN/blob/master/ResilientBackpropagation.hpp строка 36.
Использование 4-ядерного ЦП по сравнению с однопоточной 1-ядерной версией принесло лишь 10% дополнительной производительности. При использовании физической (64 виртуальной) процессорной системы NUMA 32 загрузка ЦП ограничивается примерно 1,5 ядрами, я думаю, что это является прямым признаком ложного совместного использования и невозможности масштабирования.
Я также пытался запустить его с помощью профилировщика Intel VTune, в котором говорилось, что большую часть времени тратится на функции "f ()" и "+ =". Я считаю, что это разумно и не объясняет, почему у меня такое плохое масштабирование ...
Есть идеи / предложения?
Спасибо.