OpenCL: test di implementazione interna in MQL5 - pagina 65

 
fyords: Nei rapporti cliccate con il tasto destro del mouse su "Visualizza", in una nuova finestra cliccate su "Query" e il registro viene cronometrato correttamente, ed è più facile da leggere (per me).

Grazie, non avevo capito che stavi aprendo un rapporto.

Il guadagno è stato ancora maggiore.

Sono stupito: questa è una scheda economica per meno di 80 dollari! Quindi, NVidia ha fatto un lavoro serio sul driver.

 

Ed ecco i nuovi risultati:

2012.06.01 09:25:23     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     ========================================
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     CPU time = 421203 ms
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Result on Cpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:25     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     -------------------------
2012.06.01 09:32:28     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Device number = 0
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     GPU time = 11263 ms
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     CpuTime/GpuTime = 37.39705229512563
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Result on Gpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     ------------
2012.06.01 09:32:39     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Device number = 1
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     GPU time = 998 ms
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     CpuTime/GpuTime = 422.0470941883768
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     Result on Gpu МахResult==1.2809 at 9448 pass
2012.06.01 09:32:40     ParallelTester_00-01 x_new_cycle (EURUSD,D1)     ------------

Ho capito: 1. CPU pura, 2. CPU con OpenCL, 3. GPU con OpenCL ?

Ed è ancora 422.

Mathemat:

Sono stupito: è una scheda economica che costa meno di 80 dollari! Quindi NVidia ha lavorato molto duramente sul driver.

E come sono stupito, dalla sporcizia alla ricchezza. Si ha l'impressione che NVidia legga questo forum, faccia dei test simili, trovi dei bug e li risolva.

Se solo il tester scegliesse su cosa simulare, cioè senza la scrittura forzata di codice, sarebbe molto buono. Eppure, 1 secondo (o 11 secondi se il video non lo permette o non è disponibile) contro 7 minuti è potenza.

 
Per eseguire dei test entro un piccolo margine di errore, c'è un buon metodo per eseguire una serie di misurazioni e fare la media dei risultati o scartare l'estremo. Ma, naturalmente, è meglio aumentare la quantità di calcolo per stabilizzare il risultato.

I moderni sistemi operativi e i processori davvero multi-core hanno seriamente rimosso il problema della dispersione delle misurazioni tramite GetTickCount. Il mio commento originale riguardava solo l'affermazione errata "l'errore medio di GetTickCount è di almeno decine di ms".
 
Attenzione ai proprietari di processori Intel! Quando si installa il driver nVidia 301.42, i driver OpenCL per la CPU vengono installati automaticamente,

nel registro si presenta così:

[HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors]
"nvcuda.dll"=dword:00000000
"amdocl.dll"=dword:00000000
"amdocl64.dll"=dword:00000000

"IntelOpenCL64.dll"=dword:00000000

Sono circa 1,5 volte più lenti (evidenziati in rosso) del driver nativo di Intel (evidenziato in verde).

Potete rimuovere i valori di registro corrispondenti, ma salvate il ramo per sicurezza.

 

Caro Admin. Non sono stato sul vostro forum per un po', potrei aver perso questo punto.

Ci sarà un'implementazione dell'abbandono delle schede video alle esigenze del cloud?

 
ilovebtc:

Caro Admin. Non sono stato sul vostro forum per un po', potrei aver perso questo punto.

Ci sarà un'implementazione dello swapping della scheda video per le esigenze del cloud?

Quasi finito https://www.mql5.com/ru/forum/23/page15#comment_201948

19. MetaTester: Aggiunto il supporto per l'utilizzo di programmi OpenCL negli agenti di test.

I programmi OpenCL sono destinati a eseguire calcoli su schede video che supportano OpenCL 1.1 o superiore. Le moderne schede video contengono centinaia di piccoli processori specializzati che possono eseguire simultaneamente semplici operazioni matematiche su flussi di dati in entrata. Il linguaggio OpenCL si occupa dell'organizzazione di tale calcolo parallelo e offre una grande accelerazione per una certa classe di compiti.
Dopo i test, abiliteremo OpenCL in una rete distribuita.
 
fyords: La mia comprensione è: 1. CPU pura, 2. CPU con OpenCL, 3. GPU con OpenCL ?

Sì, proprio così.

