Évaluation des cœurs de processeur pour l'optimisation - page 6

 
Voici quelques informations provenant d'une source sur la nature des instructions

Instructions dont l'E5-2670 ne dispose pas:
Les BMI (Bit Manipulation Instructions) sont des jeux d'instructions utilisés dans les processeurs Intel et AMD pour accélérer les opérations de manipulation des bits. Les BMI ne sont pas des instructions SIMD et ne fonctionnent qu'avec les registres universels des processeurs.
Les opérations de manipulation de bits sont le plus souvent utilisées par des applications conçues pour le contrôle de dispositifs de bas niveau, la détection et la correction d'erreurs, l'optimisation, la compression et le cryptage. L'utilisation de l'IMC par les programmes accélère considérablement ces opérations (parfois par un facteur de plusieurs) ; cependant, le code du programme devient plus difficile à écrire par les programmeurs.
Les jeux d'instructions BMI des processeurs Intel et AMD diffèrent considérablement.
Les processeurs Intel utilisent BMI1 et BMI2 (en plus de BMI1).
Les processeurs AMD utilisent les instructions ABM (Advanced Bit Manipulation) qui font partie du paquet SSE4a (ces instructions sont également utilisées par Intel mais sont implémentées dans le cadre de SSE4.2 et BMI1). En outre, les processeurs AMD utilisent le jeu d'instructions TBM (Trailing Bit Manipulation) qui est une extension de BMI1.

F16C est un jeu d'instructions utilisé sur les processeurs x86 pour accélérer les conversions entre les nombres binaires en demi-précision (16 bits) et les nombres binaires standard en virgule flottante en simple précision (32 bits).
Le F16C est utilisé dans les processeurs AMD et Intel, ce qui étend considérablement leurs capacités à traiter des données multimédia ainsi que d'autres types de données.
F16C (16-bit Floating-Point conversion) - est un jeu d'instructions utilisé sur les processeurs x86 pour accélérer les conversions entre les nombres binaires de demi-précision (16 bits) et les nombres binaires standard à virgule flottante de simple précision (32 bits). Il s'agit essentiellement d'une extension des instructions SSE 128 bits de base.
L'utilisation de nombres de différentes précisions dans l'ingénierie informatique est un compromis entre la précision et la gamme de valeurs représentées, nécessaire pour obtenir des performances à haute vitesse et un large éventail de tâches à effectuer.
Le F16C a été utilisé pour la première fois dans les processeurs AMD en 2009, bien qu'il ait été développé bien plus tôt et était connu sous le nom de CVT16. CVT16 était à l'origine prévue comme faisant partie du paquet SSE5, qui n'est jamais sorti, et qui devait inclure les instructions XOP et BMI4.
Aujourd'hui, le jeu d'instructions F16C est utilisé dans les processeurs AMD et Intel, ce qui étend considérablement leurs capacités en termes de traitement des données multimédia, ainsi que d'autres types de données.

FMA
Un ensemble d'instructions de processeur accélérant les opérations de multiplication-addition en virgule flottante. FMA est l'abréviation de Fused Multiply-Add.
Les opérations Multiply-Add sont très courantes et jouent un rôle important dans la technologie informatique. Surtout lorsqu'il s'agit du traitement numérique de signaux analogiques (codage binaire vidéo et audio et autres opérations similaires). C'est pourquoi la prise en charge des instructions FMA a été intégrée non seulement dans les processeurs mais aussi dans les GPU de nombreuses cartes graphiques actuelles.

Des instructions que tous les modèles sauf le i7-8700 n' ont pas :
TSX (Transactional Synchronization eXtensions) est un ensemble d'instructions pour processeurs multi-cœurs développé par Intel qui améliore l'efficacité des cœurs communiquant entre eux lorsqu'ils partagent les mêmes données et, au final, augmente les performances globales de l'ordinateur.

MPX (Memory Protection Extensions) - Une technologie qui offre une protection renforcée contre les virus et autres menaces utilisant des mécanismes de dépassement de la mémoire tampon.
Le processeur peut examiner les limites des tampons du tas et de la pile avant d'accéder à la mémoire afin de s'assurer que les applications accédant à la mémoire n'accèdent qu'à la zone de mémoire qui leur est allouée. Il est donc beaucoup plus difficile pour un pirate ou un programme malveillant de "substituer" son code à celui du processeur via la mémoire.

SGX (Software Guard Extensions) - un jeu d'instructions développé par Intel et utilisé dans ses processeurs à partir de l'architecture Skylake.
SGX permet de protéger des sections de code et de données (appelées "enclaves") afin d'assurer un niveau élevé de protection des programmes en cours d'exécution contre les applications malveillantes et les attaques de pirates informatiques.


BMI2 (complémentaire de BMI1).

Puisque MPX et SGX concernent la protection, je me risquerais à supposer que le compilateur utilise activement les instructions/technologies BMI2 et qu'il y a un effet de TSX, ce qui est moins probable.

 
Alexey, il me semble qu'il serait plus efficace d'apprendre à écrire du code pour OpenCL et d'acheter une bonne carte pour cela.
OpenCL sur une carte sera a priori beaucoup plus efficace que des processeurs multiples.
Et oubliez les tracas de la comparaison des processeurs.
Mais oui, vous devez découvrir comment écrire du code pour OpenCL.
Je ne peux pas vraiment dire à quel point il est instructif - j'ai essayé de le lire par moi-même.
 
Roman:
Alexey, je pense qu'il serait plus efficace d'apprendre à écrire du code OpenCL et d'obtenir une bonne carte pour cela.
OpenCL sur une carte sera a priori beaucoup plus efficace que plusieurs processeurs.
Et oubliez ces tracas de comparaison de processeurs.
Mais oui, vous devez découvrir comment écrire du code pour OpenCL.
Je ne peux pas vraiment dire à quel point il est instructif - j'ai essayé de le lire par moi-même.

