# 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...