История изменений
Исправление GPFault, (текущая версия) :
Про std::simd можешь почитать вот тут и посмотреть лулзовые тесты тут (github.com).
Довольно печально, но не только std::simd, но и качество выбранных авторами статей аргументов.
Они утверждают что что он принципиально мешает компилятору оптимизировать. Если вызовы simd развёртываются в цепочку вызовыв intrinsic - то компилятор в теории вполне будет способен пооптимизировать и это. Клмпиляторы пока похоже не способны, отсюда и заметный проигрыш в скорости. Но шаблоны никак не влияют на принципиальную возможности оптимизировать.
По остальнрй критике кроме нечитаемых сообщений об ошибках - тоже вопрос доведения до ума связки компилятора + стандартной библиотеки, а не какая-то принципиальная проблема. Если будет опция сборки которая скажет что «simd с шаблонным аргументом 512 сгенерирует avx512, с аргументом 256 - на avx, а с 128 на sse», и аналогично сделает разные ширины вызовов на ARM - я всё шаблонизирую этим параметром, и в точке входа добавлю динамическую диспетчеризацию блока SIMD-вычислений. Вполне рабочее, компромиссное решение. Но, внезапно, остальные упомянутые библиотеки там тоже компромиссные.
Если со стороны реализации в связке компилятор+библиотека кучи мелочей улучшено не будет, то неюзабельно, да.
Исходная версия GPFault, :
Про std::simd можешь почитать вот тут и посмотреть лулзовые тесты тут (github.com).
Довольно печально, но не только std::simd, но и что авторы статей.
Они утверждают что что он принципиально мешает компилятору оптимизировать. Если вызовы simd развёртываются в цепочку вызовыв intrinsic - то компилятор в теории вполне будет способен пооптимизировать и это. Клмпиляторы пока похоже не способны, отсюда и заметный проигрыш в скорости. Но шаблоны никак не влияют на принципиальную возможности оптимизировать.
По остальнрй критике кроме нечитаемых сообщений об ошибках - тоже вопрос доведения до ума связки компилятора + стандартной библиотеки, а не какая-то принципиальная проблема. Если будет опция сборки которая скажет что «simd с шаблонным аргументом 512 сгенерирует avx512, с аргументом 256 - на avx, а с 128 на sse», и аналогично сделает разные ширины вызовов на ARM - я всё шаблонизирую этим параметром, и в точке входа добавлю динамическую диспетчеризацию блока SIMD-вычислений. Вполне рабочее, компромиссное решение. Но, внезапно, остальные упомянутые библиотеки там тоже компромиссные.