Evaluación de los núcleos de la CPU para su optimización - página 6

 
A continuación se ofrece información de una fuente sobre la naturaleza de las instrucciones

Instrucciones que el E5-2670 no tiene:
Las BMI (Bit Manipulation Instructions) son conjuntos de instrucciones utilizados en los procesadores de Intel y AMD para acelerar las operaciones de manipulación de bits. Las IMC no son instrucciones SIMD y sólo funcionan con los registros universales de los procesadores.
Las operaciones de manipulación de bits son las más utilizadas por las aplicaciones diseñadas para el control de dispositivos de bajo nivel, la detección y corrección de errores, la optimización, la compresión y el cifrado. El uso del IMC por parte de los programas acelera significativamente estas operaciones (a veces por un factor de varios); sin embargo, el código del programa se vuelve más difícil de escribir por los programadores.
Los conjuntos de instrucciones del IMC en los procesadores de Intel y AMD difieren significativamente.
Los procesadores de Intel utilizan BMI1 y BMI2 (además de BMI1).
Los procesadores de AMD utilizan instrucciones ABM (Advanced Bit Manipulation) que forman parte del paquete SSE4a (estas instrucciones también son utilizadas por Intel, pero están implementadas como parte de SSE4.2 y BMI1). Además, los procesadores AMD utilizan el conjunto de instrucciones TBM (Trailing Bit Manipulation) que es una extensión de BMI1.

F16C es un conjunto de instrucciones utilizado en los procesadores x86 para acelerar las conversiones entre números binarios de media precisión (16 bits) y números binarios estándar de punto flotante de precisión simple (32 bits).
El F16C se utiliza tanto en los procesadores de AMD como de Intel, ampliando notablemente sus capacidades para manejar datos multimedia, así como otros tipos de datos.
F16C (conversión de punto flotante de 16 bits): es un conjunto de instrucciones que se utiliza en los procesadores x86 para acelerar las conversiones entre números binarios de media precisión (16 bits) y números binarios estándar de punto flotante de precisión simple (32 bits). Es esencialmente una extensión de las instrucciones básicas SSE de 128 bits.
El uso de números de distinta precisión en ingeniería informática es un compromiso entre la precisión y el rango de valores representados, necesario para conseguir un rendimiento de alta velocidad y una amplia gama de tareas a realizar.
El F16C se utilizó por primera vez en los procesadores de AMD en 2009, aunque se desarrolló mucho antes y se conocía como CVT16. La CVT16 se planeó originalmente como parte del paquete SSE5, que nunca se lanzó, y que iba a incluir instrucciones XOP y BMI4.
En la actualidad, el conjunto de instrucciones F16C se utiliza tanto en los procesadores de AMD como de Intel, ampliando significativamente sus capacidades en términos de manejo de datos multimedia, así como de otros tipos de datos.

FMA
Conjunto de instrucciones del procesador que aceleran las operaciones de multiplicación y suma en coma flotante. FMA es el acrónimo de Fused Multiply-Add, que significa multiplicación y suma redondeadas.
Las operaciones de multiplicación-sumación son muy comunes y desempeñan un papel importante en la tecnología informática. Especialmente cuando se trata de procesar digitalmente señales analógicas (codificación binaria de vídeo y audio y otras operaciones similares). Por ello, la compatibilidad con las instrucciones FMA se ha incorporado no sólo a las CPU, sino también a las GPU de muchas de las tarjetas gráficas actuales.

Instrucciones que no tienen todos, excepto el i7-8700:
TSX (Transactional Synchronization eXtensions) es un conjunto de instrucciones para procesadores multinúcleo desarrollado por Intel que mejora la eficiencia de los núcleos que se comunican entre sí cuando comparten los mismos datos y, en última instancia, aumenta el rendimiento general del ordenador.

MPX (Memory Protection Extensions) - Una tecnología que proporciona una mayor protección contra los virus y otras amenazas utilizando mecanismos de desbordamiento del búfer.
El procesador puede examinar los límites de los búferes del montón y de la pila antes de acceder a la memoria para asegurarse de que las aplicaciones que acceden a la memoria sólo acceden a la zona de memoria que tienen asignada. Esto hace que sea mucho más difícil para un hacker o un programa malicioso "sustituir" su código por el de la CPU a través de la memoria.

SGX (Software Guard Extensions): conjunto de instrucciones desarrollado por Intel y utilizado en sus procesadores a partir de la arquitectura Skylake.
SGX permite que secciones protegidas de código y datos (denominadas "enclaves") proporcionen un alto nivel de protección a los programas en ejecución contra aplicaciones maliciosas y ataques de hackers.


IMC2 (complementario al IMC1).

Dado que MPX y SGX tienen que ver con la protección, me atrevería a suponer que el compilador utiliza activamente instrucciones/tecnologías BMI2 y que hay un efecto de TSX, lo cual es menos probable.

 
Alexey, me parece que sería más eficiente aprender a escribir código para OpenCL y comprar una buena tarjeta para ello.
OpenCL en una tarjeta será a priori mucho más eficiente que varios procesadores.
Y olvídate del engorro de comparar procesadores.
Pero sí, tienes que averiguar cómo escribir código para OpenCL.
No puedo decir qué tan informativo es - he estado tratando de leerlo por mi cuenta.
 
Roman:
Alexey, creo que sería más eficiente aprender a escribir código OpenCL y conseguir una buena tarjeta para ello.
OpenCL en una tarjeta será a priori mucho más eficiente que varios procesadores.
Y olvídate de ese engorro de comparar procesadores.
Pero sí, tienes que averiguar cómo escribir código para OpenCL.
No puedo decir qué tan informativo es - he estado tratando de leerlo por mi cuenta.

No es tan fácil escribir en OpenCL, he estudiado un poco la teoría, es más fácil hacer un agente con tecnología OpenCL, no como ahora, más fácil en términos de consumidores.

Y entonces, OpenCL no siempre es eficiente, por lo que estaba comparando en el software de Yandex(CatBoost) tarjeta 1060 y el procesador FX-8350 - resultó que el procesador es dos veces más rápido, y si esa tendencia es económicamente más rentable para comprar un potente procesador de cinco 1080i, de la que sin duda habrá un efecto, pero caro ... en general, no está claro y no es una solución para todos.

Y luego, creo que en el compilador se puede simplemente desactivar el soporte para las últimas tecnologías y para los veteranos todo funcionará más rápido, la opción de desactivar.
 
Aleksey Vyazmikin:

No es tan fácil escribir en OpenCL, he estudiado un poco la teoría, es más fácil hacer un agente con tecnología OpenCL, no como ahora, más fácil en términos de consumidores.

Y entonces, OpenCL no siempre es eficiente, por lo que estaba comparando en el software de Yandex (CatBoost) tarjeta 1060 y el procesador FX-8350 - resultó que el procesador es dos veces más rápido, y si esa tendencia es económicamente más rentable para comprar un potente procesador de cinco 1080i, de la que sin duda habrá un efecto, pero caro ... en general, no está claro y no es una solución para todos.

Para los cálculos matemáticos, los verdes no son especialmente adecuados.
Los rojos son mejores para las matemáticas, incluso tienen un modo matemático de serie, que se puede configurar a través de la app oficial.
Tengo una vieja Radeon 7970 de referencia, todavía soporta la minería. Esto no quiere decir que mine con una sola tarjeta, no es rentable, sino que tira de los cálculos.
Para los cálculos matemáticos de la tarjeta, hay que fijarse en el número de shaders, cuantos más mejor, el resto de fps, etc. no importa, lo más importante son los bloques de shader.


 
Roman:

Para los cálculos matemáticos, los verdes no son especialmente adecuados.
Para las matemáticas, son mejores las rojas, que incluso tienen un modo matemático de serie, que se puede configurar a través de la app oficial.
Tengo una vieja Radeon 7970 de referencia, todavía soporta la minería. Esto no quiere decir que mine con una sola tarjeta, no es rentable, sino que tira de los cálculos.
Para los cálculos matemáticos de la tarjeta, hay que fijarse en el número de shaders, cuantos más mejor, el resto de fps, etc. no importa, lo más importante son los bloques de shader.


