Errores, fallos, preguntas - página 2162

 
Artyom Trishkin:
Enum es una enumeración de números enteros.
0,1,2,3..., etc...

Si una plantilla de función contiene

EnumToString();

los problemas ocurren...

 
Vladimir Pastushak:

Si la plantilla de la función contiene

EnumToString();

Los problemas surgen...

Hace falta un ejemplo.
 
Artyom Trishkin:
Hace falta un ejemplo.

Hice una sobrecarga, una de las cuales era un patrón...

para poder separar las moscas de las chuletas...

 
Vladimir Pastushak:

Hice una sobrecarga, una de las cuales era un patrón...

para poder separar las moscas de las chuletas...

Conozco las moscas, he visto las chuletas, pero no puedo ver el problema sin el código de la función.
 
Renat Fatkhullin:

Optimización de las matemáticas: intento de utilizar arrays en lugar de sqrt.

Por tanto, tomar un elemento por índice de una matriz simple debería ser una operación muy rápida, ¿no?

 
Комбинатор:

por lo que tomar un elemento por índice de un simple array debería ser una operación muy rápida, ¿no?

¿Dónde ves una matriz simple?

Es una matriz dinámica de un lenguaje gestionado con todas las implicaciones de control. Y sqrt es una única instrucción nativa de la CPU.


Bienvenido al mundo de los descubrimientos asombrosos de las optimizaciones y la influencia de una masa de factores en cada caso en cada generación de CPU, cada diferencia en los tamaños de caché, multitarea, penalizaciones, etc.

Hace sólo 20 años, yo jugueteaba con código ensamblador en un procesador 486, luchando con velocidades que variaban en decenas de puntos porcentuales debido a la reordenación de las instrucciones, la alineación y el simple posicionamiento en la memoria. Parecía una locura, pero los manuales de Intel y el Vtune explicaron más tarde el panorama.

Pero hoy en día la situación con los resultados de la optimización se nos fue de las manos hace tiempo. Hay tantos procesadores diferentes con distintas memorias caché en el mercado que está garantizado que tu código se ejecute a distintas velocidades. Las cachés y la arquitectura de los procesadores tienen un gran impacto. Incluso hay que desactivar el control dinámico de la frecuencia de la CPU para eliminar decenas de puntos de diferencia en un benchmark.

Por ejemplo: los átomos con fallos de caché aparentemente en arquitectura decente o modelos U estrangulados suelen mostrar resultados varias veces inferiores incluso en casos sencillos. Más fallos en la caché y adiós.

 
Artyom Trishkin:
Conozco las moscas, he visto las chuletas, pero el problema no es visible sin el código de la función.
Si una función sobrecargada tiene una cadena, hay un problema al llamarla para un entero...
 
Renat Fatkhullin:

¿Dónde ves una matriz simple?

No es el caso adecuado para establecer la complejidad. Los arrays se usan en todas partes, en los indicadores son la parte principal de cálculo, y ahora estás admitiendo casi directamente que tu implementación de arrays es lenta.

Creo que ustedes son mucho mejores en las optimizaciones, pero desde la perspectiva de un usuario común, se ve extraño - ustedes afirman que el compilador MQL genera código comparable en velocidad con C++, y de repente resulta que las matrices en MQL no son rápidas en absoluto.
 
Комбинатор:

No es el caso adecuado para establecer la complejidad. Los arrays se usan en todas partes, en los indicadores son la parte principal de cálculo, y ahora estás admitiendo casi directamente que tu implementación de arrays es lenta.

¿Comparado con un comando directo de ensamblador?

Sí, lo es. Lo que no sabes es que los procesadores llevan mucho tiempo con tablas precalculadas de diversas funciones matemáticas incorporadas. Y los costosos comandos matemáticos de la cpu los usan para acelerar las cosas.

El lunes haremos un análisis detallado de su ejemplo y averiguaremos la causa exacta.
 
Renat Fatkhullin:

¿Comparado con un comando directo de ensamblador?

elíndice de la matriz también se reduce, en el mejor de los casos, a un solo comando directo del ensamblador, por lo que la pregunta sigue en pie

Razón de la queja: