У меня довольно большой код, и я хочу оптимизировать некоторые операции с помощью инструкций AVX.Согласно моим тестам, улучшение должно быть до 4x.
Однако в коде используются простые старые массивы (без std :: vector) с оператором new.
double * tmp = new double[size];
Проблема в том,для AVX мне нужны все двойные массивы, выровненные по границе 32 байта.Решение состоит в том, чтобы заменить все new
на aligned_alloc
(или _aligned_malloc
в MSVC), а также заменить функции разблокировки соответствующими функциями.Проблема в том, что я должен пройти через весь код и найти все new
, надеясь не забыть один, и в будущем все не должны забывать использовать выровненный локатор.
Есть ли другой способ?Я думал о перегрузке new
оператор только для double
, но я не уверен, если это правильный путь, и если так, как это сделать правильно / безопасно.
Я не могу переключиться на std::vector
с собственным выровненным локатором из-за некоторых внешних библиотек C-only, которые принимают массив в качестве входных параметров.