оптимизация `std::vector operator []` (доступ к вектору), когда он становится узким местом

gprof говорит, что мое приложение для высоких вычислений проводит 53% своего времени внутри std::vector <...> operator [] (unsigned long), 32% которого приходится на один сильно используемый вектор. Хуже того, я подозреваю, что неспособность моего параллельного кода масштабироваться дальше 3-6 ядер связана с узким местом в памяти. Хотя мое приложение тратит много времени на обращение к памяти и ее запись, кажется, что я должен быть в состоянии (или хотя бы попытаться) добиться большего, чем 52%. Следует ли мне попробовать использовать динамические массивы вместо этого (размер остается постоянным в большинстве случаев)? Поможет ли это справиться с возможными узкими местами?

На самом деле, я бы предпочел решить проблему узкого места и оставить векторы как есть для удобства. Исходя из вышесказанного, есть ли какие-либо вероятные виновники или решения (tcmalloc не используется)?

7
задан vaultah 29 May 2015 в 10:29
поделиться