Ti dispiacerebbe eseguire lo script allegato e pubblicare i risultati? È davvero interessante.

Non abbiate paura di un gran numero di cifre. Sono lì solo per controllare la correttezza dei calcoli.

Lo script passa anche attraverso tutti i dispositivi. Il compito principale è quello di moltiplicare due grandi matrici.

Le impostazioni possono essere cambiate solo all'interno del codice - la dimensione lineare delle matrici _size in questa linea:

#define _size       2000

Cambiateli solo se finite la memoria. Un segno di ciò sono le discrepanze nei numeri degli array quando vengono eseguiti su una GPU discreta: se la differenza nei numeri è più di 10^(-4), questo è un errore evidente. Ma sembra che tu abbia abbastanza memoria.

File:
 

Per esempio, ho una scheda grafica Radeon 6930 che ha 1280 stream processor. Come apparirà nell'elenco degli agenti? Come 1 dispositivo, o tutti i 1280.

Da solo è volte più veloce di 10 processori, e il bonus non è per 1 dispositivo aggiunto.

 
Mathemat:

Ti dispiacerebbe eseguire lo script allegato e mostrare i risultati? È davvero interessante.

No, non è una noia. Anch'io sono curioso di saperne di più. Non ho cambiato nulla nelle impostazioni.

2012.06.02 09:28:27     vect_v2_all_devices (EURUSD,D1) =======================================
2012.06.02 09:28:27     vect_v2_all_devices (EURUSD,D1) OCL martices mul:         ROWS1 = 2000; COLSROWS = 2000; COLS2 = 2000
2012.06.02 09:30:31     vect_v2_all_devices (EURUSD,D1) CPUTime = 124.504
2012.06.02 09:30:31     vect_v2_all_devices (EURUSD,D1) ---------------
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) read = 4000000 elements
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) Device = 0: time = 2.824 sec.
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) CPUTime / GPUTotalTime = 44.088
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1968,1939 ) = -5.27639246;    thirdCPU[ 1968,1939 ] = -5.27639246;    buf[ 1968,1939 ] = -5.27639198
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 585,810 ) = 3.74615073;    thirdCPU[ 585,810 ] = 3.74615073;    buf[ 585,810 ] = 3.74614906
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1131,1732 ) = -4.46934557;    thirdCPU[ 1131,1732 ] = -4.46934557;    buf[ 1131,1732 ] = -4.46934605
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 587,999 ) = -4.46048546;    thirdCPU[ 587,999 ] = -4.46048546;    buf[ 587,999 ] = -4.46048260
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 983,1903 ) = 3.42076445;    thirdCPU[ 983,1903 ] = 3.42076445;    buf[ 983,1903 ] = 3.42076564
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1927,313 ) = 5.62960339;    thirdCPU[ 1927,313 ] = 5.62960339;    buf[ 1927,313 ] = 5.62960196
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 355,1897 ) = 5.86679220;    thirdCPU[ 355,1897 ] = 5.86679220;    buf[ 355,1897 ] = 5.86678505
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1455,1651 ) = -3.67937088;    thirdCPU[ 1455,1651 ] = -3.67937088;    buf[ 1455,1651 ] = -3.67936754
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1207,856 ) = 1.30920172;    thirdCPU[ 1207,856 ] = 1.30920172;    buf[ 1207,856 ] = 1.30920100
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) sum( 1699,575 ) = 2.55669522;    thirdCPU[ 1699,575 ] = 2.55669522;    buf[ 1699,575 ] = 2.55669498
2012.06.02 09:30:38     vect_v2_all_devices (EURUSD,D1) ________________________
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) read = 4000000 elements
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) Device = 1: time = 1.514 sec.
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) CPUTime / GPUTotalTime = 82.235
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 407,514 ) = -3.69270682;    thirdCPU[ 407,514 ] = -3.69270682;    buf[ 407,514 ] = -3.69270515
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1421,1902 ) = -7.43944120;    thirdCPU[ 1421,1902 ] = -7.43944120;    buf[ 1421,1902 ] = -7.43943167
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1197,1072 ) = -1.49989450;    thirdCPU[ 1197,1072 ] = -1.49989450;    buf[ 1197,1072 ] = -1.49989557
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1249,1056 ) = -0.22817086;    thirdCPU[ 1249,1056 ] = -0.22817086;    buf[ 1249,1056 ] = -0.22817032
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 385,1856 ) = 3.88903213;    thirdCPU[ 385,1856 ] = 3.88903213;    buf[ 385,1856 ] = 3.88902068
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 952,488 ) = 0.37963703;    thirdCPU[ 952,488 ] = 0.37963703;    buf[ 952,488 ] = 0.37963703
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 345,1572 ) = 2.28500485;    thirdCPU[ 345,1572 ] = 2.28500485;    buf[ 345,1572 ] = 2.28500390
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1928,468 ) = -1.35805547;    thirdCPU[ 1928,468 ] = -1.35805547;    buf[ 1928,468 ] = -1.35805535
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1881,1968 ) = -3.12033391;    thirdCPU[ 1881,1968 ] = -3.12033391;    buf[ 1881,1968 ] = -3.12033129
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) sum( 1454,575 ) = 5.97233009;    thirdCPU[ 1454,575 ] = 5.97233009;    buf[ 1454,575 ] = 5.97232151
2012.06.02 09:30:42     vect_v2_all_devices (EURUSD,D1) ________________________

Non capisco nessuno dei numeri. Puoi spiegare? Beh, almeno sulle dita: è buono o no? Sono diversi tra i dispositivi, e sulle linee di 5-6 cifre dopo il punto decimale è già diverso in luoghi.

Penso di aver capito: è un test multiplo su operazioni ripetute, il tempo finale è la media per ogni dispositivo. Giusto?

 
fyords: Solo che non capisco nulla da queste cifre. Puoi spiegare? Solo sulle dita: è buono o no? Sono diversi tra i dispositivi, e sulle linee di 5-6 cifre dopo il punto decimale è già diverso in luoghi.
sum( 407,514 ) = -3.69270682;    thirdCPU[ 407,514 ] = -3.69270682;    buf[ 407,514 ] = -3.69270515

Queste sono solo cifre di controllo. Se coincidono con 0,00001, tutto è ok. Gli indici sono scelti a caso - è un controllo casuale per assicurarsi che i calcoli siano corretti. Beh, non abbiamo intenzione di stampare qui i risultati di un controllo completo di tutti i 4 milioni di elementi della matrice risultante, vero?

Penso di aver capito: è un test multiplo su operazioni ripetute, il tempo finale è la media per ogni dispositivo. Giusto?

No, questa è una singola operazione di moltiplicazione di due grandi matrici.

In termini di prestazioni: molto buone per questa scheda. Ora i miei risultati. Dispositivi (dal basso verso l'alto - ordine di inizializzazione):

2012.06.02 05:49:25     OpenCL  CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))
2012.06.02 05:49:25     OpenCL  GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 (10 units, 780 MHz, 512 Mb, version CAL 1.4.1720)
2012.06.02 05:49:25     OpenCL  CPU: Intel(R) Corporation  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 (2 units, 2800 MHz, 8040 Mb, version 1.1)

Cioè prima una CPU Intel con il motore OCL di Intel, poi il mio dinosauro HD 4870, e poi di nuovo una pietra ma con il motore di AMD. Script:

