Векторизация, безусловно, путь к go, но с изюминкой C ++. динамически размещаемые двумерные массивы не являются двумерными массивами. Они представляют собой массив указателей на массивы. Они также могут быть жестоко и мучительно медленными из-за всех скачков в памяти, которые, вероятно, должен делать процессор. Это почти наверняка часть того, о чем вас предупреждает тюнер. Если вам нужно ускорить это, сначала посмотрите, можете ли вы использовать непрерывное хранилище данных для улучшения кэширования и уменьшения погони за указателями. Вот простой .
Далее идет fa[i][j] = ffa_tmp[Index[i]][j]];
. В зависимости от того, как устроен Index[i]][j]
, ЦПУ, возможно, придется переходить назад и вперед через ffa_tmp
в поисках индексированной записи. Современные процессоры работают наилучшим образом при доступе к данным, если они непрерывны и предсказуемы (см. Почему обработка отсортированного массива выполняется быстрее, чем обработка несортированного массива? ). Вы ничего не можете сделать, чтобы улучшить дружественность кеша. Если первое предложение не дает необходимого улучшения производительности, посмотрите, можете ли вы изменить дизайн, чтобы избежать необходимости выполнять эту индексацию полностью.