113 lines
9.5 KiB
Markdown
113 lines
9.5 KiB
Markdown
# Benchmarks de test
|
|
|
|
## MaxMin
|
|
La idea aqui es ver cual es el mejor patron para implementare en max min
|
|
1. Version fast que calcula el min max inplace
|
|
2. Version que llama a las funciones nativas Min\Max
|
|
|
|
Esto surge con la dudad de..
|
|
> Sera que las funciones nativas de MQL5 como min max?¿ es mas rapido qeu hacer en mql5
|
|
> hay buenas razon para eso dado que en el motor de vecotr para el acceso de arrays no hay chekleos de rangos en cada acceso (Eso creo)
|
|
> o quizas usen SIMD o algo asi quien sabe.. debido a que las docs son opacas con esto en vector toca probar, es lento si,
|
|
> pero un costo a pagar por una lib fast
|
|
|
|
Resultado:
|
|
- El meotod fast (manual max\min) gano claramente
|
|
|
|
|
|
## Mean
|
|
Esto es como una prueba que hice dado que se con certeza con todos estos test y espreinci que no todos de los meotods de vvector\matrix
|
|
son "naive" o la forma normal sin optimizar, si no qeu mat mul y funciones blas se delegan a lib super fast como OpenBLAS etc..
|
|
Entonces aqui sea evlaua el uso de mat mul con manual\emulado con array double\mat mul nativo.. gana el nativo brutalemtne x10 a mas...
|
|
depende del tamñao pero siemprte gana...
|
|
|
|
## OpMatrixIsFastOrNot
|
|
La idea aqui es ver si el matrix::operator= es rapido ?¿ o sera naive elemnto a elemento?¿
|
|
Esto surge como duda dado qeu en MinMax en la parte de recontruir+tamaños dineite sse requiere hacer una modifacion inplace + copia de datos hay
|
|
dos propuetas aqui
|
|
|
|
1. Uso del matrix::operator= y luego modicar lo qeu se quiere
|
|
2. Resize de out y hacer 3 buclees 1 bajo 1 mid con los datos 1 alto con la parte de arriba
|
|
|
|
Reultaod:
|
|
- Depenbde de la porscion a modificar... respecto al tamaño, si fs es como el 90% a mas... entonces es mas rapido el metodo 2. de lo contraio
|
|
la velocidad de matrix::operator= compensa la copia incial... pero casi siempre es mejor el metodo 2. en geral... eso lo estuvimos probadno
|
|
|
|
```
|
|
2026.09.16 13:22:52.401 OpMatrixIsFastOrNot (EURUSD,H1) === Bench: estrategia de copia (out=X+overwrite vs loops manuales) ===
|
|
2026.09.16 13:22:52.401 OpMatrixIsFastOrNot (EURUSD,H1) size fs frac A(us) B(us) OnlyAssign A_vs_B
|
|
2026.09.16 13:22:52.408 OpMatrixIsFastOrNot (EURUSD,H1) 500 5 0.01 163 334 191 2.05
|
|
2026.09.16 13:22:52.412 OpMatrixIsFastOrNot (EURUSD,H1) 500 50 0.10 196 351 191 1.79
|
|
2026.09.16 13:22:52.417 OpMatrixIsFastOrNot (EURUSD,H1) 500 250 0.50 285 339 191 1.19
|
|
2026.09.16 13:22:52.422 OpMatrixIsFastOrNot (EURUSD,H1) 500 450 0.90 380 336 191 0.88
|
|
2026.09.16 13:22:52.427 OpMatrixIsFastOrNot (EURUSD,H1) 500 500 1.00 404 342 191 0.85
|
|
2026.09.16 13:22:52.648 OpMatrixIsFastOrNot (EURUSD,H1) 2000 20 0.01 1995 25892 1706 12.98
|
|
2026.09.16 13:22:52.865 OpMatrixIsFastOrNot (EURUSD,H1) 2000 200 0.10 3754 25962 1706 6.92
|
|
2026.09.16 13:22:53.135 OpMatrixIsFastOrNot (EURUSD,H1) 2000 1000 0.50 11629 25939 1706 2.23
|
|
2026.09.16 13:22:53.466 OpMatrixIsFastOrNot (EURUSD,H1) 2000 1800 0.90 19602 25800 1706 1.32
|
|
2026.09.16 13:22:53.803 OpMatrixIsFastOrNot (EURUSD,H1) 2000 2000 1.00 21211 25698 1706 1.21
|
|
2026.09.16 13:22:55.419 OpMatrixIsFastOrNot (EURUSD,H1) 5000 50 0.01 14798 189198 13261 12.79
|
|
2026.09.16 13:22:56.999 OpMatrixIsFastOrNot (EURUSD,H1) 5000 500 0.10 28034 189083 13261 6.74
|
|
2026.09.16 13:22:58.988 OpMatrixIsFastOrNot (EURUSD,H1) 5000 2500 0.50 86385 188767 13261 2.19
|
|
2026.09.16 13:23:01.380 OpMatrixIsFastOrNot (EURUSD,H1) 5000 4500 0.90 145084 188297 13261 1.30
|
|
2026.09.16 13:23:03.873 OpMatrixIsFastOrNot (EURUSD,H1) 5000 5000 1.00 159696 187807 13261 1.18
|
|
2026.09.16 13:23:03.875 OpMatrixIsFastOrNot (EURUSD,H1) === Fin ===
|
|
2026.09.16 13:23:03.875 OpMatrixIsFastOrNot (EURUSD,H1) A_vs_B > 1.0 significa que B (loops manuales) fue MAS RAPIDO que A (out=X+overwrite)
|
|
2026.09.16 13:23:03.875 OpMatrixIsFastOrNot (EURUSD,H1) A_vs_B < 1.0 significa que A (out=X+overwrite) fue MAS RAPIDO que B
|
|
2026.09.16 13:23:03.875 OpMatrixIsFastOrNot (EURUSD,H1) OnlyAssign muestra el costo puro de 'out = X' sin ningun overwrite encima, para referencia
|
|
```
|
|
|
|
## Robust
|
|
|
|
La misma idea... aunque aqui es demoledor la versino fast con un solo sort y copy gana por 4x .. a la verisno que llama a Percentil.. etc por separado
|
|
nada mas que decir... solo eran dudas que tenia... dado qeu como dije a dia de hoy no hay un diccionario o algo asi ni docs que digan examtne
|
|
que funciones son naive y optimizadas.. en mql5 docs.. solo te dice com ousar ejemplos, etc.. nada de bajo nivel .. solo qeuda porbar..
|
|
|
|
## CLPattern
|
|
Aqui la idea es con opencl.. dado que noramlte se rteuiqenr pasar los datos via buffer write a la gpu entonces hay una pregunta..
|
|
apra el caso donde haya que fs (tamaño que se queire) es menor al total?¿ se plantena dos hiptoeiss
|
|
1. pasar TODA la matrix inicial (A) a la gpu con offets (eviamtos una copia extra de recorte cl lee directo), contras "posiblemte el costo de lecutra
|
|
de gpu sea cara"
|
|
2. pasar EXACTAEMTNE lo qeu se operar en GPU (B) y luego reconuitr... en un vector final uniendo piesas
|
|
|
|
Ganador claro ha sido el (A)
|
|
```
|
|
2026.09.16 13:51:59.327 CLPattern (EURUSD,H1) === Bench SUBRANGO REAL (reconstruir=true, fs != total_cols): CPU vs GPU-A vs GPU-B ===
|
|
2026.09.16 13:51:59.327 CLPattern (EURUSD,H1) size fs frac CPU(us) GPU_A(us) GPU_B(us) A_vs_CPU B_vs_CPU
|
|
2026.09.16 13:51:59.327 CLPattern (EURUSD,H1) OpenCL: GPU device 'Intel UHD Graphics 770' selected
|
|
2026.09.16 13:51:59.335 CLPattern (EURUSD,H1) 500 5 0.01 158 491 419 0.32 0.38
|
|
2026.09.16 13:51:59.341 CLPattern (EURUSD,H1) 500 25 0.05 174 484 398 0.36 0.44
|
|
2026.09.16 13:51:59.348 CLPattern (EURUSD,H1) 500 50 0.10 200 468 503 0.43 0.40
|
|
2026.09.16 13:51:59.358 CLPattern (EURUSD,H1) 500 125 0.25 260 476 613 0.55 0.42
|
|
2026.09.16 13:51:59.369 CLPattern (EURUSD,H1) 500 250 0.50 327 507 865 0.64 0.38
|
|
2026.09.16 13:51:59.382 CLPattern (EURUSD,H1) 500 375 0.75 418 547 1161 0.76 0.36
|
|
2026.09.16 13:51:59.398 CLPattern (EURUSD,H1) 500 450 0.90 476 585 1336 0.81 0.36
|
|
2026.09.16 13:51:59.449 CLPattern (EURUSD,H1) 2000 20 0.01 1932 3693 2284 0.52 0.85
|
|
2026.09.16 13:51:59.506 CLPattern (EURUSD,H1) 2000 100 0.05 2606 3761 3251 0.69 0.80
|
|
2026.09.16 13:51:59.580 CLPattern (EURUSD,H1) 2000 200 0.10 3490 4063 4649 0.86 0.75
|
|
2026.09.16 13:51:59.716 CLPattern (EURUSD,H1) 2000 500 0.25 6062 4821 12018 1.26 0.50
|
|
2026.09.16 13:51:59.983 CLPattern (EURUSD,H1) 2000 1000 0.50 10481 5426 28661 1.93 0.37
|
|
2026.09.16 13:52:00.428 CLPattern (EURUSD,H1) 2000 1500 0.75 15288 6555 45278 2.33 0.34
|
|
2026.09.16 13:52:00.891 CLPattern (EURUSD,H1) 2000 1800 0.90 17500 6480 52707 2.70 0.33
|
|
2026.09.16 13:52:01.257 CLPattern (EURUSD,H1) 5000 50 0.01 14876 24663 16680 0.60 0.89
|
|
2026.09.16 13:52:01.759 CLPattern (EURUSD,H1) 5000 250 0.05 21459 25754 26950 0.83 0.80
|
|
2026.09.16 13:52:02.469 CLPattern (EURUSD,H1) 5000 500 0.10 28331 27635 44368 1.03 0.64
|
|
2026.09.16 13:52:03.850 CLPattern (EURUSD,H1) 5000 1250 0.25 47865 28629 107600 1.67 0.44
|
|
2026.09.16 13:52:06.300 CLPattern (EURUSD,H1) 5000 2500 0.50 80148 29316 201531 2.73 0.40
|
|
2026.09.16 13:52:09.952 CLPattern (EURUSD,H1) 5000 3750 0.75 113731 38969 306398 2.92 0.37
|
|
2026.09.16 13:52:14.214 CLPattern (EURUSD,H1) 5000 4500 0.90 132840 34170 364163 3.89 0.36
|
|
2026.09.16 13:52:15.993 CLPattern (EURUSD,H1) 9600 96 0.01 60603 167866 71604 0.36 0.85
|
|
2026.09.16 13:52:18.470 CLPattern (EURUSD,H1) 9600 480 0.05 85435 170199 161903 0.50 0.53
|
|
2026.09.16 13:52:21.929 CLPattern (EURUSD,H1) 9600 960 0.10 114406 165467 221509 0.69 0.52
|
|
2026.09.16 13:52:28.449 CLPattern (EURUSD,H1) 9600 2400 0.25 201086 176190 504726 1.14 0.40
|
|
2026.09.16 13:52:48.024 CLPattern (EURUSD,H1) 9600 4800 0.50 361969 208858 1096036 1.73 0.33
|
|
2026.09.16 13:53:13.111 CLPattern (EURUSD,H1) 9600 7200 0.75 545162 219112 1411575 2.49 0.39
|
|
2026.09.16 13:54:08.574 CLPattern (EURUSD,H1) 9600 8640 0.90 2334430 265216 4784659 8.80 0.49
|
|
|
|
```
|
|
|
|
|
|
## Notas finales
|
|
Como resulta de costumbre MQL5 al no proveer docs espeicificas de sus funciones o tener a la mano un ASM o un formato de ejeucino final
|
|
no queda de otra que hacer esto.... a mano.. y probar el patron mas rapido que haya...
|
|
|