2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1477,98 ) = -5.84002066;    thirdCPU[ 1477,98 ] = -5.84002066;    buf[ 1477,98 ] = -5.84001255
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1339,1186 ) = 0.59214997;    thirdCPU[ 1339,1186 ] = 0.59214997;    buf[ 1339,1186 ] = 0.59215009
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1410,1861 ) = -0.27033439;    thirdCPU[ 1410,1861 ] = -0.27033439;    buf[ 1410,1861 ] = -0.27033412
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 1282,459 ) = -0.87189484;    thirdCPU[ 1282,459 ] = -0.87189484;    buf[ 1282,459 ] = -0.87189591
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 710,1645 ) = 4.86117268;    thirdCPU[ 710,1645 ] = 4.86117268;    buf[ 710,1645 ] = 4.86116362
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 526,938 ) = 0.94805324;    thirdCPU[ 526,938 ] = 0.94805324;    buf[ 526,938 ] = 0.94805157
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 914,489 ) = 5.58242941;    thirdCPU[ 914,489 ] = 5.58242941;    buf[ 914,489 ] = 5.58243275
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 811,257 ) = -1.11584055;    thirdCPU[ 811,257 ] = -1.11584055;    buf[ 811,257 ] = -1.11583853
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 318,498 ) = 1.62952971;    thirdCPU[ 318,498 ] = 1.62952971;    buf[ 318,498 ] = 1.62952805
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) sum( 648,1434 ) = -5.57316303;    thirdCPU[ 648,1434 ] = -5.57316303;    buf[ 648,1434 ] = -5.57315731
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 29.879
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) Device = 2: time = 3.105 sec.
2012.06.02 07:38:19     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 684,439 ) = 0.21124490;    thirdCPU[ 684,439 ] = 0.21124490;    buf[ 684,439 ] = 0.21124732
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 795,204 ) = -1.68047857;    thirdCPU[ 795,204 ] = -1.68047857;    buf[ 795,204 ] = -1.68047154
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 579,1503 ) = 2.46559286;    thirdCPU[ 579,1503 ] = 2.46559286;    buf[ 579,1503 ] = 2.46558809
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 675,1504 ) = 0.44935751;    thirdCPU[ 675,1504 ] = 0.44935751;    buf[ 675,1504 ] = 0.44935691
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1251,1415 ) = -2.85569835;    thirdCPU[ 1251,1415 ] = -2.85569835;    buf[ 1251,1415 ] = -2.85569715
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 204,1755 ) = 0.31420049;    thirdCPU[ 204,1755 ] = 0.31420049;    buf[ 204,1755 ] = 0.31420231
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1999,74 ) = -2.22978306;    thirdCPU[ 1999,74 ] = -2.22978306;    buf[ 1999,74 ] = -2.22977948
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 436,657 ) = 0.59192652;    thirdCPU[ 436,657 ] = 0.59192652;    buf[ 436,657 ] = 0.59192693
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 967,922 ) = -4.91348410;    thirdCPU[ 967,922 ] = -4.91348410;    buf[ 967,922 ] = -4.91348314
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) sum( 1489,1175 ) = -2.48868656;    thirdCPU[ 1489,1175 ] = -2.48868656;    buf[ 1489,1175 ] = -2.48868561
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 179.795
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) Device = 1: time = 0.516 sec.
2012.06.02 07:38:15     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) ________________________
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 303,1215 ) = -7.46387863;    thirdCPU[ 303,1215 ] = -7.46387863;    buf[ 303,1215 ] = -7.46388054
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1173,1406 ) = -5.64940453;    thirdCPU[ 1173,1406 ] = -5.64940453;    buf[ 1173,1406 ] = -5.64940882
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1617,1405 ) = -0.98162729;    thirdCPU[ 1617,1405 ] = -0.98162729;    buf[ 1617,1405 ] = -0.98162866
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 760,1003 ) = -0.97699410;    thirdCPU[ 760,1003 ] = -0.97699410;    buf[ 760,1003 ] = -0.97699606
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 679,793 ) = -5.41226530;    thirdCPU[ 679,793 ] = -5.41226530;    buf[ 679,793 ] = -5.41227150
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1345,1865 ) = 0.95630527;    thirdCPU[ 1345,1865 ] = 0.95630527;    buf[ 1345,1865 ] = 0.95630503
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1289,1659 ) = -3.82919979;    thirdCPU[ 1289,1659 ] = -3.82919979;    buf[ 1289,1659 ] = -3.82920074
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1216,1759 ) = 4.87398672;    thirdCPU[ 1216,1759 ] = 4.87398672;    buf[ 1216,1759 ] = 4.87398672
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1268,1060 ) = 2.78621030;    thirdCPU[ 1268,1060 ] = 2.78621030;    buf[ 1268,1060 ] = 2.78621435
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) sum( 1686,577 ) = -4.36586094;    thirdCPU[ 1686,577 ] = -4.36586094;    buf[ 1686,577 ] = -4.36585188
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 22.783
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) Device = 0: time = 4.072 sec.
2012.06.02 07:38:14     vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2012.06.02 07:38:10     vect_v2_all_devices (EURUSD,H1) ---------------
2012.06.02 07:38:10     vect_v2_all_devices (EURUSD,H1) CPUTime = 92.774
2012.06.02 07:36:37     vect_v2_all_devices (EURUSD,H1) OCL martices mul:         ROWS1 = 2000; COLSROWS = 2000; COLS2 = 2000
2012.06.02 07:36:37     vect_v2_all_devices (EURUSD,H1) =======================================
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
Motivazione: