Errores, fallos, preguntas - página 2162
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Enum es una enumeración de números enteros.
Si una plantilla de función contiene
EnumToString();
los problemas ocurren...
Si la plantilla de la función contiene
EnumToString();
Los problemas surgen...
Hace falta un ejemplo.
Hice una sobrecarga, una de las cuales era un patrón...
para poder separar las moscas de las chuletas...
Hice una sobrecarga, una de las cuales era un patrón...
para poder separar las moscas de las chuletas...
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.
Conozco las moscas, he visto las chuletas, pero el problema no es visible sin el código de la función.
¿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.¿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