LINUX.ORG.RU

История изменений

Исправление 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-вычислений. Вполне рабочее, компромиссное решение. Но, внезапно, остальные упомянутые библиотеки там тоже компромиссные.