Valutazione dei core della CPU per l'ottimizzazione - pagina 6

 
Ecco alcune informazioni da una fonte sulla natura delle istruzioni

Istruzioni che l'E5-2670 non ha:
Le BMI (Bit Manipulation Instructions) sono set di istruzioni utilizzate nei processori Intel e AMD per accelerare le operazioni di manipolazione dei bit. Le BMI non sono istruzioni SIMD e funzionano solo con i registri universali dei processori.
Le operazioni di manipolazione dei bit sono più spesso utilizzate da applicazioni progettate per il controllo dei dispositivi a basso livello, il rilevamento e la correzione degli errori, l'ottimizzazione, la compressione e la crittografia. L'uso di BMI da parte dei programmi accelera significativamente queste operazioni (a volte di un fattore di parecchi); tuttavia, il codice del programma diventa più difficile da scrivere per i programmatori.
I set di istruzioni BMI nei processori Intel e AMD differiscono significativamente.
I processori Intel usano BMI1 e BMI2 (oltre a BMI1).
I processori AMD usano istruzioni ABM (Advanced Bit Manipulation) che fanno parte del pacchetto SSE4a (queste istruzioni sono usate anche da Intel ma sono implementate come parte di SSE4.2 e BMI1). Inoltre, i processori AMD usano il set di istruzioni TBM (Trailing Bit Manipulation) che è un'estensione di BMI1.

F16C è un set di istruzioni usato sui processori x86 per accelerare le conversioni tra numeri binari a mezza precisione (16 bit) e numeri binari standard in virgola mobile a singola precisione (32 bit).
F16C è usato in entrambi i processori AMD e Intel, estendendo drammaticamente le loro capacità di gestire i dati multimediali così come altri tipi di dati.
F16C (16-bit Floating-Point conversion) - è un set di istruzioni usato sui processori x86 per accelerare le conversioni tra numeri binari a mezza precisione (16 bit) e numeri binari standard in virgola mobile a singola precisione (32 bit). È essenzialmente un'estensione delle istruzioni SSE di base a 128 bit.
L'uso di diversi numeri di precisione nell'ingegneria informatica è un compromesso tra la precisione e la gamma di valori rappresentati, necessario per ottenere prestazioni ad alta velocità e una vasta gamma di compiti da eseguire.
F16C è stato usato per la prima volta nei processori AMD nel 2009, anche se è stato sviluppato molto prima ed era conosciuto come CVT16. CVT16 era originariamente previsto come parte del pacchetto SSE5 mai rilasciato, che doveva includere istruzioni XOP e BMI4.
Oggi, il set di istruzioni F16C è usato sia nei processori AMD che Intel, estendendo significativamente le loro capacità in termini di gestione dei dati multimediali, così come altri tipi di dati.

FMA
Un insieme di istruzioni del processore che accelerano le operazioni di moltiplicazione e aggiunta in virgola mobile. FMA sta per Fused Multiply-Add.
Le operazioni di moltiplicazione e aggiunta sono molto comuni e giocano un ruolo importante nella tecnologia dei computer. Soprattutto quando si tratta dell'elaborazione digitale di segnali analogici (codifica binaria video e audio e operazioni simili). Per questo motivo, il supporto per le istruzioni FMA è stato integrato non solo nelle CPU ma anche nelle GPU di molte delle schede grafiche di oggi.

Istruzioni che tutti, tranne l'i7-8700, non hanno:
TSX (Transactional Synchronization eXtensions) è un insieme di istruzioni per processori multi-core sviluppato da Intel che migliora l'efficienza dei core che comunicano tra loro quando condividono gli stessi dati e in definitiva aumenta le prestazioni complessive del computer.

MPX (Memory Protection Extensions) - Una tecnologia che fornisce una maggiore protezione contro virus e altre minacce utilizzando meccanismi di buffer overflow.
Il processore può esaminare i limiti dell'heap e del buffer dello stack prima di accedere alla memoria per assicurare che le applicazioni che accedono alla memoria accedano solo all'area di memoria loro assegnata. Questo rende molto più difficile per un hacker o un programma malware di "sostituire" il suo codice per la CPU attraverso la memoria.

SGX (Software Guard Extensions) - una serie di istruzioni sviluppate da Intel e utilizzate nei suoi processori a partire dall'architettura Skylake.
SGX permette sezioni protette di codice e dati (chiamate "enclavi") per fornire un alto livello di protezione per i programmi in esecuzione contro applicazioni dannose e attacchi di hacker.


BMI2 (complementare a BMI1).

Dato che MPX e SGX riguardano la protezione, azzarderei l'ipotesi che il compilatore usi attivamente le istruzioni/tecnologie BMI2 e che ci sia un effetto di TSX, il che è meno probabile.

 
Alexey, mi sembra che sarebbe più efficiente imparare a scrivere codice per OpenCL e comprare una buona scheda per questo.
OpenCL su una scheda sarà a priori molto più efficiente di più processori.
E dimenticate questa seccatura di confrontare i processori.
Ma sì, devi capire come scrivere codice per OpenCL.
Non posso dire quanto sia informativo - sto cercando di leggerlo per conto mio.
 
Roman:
Alexey, penso che sarebbe più efficiente imparare a scrivere codice OpenCL e ottenere una buona scheda per questo.
OpenCL su una scheda sarà a priori molto più efficiente di diversi processori.
E dimenticate questa seccatura di confrontare i processori.
Ma sì, devi capire come scrivere codice per OpenCL.
Non posso dire quanto sia informativo - sto cercando di leggerlo per conto mio.

Non è così facile scrivere in OpenCL, ho studiato un po' la teoria, è più facile fare un agente con la tecnologia OpenCL, non come adesso, più facile in termini di consumatori.

E poi, OpenCL non è sempre efficiente, così stavo confrontando su software da Yandex(CatBoost) scheda 1060 e FX-8350 processore - si è scoperto che il processore è due volte più veloce, e se tale tendenza è economicamente più redditizio per acquistare un potente processore di cinque 1080i, da cui ci sarà certamente un effetto, ma costoso ... in generale, non è chiaro e non è una soluzione per tutti.

E poi, penso che nel compilatore si possa semplicemente disabilitare il supporto per le ultime tecnologie e per i veterani tutto funzionerà più velocemente, l'opzione per disabilitare.
 
Aleksey Vyazmikin:

Non è così facile scrivere in OpenCL, ho studiato un po' la teoria, è più facile fare un agente con la tecnologia OpenCL, non come adesso, più facile in termini di consumatori.

E poi, OpenCL non è sempre efficiente, così stavo confrontando su software da Yandex (CatBoost) scheda 1060 e FX-8350 processore - si è scoperto che il processore è due volte più veloce, e se tale tendenza è economicamente più redditizio per acquistare un potente processore di cinque 1080i, da cui ci sarà certamente un effetto, ma costoso ... in generale, non è chiaro e non è una soluzione per tutti.

Per i calcoli matematici, quelli verdi non sono particolarmente adatti.
Quelli rossi sono migliori per la matematica, hanno anche una modalità matematica come standard, che può essere impostata attraverso l'app ufficiale.
Ho una vecchia Radeon 7970 di riferimento, supporta ancora il mining. Questo non vuol dire che io mini su una carta, no, non è redditizio, ma che tira i calcoli.
Per i calcoli matematici sulla scheda, devi guardare il numero di shader, più ce ne sono e meglio è, il resto degli fps, ecc. non ha importanza, soprattutto i blocchi shader.


 
Roman:

Per i calcoli matematici quelli verdi non sono particolarmente adatti.
Per la matematica, quelli rossi sono migliori. Hanno anche una modalità matematica come standard, che può essere impostata attraverso l'app ufficiale.
Ho una vecchia Radeon 7970 reference, supporta ancora il mining. Questo non vuol dire che io miniera su una carta, no non è redditizio, ma che tira i calcoli.
Per i calcoli matematici sulla scheda, devi guardare il numero di shader, più ce ne sono meglio è, il resto degli fps, ecc. non ha importanza, soprattutto i blocchi shader.


Per quanto ne so, i rossi sanno solo lavorare con il doppio e i verdi no - lo so. Ma, nell'apprendimento automatico (CatBoost) c'è un affinamento sulle operazioni di confronto, che per idea dovrebbe funzionare velocemente come nel rosso e nel verde. E i rossi non sono supportati da CatBoost, ahimè.

In ogni caso, non posso farlo da solo, e gli artisti per trovarlo non era così facile per un prezzo adeguato e comprensione.

 

Mi è stato suggerito che il codice potrebbe essere accelerato usando l'enumerazione degli switch.

Una volta era così:

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

E ora è così:

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

Secondo le prime stime, FX-8350 è il 30% più veloce, ma i processori Phenom II sono circa 3 volte più veloci! Farò dei test di confronto più tardi, quando le macchine saranno libere dall'ottimizzazione.

Vi allego la nuova versione di Tree_Brut_TestPL Expert Advisor, e ho aggiunto "_Fast" al suo nome. Per favore, testatelo anche voi, perché è molto interessante sapere su quali architetture il guadagno sarà. C'è la speranza che queste ricerche aiutino a migliorare il compilatore ME.

File:
 

Ho ricevuto ulteriori dati dal membro del forumFast528 (attualmente incapace di scrivere sul forum)

Ryzen 2700 non overcloccato, memoria 3333

Tree_Brut_TestPL 8 core 16 thread

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 core 16 thread

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'

Questo test non è completo perché abbiamo bisogno di una variante con 8 core e 8 thread a causa dell'attivazione di 8 agenti e anche 16 passaggi dovrebbero essere specificati nella scheda "Optimization" - secondo il numero di thread (Start 0, Step 1, Stop 15).

Quando esegui di nuovo il test, non dimenticare di cancellare la cache, che si trova in ..\Tester\cache

Aggiungerò i risultati intermedi alla tabella per ora come 8 core / 8 agenti.

 

Purtroppo non posso più modificare il primo post, quindi sto pubblicando la valutazione qui

 

Ecco il risultato di fx8320e frequenza 4GHz, memoria 1866 2 canali, rango 2.

Albero_Brut_TestPL_F_Veloce

4 agenti 8 passaggi

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 agenti 8 passaggi

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 agenti quasi 2x più veloce

 
Maxim Romanov:

Ecco il risultato di fx8320e frequenza 4GHz, memoria 1866 2 canali, rango 2.

Albero_Brut_TestPL_F_Veloce

4 agenti 8 passaggi

8 agenti 8 passaggi

8 agenti quasi 2 volte più veloci

Grazie, ma aggiungete i risultati di Tree_Brut_TestPL_F e Tree_Brut_TestPL per la valutazione!