Ce n'est pas si facile d'écrire en OpenCL, j'ai étudié un peu la théorie, c'est plus facile de faire un agent avec la technologie OpenCL, pas comme maintenant, plus facile en termes de consommateurs.

Et puis, OpenCL n'est pas toujours efficace, alors j'ai été comparer sur le logiciel de Yandex(CatBoost) carte 1060 et FX-8350 processeur - il s'est avéré que le processeur est deux fois plus rapide, et si cette tendance est économiquement plus rentable d'acheter un processeur puissant que cinq 1080i, dont il y aura certainement un effet, mais coûteux ... en général, ce n'est pas évident et ce n'est pas une solution pour tout le monde.

Et puis, je pense que dans le compilateur, vous pouvez simplement désactiver le support des dernières technologies et pour les anciens, tout fonctionnera plus vite, l'option de désactivation.
 
Aleksey Vyazmikin:

Ce n'est pas si facile d'écrire en OpenCL, j'ai étudié un peu la théorie, c'est plus facile de faire un agent avec la technologie OpenCL, pas comme maintenant, plus facile en termes de consommateurs.

Et puis, OpenCL n'est pas toujours efficace, alors j'ai été comparer sur le logiciel de Yandex (CatBoost) carte 1060 et FX-8350 processeur - il s'est avéré que le processeur est deux fois plus rapide, et si cette tendance est économiquement plus rentable d'acheter un processeur puissant que cinq 1080i, dont il y aura certainement un effet, mais coûteux ... en général, ce n'est pas évident et ce n'est pas une solution pour tout le monde.

Pour les calculs mathématiques, les verts ne sont pas particulièrement adaptés.
Les rouges sont meilleurs pour les maths, ils ont même un mode maths en standard, qui peut être configuré via l'application officielle.
J'ai une vieille Radeon 7970 de référence, elle supporte toujours le minage. Cela ne veut pas dire que j'exploite une seule carte, non, ce n'est pas rentable, mais cela permet de faire les calculs.
Pour les calculs mathématiques sur la carte, vous devez regarder le nombre de shaders, plus il y en a, mieux c'est, le reste des fps, etc. n'a pas d'importance, le plus important étant les blocs de shaders.


 
Roman:

Pour les calculs mathématiques, les verts ne sont pas particulièrement adaptés.
Pour les maths, les rouges sont meilleurs. Ils ont même un mode maths en standard, qui peut être configuré via l'application officielle.
J'ai une vieille Radeon 7970 de référence, elle supporte toujours le minage. Cela ne veut pas dire que je mine sur une seule carte, non ce n'est pas rentable, mais que cela tire les calculs.
Pour les calculs mathématiques sur la carte, vous devez regarder le nombre de shaders, plus il y en a, mieux c'est, le reste des fps, etc. n'a pas d'importance, le plus important étant les blocs de shaders.


Pour autant que je sache, les rouges savent travailler en double et les verts non - je le sais. Mais, dans l'apprentissage automatique (CatBoost), il y a un renforcement des opérations de comparaison, qui par idée devraient fonctionner aussi vite que dans le rouge et le vert. Et les rouges ne sont pas supportés par CatBoost, hélas.

De toute façon, je ne peux pas le faire moi-même, et les artistes pour le trouver n'étaient pas si faciles pour un prix adéquat et la compréhension.

 

Il m'a été suggéré que le code pourrait être accéléré en utilisant l'énumération des commutateurs.

C'était comme ça avant :

         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к сравнений
                }

Et maintenant c'est comme ça :

         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к сравнений
                   }

Selon les premières estimations, le FX-8350 est 30 % plus rapide, mais les processeurs Phenom II sont environ 3 fois plus rapides ! Je ferai des tests de comparaison plus tard, lorsque les machines seront libérées de l'optimisation.

Je joins la nouvelle version de Tree_Brut_TestPL Expert Advisor, et j'ai ajouté "_Fast" à son nom. Veuillez le tester aussi, car il est très intéressant de savoir sur quelles architectures le gain sera. On peut espérer que ces recherches permettront d'améliorer le compilateur ME.

Dossiers :
 

J'ai reçu des données supplémentaires du membre du forumFast528 (actuellement incapable de poster sur le forum)

Ryzen 2700 non overclocké, mémoire 3333

Tree_Brut_TestPL 8 cœurs 16 threads

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 cœurs 16 threads

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'

Ce test n'est pas complet car nous avons besoin d'une variante avec 8 cœurs et 8 threads en raison de l'activation de 8 agents et aussi 16 passes doivent être spécifiées dans l'onglet "Optimisation" - selon le nombre de threads (Start 0, Step 1, Stop 15).

Lorsque vous relancez le test, n'oubliez pas de vider le cache, qui se trouve à l'adresse suivante : ..\Tester\cache

Je vais ajouter les résultats intermédiaires au tableau pour l'instant sous la forme 8 cœurs / 8 agents.

 

Malheureusement, je ne peux plus éditer le premier message, alors je publie le classement ici.

 

Voici le résultat de fx8320e fréquence 4GHz, mémoire 1866 2 canaux, rang 2.

Arbre_Brut_TestPL_F_Fast

4 agents 8 passes

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 agents 8 passes

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 agents presque 2x plus rapide

 
Maxim Romanov:

Voici le résultat de fx8320e fréquence 4GHz, mémoire 1866 2 canaux, rang 2.

Arbre_Brut_TestPL_F_Fast

4 agents 8 passes

8 agents 8 passes

8 agents presque 2x plus rapide

Merci, mais ajoutez les résultats de Tree_Brut_TestPL_F et Tree_Brut_TestPL pour l'évaluation !