Que yo sepa, los rojos sólo saben trabajar con el doble y los verdes no, eso lo sé. Pero, en el aprendizaje de la máquina (CatBoost) hay un afilado para las operaciones de comparación, que debería funcionar tan rápido como en el rojo y el verde. Y los rojos no son compatibles con CatBoost, por desgracia.

En cualquier caso, no puedo hacerlo yo mismo, y los artistas a encontrar no era tan fácil para un precio adecuado y la comprensión.

 

Se me sugirió que el código podría acelerarse utilizando la enumeración de interruptores.

Antes era así:

         if(Type_Poisk_Tree==Tree_Buy_Filter || Type_Poisk_Tree==Tree_Sell_Filter || Type_Poisk_Tree==Tree_Buy || Type_Poisk_Tree==Tree_Sell)
           {
            if(Test_P>=1000 && Test_P<5000)
              {
               if(Test_P<2500)
                 {
                  if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)
                //Ещё 70к сравнений
                }

Y ahora es así:

         if(Type_Poisk_Tree==Tree_Buy_Filter || Type_Poisk_Tree==Tree_Sell_Filter || Type_Poisk_Tree==Tree_Buy || Type_Poisk_Tree==Tree_Sell)
           {
                  switch(Test_P)
                    {
                     case 1000: if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; break; //(0.4810127 0.3037975 0.2151899)
                     case 1001: if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; break; //(0.4400657 0.4072250 0.1527094)
                     case 1002: if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; break; //(0.3739837 0.5121951 0.1138211)
                     case 1003: if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; break; //(0.3390706 0.4647160 0.1962134)
                     //ещё 70к сравнений
                   }

Según las primeras estimaciones, el FX-8350 es un 30% más rápido, pero los procesadores Phenom II son unas 3 veces más rápidos. Haré pruebas de comparación más adelante, cuando las máquinas estén libres de optimización.

Adjunto la nueva versión de Tree_Brut_TestPL Expert Advisor, y he añadido "_Fast" a su nombre. Por favor, pruébenla también, ya que es muy interesante saber en qué arquitecturas se gana. Existe la esperanza de que estas investigaciones ayuden a mejorar el compilador ME.

Archivos adjuntos:
 

He recibido datos adicionales del miembro del foroFast528 (actualmente no puede publicar en el foro)

Ryzen 2700 sin overclock, memoria 3333

Tree_Brut_TestPL 8 núcleos 16 hilos

2019.08.13 10:24:14.813 Tester optimization finished, total passes 11
2019.08.13 10:24:14.824 Statistics optimization done in 1 minutes 56 seconds
2019.08.13 10:24:14.824 Statistics shortest pass 0:01:13.337, longest pass 0:01:20.403, average pass 0:01:15.853
2019.08.13 10:24:14.824 Statistics 8731 frames (3.43 Mb total, 412 bytes per frame) received
2019.08.13 10:24:14.824 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2019.08.13 10:24:14.864 Tester 11 new records saved to cache file 'tester\cache\Tree_Brut_TestPL.30.E415F787BBBCE67C438526613B41CB4F.opt'

Tree_Brut_TestPL_F8 núcleos 16 hilos

2019.08.13 10:24:14.824 Statistics 8731 frames (3.43 Mb total, 412 bytes per frame) received
2019.08.13 10:31:30.562 Tester optimization finished, total passes 11
2019.08.13 10:31:30.573 Statistics optimization done in 2 minutes 32 seconds
2019.08.13 10:31:30.573 Statistics shortest pass 0:02:12.689, longest pass 0:02:31.529, average pass 0:02:21.243
2019.08.13 10:31:30.573 Statistics 11000 frames (4.32 Mb total, 412 bytes per frame) received
2019.08.13 10:31:30.573 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2019.08.13 10:31:30.626 Tester 11 new records saved to cache file 'tester\cache\Tree_Brut_TestPL_F.30.E415F787BBBCE67C438526613B41CB4F.opt'

Esta prueba no está completa ya que necesitamos una variante con 8 núcleos y 8 hilos debido a la activación de 8 agentes y además se deben especificar 16 pases en la pestaña "Optimización" - según el número de hilos (Inicio 0, Paso 1, Parada 15).

Cuando vuelva a ejecutar la prueba, no olvide borrar la caché, que se encuentra en ..\NTester\Ncache

Añadiré los resultados intermedios a la tabla por ahora como 8 núcleos / 8 agentes.

 

Desgraciadamente ya no puedo editar el primer post, así que pongo la calificación aquí

 

Aquí está el resultado de fx8320e frecuencia 4GHz, memoria 1866 2 canales, rango 2.

Árbol_Rut_TestPL_F_Frápido

4 agentes 8 pases

DF      0       13:27:26.728    Core 4  pass 6 returned result 1001000.00 in 0:00:28.342
HL      0       13:27:26.732    Core 1  pass 2 returned result 1001000.00 in 0:00:28.414
PE      0       13:27:26.844    Core 3  pass 4 returned result 1001000.00 in 0:00:28.476
PJ      0       13:27:26.936    Core 2  pass 0 returned result 1001000.00 in 0:00:28.619
QP      0       13:27:53.132    Core 4  pass 7 returned result 1001000.00 in 0:00:26.406
KI      0       13:27:53.219    Core 1  pass 3 returned result 1001000.00 in 0:00:26.489
MN      0       13:27:53.337    Core 3  pass 5 returned result 1001000.00 in 0:00:26.495
ND      0       13:27:53.571    Core 2  pass 1 returned result 1001000.00 in 0:00:26.637
OR      0       13:27:53.571    Tester  optimization finished, total passes 8
OF      0       13:27:53.582    Statistics      optimization done in 0 minutes 57 seconds
PI      0       13:27:53.582    Statistics      shortest pass 0:00:26.406, longest pass 0:00:28.619, average pass 0:00:27.484
NM      0       13:27:53.582    Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
HL      0       13:27:53.582    Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

8 agentes 8 pases

DI      0       13:30:59.789    Core 2  pass 1 returned result 1001000.00 in 0:00:33.072
KN      0       13:30:59.887    Core 1  pass 0 returned result 1001000.00 in 0:00:33.177
PD      0       13:31:00.132    Core 3  pass 2 returned result 1001000.00 in 0:00:33.422
PM      0       13:31:00.245    Core 4  pass 3 returned result 1001000.00 in 0:00:33.531
RR      0       13:31:00.590    Core 8  pass 7 returned result 1001000.00 in 0:00:32.922
IH      0       13:31:00.615    Core 5  pass 4 returned result 1001000.00 in 0:00:33.197
CQ      0       13:31:00.981    Core 6  pass 5 returned result 1001000.00 in 0:00:33.506
GF      0       13:31:01.111    Core 7  pass 6 returned result 1001000.00 in 0:00:33.614
CS      0       13:31:01.111    Tester  optimization finished, total passes 8
KG      0       13:31:01.122    Statistics      optimization done in 0 minutes 35 seconds
RN      0       13:31:01.122    Statistics      shortest pass 0:00:32.922, longest pass 0:00:33.614, average pass 0:00:33.305
NO      0       13:31:01.122    Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
HJ      0       13:31:01.122    Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

8 agentes casi 2 veces más rápidos

 
Maxim Romanov:

Aquí está el resultado de fx8320e frecuencia 4GHz, memoria 1866 2 canales, rango 2.

Árbol_Rut_TestPL_F_Frápido

4 agentes 8 pases

8 agentes 8 pases

8 agentes casi 2 veces más rápidos

Gracias, pero añade los resultados de Tree_Brut_TestPL_F y Tree_Brut_TestPL para su evaluación.