Тест AVX512

 

Требуются добровольцы с avx512

Нужно скомпилировать и запустить скрипт в 4 режимах

Поделиться результатами

Дефолтные значения оптимальные

можно SIZE выставить по максимуму (пока получится скомпилировать)

Файлы:
AVXtest.mq5  2 kb
 
Rorschach:

Требуются добровольцы с avx512

Компилировал в AVX 512. Максимальное значение при котором проходит компиляция 536870898. При этом при запуске возникают ошибки.

Максимальное значение, при котором нет ошибок при запуске 536860000.







Запустил два раза подряд.


Завтра еще попробую...

 

Компиляция X64 Regular, AVX, AVX2, AVX512

Для всех вариантов предельное значение компиляции 536870898. (При этом при запуске возникают ошибки.)

Для всех вариантов предельное значение, при котором нет ошибок при исполнении 536860000.

Запустил с максимальным SIZE, по три раза:

X64 Regular: 16/sizeof(flt)

KF      0       16:30:14.643    AVXtest (EURUSD,H1)     Vector size: 4 float
FQ      0       16:30:15.369    AVXtest (EURUSD,H1)     14227.67578125 base result
OG      0       16:30:15.445    AVXtest (EURUSD,H1)     14226.1552734375 array result
FP      0       16:30:15.743    AVXtest (EURUSD,H1)     14226.1552734375 vector result
JE      0       16:30:15.743    AVXtest (EURUSD,H1)     287 base time, ms
DO      0       16:30:15.743    AVXtest (EURUSD,H1)     76 array time, ms
DK      0       16:30:15.743    AVXtest (EURUSD,H1)     298 vector time, ms

RL      0       16:30:21.419    AVXtest (EURUSD,H1)     Vector size: 4 float
CH      0       16:30:22.150    AVXtest (EURUSD,H1)     -9492.333984375 base result
NM      0       16:30:22.226    AVXtest (EURUSD,H1)     -9492.5576171875 array result
DH      0       16:30:22.525    AVXtest (EURUSD,H1)     -9492.5576171875 vector result
HR      0       16:30:22.525    AVXtest (EURUSD,H1)     290 base time, ms
DF      0       16:30:22.525    AVXtest (EURUSD,H1)     76 array time, ms
HP      0       16:30:22.525    AVXtest (EURUSD,H1)     298 vector time, ms

GE      0       16:30:26.226    AVXtest (EURUSD,H1)     Vector size: 4 float
RP      0       16:30:26.951    AVXtest (EURUSD,H1)     6692.3427734375 base result
OF      0       16:30:27.028    AVXtest (EURUSD,H1)     6692.2900390625 array result
LQ      0       16:30:27.326    AVXtest (EURUSD,H1)     6692.2900390625 vector result
IH      0       16:30:27.326    AVXtest (EURUSD,H1)     288 base time, ms
RL      0       16:30:27.326    AVXtest (EURUSD,H1)     76 array time, ms
RN      0       16:30:27.326    AVXtest (EURUSD,H1)     298 vector time, ms



avx: 32/sizeof(flt)

EJ      0       16:31:02.467    AVXtest (EURUSD,H1)     Vector size: 8 float
MM      0       16:31:03.195    AVXtest (EURUSD,H1)     6811.158203125 base result
DJ      0       16:31:03.247    AVXtest (EURUSD,H1)     6811.61181640625 array result
GL      0       16:31:03.439    AVXtest (EURUSD,H1)     6811.61181640625 vector result
HQ      0       16:31:03.439    AVXtest (EURUSD,H1)     289 base time, ms
FS      0       16:31:03.439    AVXtest (EURUSD,H1)     52 array time, ms
RG      0       16:31:03.439    AVXtest (EURUSD,H1)     191 vector time, ms

IS      0       16:31:06.010    AVXtest (EURUSD,H1)     Vector size: 8 float
IF      0       16:31:06.739    AVXtest (EURUSD,H1)     4359.78076171875 base result
RS      0       16:31:06.791    AVXtest (EURUSD,H1)     4359.43408203125 array result
KE      0       16:31:06.983    AVXtest (EURUSD,H1)     4359.43408203125 vector result
ON      0       16:31:06.983    AVXtest (EURUSD,H1)     289 base time, ms
MJ      0       16:31:06.983    AVXtest (EURUSD,H1)     52 array time, ms
HL      0       16:31:06.983    AVXtest (EURUSD,H1)     192 vector time, ms

IH      0       16:31:09.907    AVXtest (EURUSD,H1)     Vector size: 8 float
LM      0       16:31:10.632    AVXtest (EURUSD,H1)     -5756.41552734375 base result
II      0       16:31:10.684    AVXtest (EURUSD,H1)     -5757.03515625 array result
QO      0       16:31:10.877    AVXtest (EURUSD,H1)     -5757.03515625 vector result
LG      0       16:31:10.877    AVXtest (EURUSD,H1)     287 base time, ms
PQ      0       16:31:10.877    AVXtest (EURUSD,H1)     52 array time, ms
IE      0       16:31:10.877    AVXtest (EURUSD,H1)     192 vector time, ms



avx2: 32/sizeof(flt)

HN      0       16:32:02.179    AVXtest (EURUSD,H1)     Vector size: 8 float
NK      0       16:32:02.908    AVXtest (EURUSD,H1)     2310.371826171875 base result
LN      0       16:32:02.961    AVXtest (EURUSD,H1)     2310.376953125 array result
KG      0       16:32:03.154    AVXtest (EURUSD,H1)     2310.376953125 vector result
OM      0       16:32:03.154    AVXtest (EURUSD,H1)     290 base time, ms
MG      0       16:32:03.154    AVXtest (EURUSD,H1)     52 array time, ms
HS      0       16:32:03.154    AVXtest (EURUSD,H1)     192 vector time, ms

DG      0       16:32:06.155    AVXtest (EURUSD,H1)     Vector size: 8 float
GQ      0       16:32:06.880    AVXtest (EURUSD,H1)     6267.859375 base result
IG      0       16:32:06.932    AVXtest (EURUSD,H1)     6269.2490234375 array result
JR      0       16:32:07.123    AVXtest (EURUSD,H1)     6269.2490234375 vector result
LK      0       16:32:07.123    AVXtest (EURUSD,H1)     286 base time, ms
RM      0       16:32:07.123    AVXtest (EURUSD,H1)     51 array time, ms
OH      0       16:32:07.123    AVXtest (EURUSD,H1)     191 vector time, ms

OM      0       16:32:10.900    AVXtest (EURUSD,H1)     Vector size: 8 float
HN      0       16:32:11.626    AVXtest (EURUSD,H1)     -8199.912109375 base result
CO      0       16:32:11.678    AVXtest (EURUSD,H1)     -8199.361328125 array result
QI      0       16:32:11.870    AVXtest (EURUSD,H1)     -8199.361328125 vector result
MP      0       16:32:11.870    AVXtest (EURUSD,H1)     287 base time, ms
ED      0       16:32:11.870    AVXtest (EURUSD,H1)     52 array time, ms
PF      0       16:32:11.870    AVXtest (EURUSD,H1)     192 vector time, ms



avx512: 64/sizeof(flt)

HQ      0       16:33:03.846    AVXtest (EURUSD,H1)     Vector size: 16 float
NG      0       16:33:04.573    AVXtest (EURUSD,H1)     -5511.55615234375 base result
LP      0       16:33:04.626    AVXtest (EURUSD,H1)     -5511.64404296875 array result
DQ      0       16:33:04.817    AVXtest (EURUSD,H1)     -5511.64404296875 vector result
KI      0       16:33:04.817    AVXtest (EURUSD,H1)     289 base time, ms
QL      0       16:33:04.817    AVXtest (EURUSD,H1)     52 array time, ms
FN      0       16:33:04.817    AVXtest (EURUSD,H1)     190 vector time, ms

KH      0       16:33:08.589    AVXtest (EURUSD,H1)     Vector size: 16 float
IM      0       16:33:09.319    AVXtest (EURUSD,H1)     10511.90234375 base result
FK      0       16:33:09.372    AVXtest (EURUSD,H1)     10511.546875 array result
OM      0       16:33:09.564    AVXtest (EURUSD,H1)     10511.546875 vector result
QG      0       16:33:09.564    AVXtest (EURUSD,H1)     289 base time, ms
HQ      0       16:33:09.564    AVXtest (EURUSD,H1)     53 array time, ms
GD      0       16:33:09.564    AVXtest (EURUSD,H1)     191 vector time, ms

RR      0       16:33:14.022    AVXtest (EURUSD,H1)     Vector size: 16 float
DF      0       16:33:14.746    AVXtest (EURUSD,H1)     -709.4554443359375 base result
GP      0       16:33:14.799    AVXtest (EURUSD,H1)     -709.44091796875 array result
LG      0       16:33:14.990    AVXtest (EURUSD,H1)     -709.44091796875 vector result
HO      0       16:33:14.990    AVXtest (EURUSD,H1)     287 base time, ms
HI      0       16:33:14.990    AVXtest (EURUSD,H1)     52 array time, ms
LM      0       16:33:14.990    AVXtest (EURUSD,H1)     191 vector time, ms
 

ради любопытства запустил под wine 64 в mac os 15.7

Компилится в AVX512 без проблем, но не запускается, по вполне логичным причинам, не поддерживает это чипы М

Скомпилил X64 вывод

2025.09.21 19:51:22.435 AVXtest (EURUSD,H4)     Vector size: 16 float
2025.09.21 19:51:26.212 AVXtest (EURUSD,H4)     5106.2451171875 base result
2025.09.21 19:51:26.269 AVXtest (EURUSD,H4)     5106.72265625 array result
2025.09.21 19:51:26.475 AVXtest (EURUSD,H4)     5106.72265625 vector result
2025.09.21 19:51:26.475 AVXtest (EURUSD,H4)     339 base time, ms
2025.09.21 19:51:26.475 AVXtest (EURUSD,H4)     57 array time, ms
2025.09.21 19:51:26.475 AVXtest (EURUSD,H4)     205 vector time, ms
 

Спасибо. Странные результаты. По идее, должно было получиться 4х, 8х, 16Х. Здесь же везде ~6х.

536860000 это 2Гб получается ограничение

Хотя бы разобрались как код ускорить
 
Rorschach #:

Хотя бы разобрались как код ускорить

Как?
 
fxsaber #:
Как?
flt accVec[vs] = {};
   for(int i = 0; i < SIZE; i += vs)
     {
      for(int j = 0; j < vs; j++)
         accVec[j] += arr[i + j];
     }
   flt acc = 0;
   for(int j = 0; j < vs; j++)
      acc += accVec[j];
Для avx 
vs=32/sizeof(flt)

Но лучше поэксперементировать

 
fxsaber #:
У вас тоже 6х?
 
Rorschach #:
У вас тоже 6х?
2x.
Vector size: 16 float
-489.3933410644531 base result
-489.3485107421875 array result
-489.3485107421875 vector result
440 base time, ms
223 array time, ms
376 vector time, ms

Vector size: 4 float
-8507.5224609375 base result
-8507.57421875 array result
-8507.57421875 vector result
445 base time, ms
217 array time, ms
376 vector time, ms

Не зависит от x64 или AVX (512 - нет). И почти не зависит от размера вектора.


Лучший размер такой.

Vector size: 64 float
-2280.896484375 base result
-2280.907470703125 array result
-2280.907470703125 vector result
450 base time, ms
183 array time, ms
479 vector time, ms

Спасибо за пример.

 
Rorschach:
avx512
если avx2, подойдет?
 

Это не имеет ничего общего с AVX или векторизацией.

Это пример развертывания цикла (внутреннего цикла) , этот код можно было бы лучше записать так:

   for(int i = 0; i < SIZE; i += vs)
     {
      //for(int j = 0; j < vs; j++)
      //   accVec[j] += arr[i + j];
      accVec[0] += arr[i];
      accVec[1] += arr[i + 1];
      accVec[2] += arr[i + 2];
      accVec[3] += arr[i + 3];
     }

Различная сумма в развернутом цикле возникает из-за особенности арифметики fp, называемой "распространением ошибок" ("propagation of errors"), (see https://www.wikiwand.com/en/articles/Rounding_error#Accumulation_of_roundoff_error)

Совет : чтобы получить одинаковую сумму независимо от порядка сложения, используйте алгоритм суммирования Хана (use Khan summation algo) - https://www.wikiwand.com/en/articles/Kahan_summation_algorithm 
Round-off error - Wikiwand
  • www.wikiwand.com
In computing, a roundoff error, also called rounding error, is the difference between the result produced by a given algorithm using exact arithmetic and the re...