Тест AVX512 - страница 2

 
Renat Akhtyamov #:
если avx2, подойдет?
Да
 
amrali #:
Это пример развертывания цикла

Да, но есть ньюанс

К коротким циклам, получающимся в результате разбиения, впоследствии можно применить преобразование «развертка цикла» (loop unrolling) так, 
чтобы количество операторов в теле цикла было кратно размеру регистров векторизатора. 
После этого тело цикла векторизуется, и получившийся код исполняется на векторном процессоре.
 
Rorschach # :

Yes, but there is a nuance.

Floating points are not commutative, so I think it will not vectorize. 

Плавающие точки не коммутативны, поэтому я думаю, что векторизация невозможна.
 


Используется ли векторизация?

Да, в данном фрагменте ассемблерного кода используется векторизация. Инструкция addps применяется для параллельной обработки нескольких чисел с плавающей точкой (packed single-precision floating-point values) одновременно. 
Это является примером SIMD (Single Instruction Multiple Data) векторных инструкций, которые позволяют выполнять одинаковые операции над массивами данных одновременно, 
что повышает производительность программы за счет параллельной обработки данных.

В данном коде используется набор инструкций SIMD, доступный в процессорах с поддержкой SSE (Streaming SIMD Extensions), а именно инструкций, работающих с регистрами xmm (128-битные векторные регистры). 
Это характерно для векторизации вычислений на низком уровне, которая ускоряет выполнение программы, выполняя операцию сложения над несколькими элементами массива одновременно.
 
Sorry I was wrong, your code vectorizes well (at least on clang compiler)

The code uses legacy SSE (128-bit) SIMD vectorization (addps) to sum 4 floats at once (into 128-bit register). 
Additionally, the loop is unrolled 8 times (8 * 4 = 32 floats per iteration). 
This is confirmed by add rax, 32.

AVX vectorization:
For even more performance, AVX (256-bit) or AVX-512 (512-bit) could be used.
To enable AVX or AVX2 (if your CPU supports it), compile with:
clang -O3 -mavx2

To enable AVX-512, compile with:

clang -O3 -mavx512f

Извините, я ошибался, ваш код хорошо векторизуется (по крайней мере, на компиляторе Clang).

Код использует устаревшую векторизацию SIMD SSE (128-бит) (addps) для суммирования 4 чисел с плавающей точкой одновременно (в 128-битном регистре).
Кроме того, цикл разворачивается 8 раз (8 * 4 = 32 плавающих элемента на итерацию).
Это подтверждается добавлением rax, 32.

Векторизация AVX:
Для еще большей производительности можно использовать AVX (256-бит) или AVX-512 (512-бит).
Чтобы включить AVX или AVX2 (если ваш процессор поддерживает их), выполните компиляцию с помощью:
лязг -O3 -mavx2

Чтобы включить AVX-512, скомпилируйте с помощью:
clang -O3 -mavx512f
 
Rorschach #:

Используется ли векторизация?

Возможно привести примеры на MQL5, когда работает и не работает векторизация? Я пока не понимаю, как возможно ее включить. И когда она точно не включится.

Ваш MQL5-код безразличен к включению/выключению AVX.

 
fxsaber #:

Я пока не понимаю, как возможно ее включить.

Я тоже