LINUX.ORG.RU

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

Исправление fsb4000, (текущая версия) :

Если у нас платформа 64-битная, то наиболее эффективно сравнивать куски по 64-бита, так как это будет производиться аппаратно.

Да, только у нас платформа 256 битная или 512 битная.

Обычно наиболее эффективно это когда алгоритм использует самый последний набор инструкций, который поддерживается процессором.

Есть исключения типа для AMD FX AVX не много давал, потому что процессор 128 битный, и инструкции AVX выполнялись два такта, поэтому не было прироста по сравнению с SSE.

Или с AVX-512, на Xeon Gold 6252 медленнее чем AVX-2 версия. Но это возможно код просто не оптимальный: https://github.com/microsoft/STL/pull/2104#issuecomment-917031349

Вот тут есть информация по особенностям микроархитектур процессоров X86: https://www.agner.org/optimize/microarchitecture.pdf

Вот полезная табличка: https://db.in.tum.de/~finis/x86%20intrinsics%20cheat%20sheet%20v1.0.pdf

Просто смотрим для каких операций есть специальные инструкции.

И в выхлопе godbolt просто ищем есть ли такие инструкции.

Ещё в Visual C++ и gcc есть специальные флаги, с которыми компиляторы будут писать предупреждения если компилятор видит циклы которые потенциально могли быть распараллелены, но компилятор не смог.

/Qvec-report:2 и -fopt-info-vec-missed

https://docs.microsoft.com/en-us/cpp/build/reference/qvec-report-auto-vectorizer-reporting-level?view=msvc-170

https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html

Исправление fsb4000, :

Если у нас платформа 64-битная, то наиболее эффективно сравнивать куски по 64-бита, так как это будет производиться аппаратно.

Да, только у нас платформа 256 битная или 512 битная.

Обычно наиболее эффективно это когда алгоритм использует самый последний набор инструкций, который поддерживается процессором.

Есть исключения типа для AMD FX AVX не много давал, потому что процессор 128 битный, и инструкции AVX выполнялись два такта, поэтому не было прироста по сравнению с SSE.

Или с AVX-512, на Xeon Gold 6252 медленнее чем AVX-2 версия. Но это возможно код просто не оптимальный: https://github.com/microsoft/STL/pull/2104#issuecomment-917031349

Вот полезная табличка: https://db.in.tum.de/~finis/x86%20intrinsics%20cheat%20sheet%20v1.0.pdf

Просто смотрим для каких операций есть специальные инструкции.

И в выхлопе godbolt просто ищем есть ли такие инструкции.

Ещё в Visual C++ и gcc есть специальные флаги, с которыми компиляторы будут писать предупреждения если компилятор видит циклы которые потенциально могли быть распараллелены, но компилятор не смог.

/Qvec-report:2 и -fopt-info-vec-missed

https://docs.microsoft.com/en-us/cpp/build/reference/qvec-report-auto-vectorizer-reporting-level?view=msvc-170

https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html

Исходная версия fsb4000, :

Если у нас платформа 64-битная, то наиболее эффективно сравнивать куски по 64-бита, так как это будет производиться аппаратно.

Да, только у нас платформа 256 битная или 512 битная.

Обычно наиболее эффективно это когда алгоритм использует самый последний набор инструкций, который поддерживается процессором.

Есть исключения типа для AMD FX AVX не много давал, потому что процессор 128 битный, и инструкции AVX выполнялись два такта, поэтому не было прироста по сравнению с SSE.

Или с AVX-512, на Xeon Gold 6252 медленнее чем AVX-2 версия. Но это возможно код просто не оптимальный: https://github.com/microsoft/STL/pull/2104#issuecomment-917031349

Вот полезная табличка: https://db.in.tum.de/~finis/x86%20intrinsics%20cheat%20sheet%20v1.0.pdf

Просто смотрим для каких операций есть специальные инструкции.

И в выхлопе godbolt просто ищем есть ли такие инструкции.

Ещё в Visual C++ и gcc есть специальные флаги, с которыми компиляторы будут писать предупреждения если компилятор видит циклы которые потенциально могли быть распараллелены, но компилятор не смог.

/Qvec-report:2 и -fopt-info-vec-missed

https://docs.microsoft.com/en-us/cpp/build/reference/qvec-report-auto-vectorizer-reporting-level?view=msvc-170

https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html

В gcc и Visual C++