OpenCL: test di implementazione interna in MQL5 - pagina 33

 
Mathemat:

Andrew, per esempio, Intel + Radeon è una brutta cosa?

Non male, solo irragionevolmente costoso (a causa del processore). :)

A proposito, sono un fan di lunga data delle schede nVidia. Ho anche una scatola da qualche parte con la leggendaria GeForce 3. E se volessi giocare non esiterei a rimanere con il produttore di chip grafici "verdi".

 
Prendete il post in un messaggio privato qui. Non voglio portarlo qui.
 
MetaDriver:
Su una nota seria, sono ansioso di sapere che tipo di succhi sarete in grado di spremere fuori, soprattutto se avete 2 Giga DDR5. Come si è scoperto, la memoria della GPU onboard può essere una risorsa MOLTO seria per il calcolo OpenCL.

Da tutte le informazioni a mia disposizione ho concluso che la risorsa principale è il numero di core della GPU. Se non ce ne sono abbastanza, il problema si divide in corse consecutive di core con nuovi thread, ma è difficile risparmiare su questa risorsa quando si compra la scheda, poiché più core ci sono, più alto è il prezzo.

La seconda più importante è la velocità di esecuzione della memoria della GPU (dato che la memoria viene acceduta abbastanza frequentemente). I compiti della GPU nella maggior parte dei casi sono abbastanza primitivi e utilizzano 1-2-3 operazioni prima di accedere alla memoria per visualizzare i risultati. Tutte le operazioni logiche complesse sono controindicate per la GPU, quindi i programmatori si sforzano di ridurle al minimo, il che si tradurrebbe logicamente in accessi di memoria più frequenti. Qui ci sono delle varianti, se il compito è descritto dal programmatore in modo tale che gli accessi alla memoria siano i più bassi possibili, allora questa risorsa non è così importante.

E la terza risorsa, chiamerei la quantità di memoria della GPU. Poiché i crash test hanno dimostrato che, indipendentemente dal numero di contesti concorrenti, tutta la memoria distribuita nei contesti è allocata in un campo di memoria e non si sovrappone. Mi spiego con un esempio: se avete N contesti in ognuno dei quali i buffer sono allocati in 1/4 della memoria del dispositivo, allora potete avere 4 di questi contesti allo stesso tempo. Il quinto contesto, anche se lo si crea, non verrà assegnata memoria perché è già distribuita dai contesti precedenti. Ma il rilascio di memoria in uno qualsiasi dei precedenti (semplicemente rimuovendo il buffer) darà un po' di spazio e il quinto contesto funzionerà bene.

Renat:

È ancora presto - dobbiamo assicurarci che i programmi OpenCL non blocchino l'intera rete a causa di glitch della GPU e dei programmi OpenCL stessi.

Di fatto, i programmi OpenCL possono essere messi in rete solo dopo aver eseguito dei test su agenti locali per assicurarsi che il programma sia funzionale e non uccida il computer.

Il compito di una rete di calcolo parallelo distribuito. Il nome stesso può confondere un lettore inesperto. Se avete avuto problemi con l'organizzazione di una rete distribuita su macchine multicore, ora ci sarà un quadrato. Tutti i core potrebbero essere considerati come unità di rete separate perché eseguono compiti separati. Ma in precedenza la loro velocità di esecuzione differiva al massimo di 2-3 volte (per cui avete introdotto limiti di velocità per i core lenti), la quantità di memoria nella maggior parte dei casi non giocava un ruolo, poiché gli array hanno 10^7 elementi al massimo (per le macchine moderne è centesimi).

Ma con la GPU il problema cambia radicalmente. Prima di tutto solo ~12 doppi array con lunghezza 10^7 sono già 1Gb, che è un limite per molte schede. Nei calcoli della CPU i compiti con più buffer sono abbastanza comuni (anche se naturalmente il programmatore della GPU può registrare usando la memoria host, ma è simile alla RAM virtuale, in breve è un male).

In secondo luogo, la differenza di velocità di esecuzione è linearmente proporzionale al numero di core di una GPU. La differenza tra le due carte è di 10-1000 volte.

In generale, il compito del networking si riduce alla classificazione del programma da eseguire. Fate attenzione al profiler CUDA. Le sue statistiche possono essere prese come base per la classificazione dei compiti. Se il compito è progettato in modo che la maggior parte del tempo è speso per l'accesso alla memoria, richiede un cluster di macchine con grandi dimensioni di memoria, ma se la maggior parte del tempo è speso in aritmetica, abbiamo bisogno di un cluster con un gran numero di core. I cluster possono essere flessibili o includibili (è una questione di esecuzione).

Anche se il compito è semplificato un po' dall'unificazione applicata dal tempo stesso. Una scheda con 12 core ha probabilmente 256MB, una scheda con 96 ha 512MB. In media, i produttori non permettono grandi disparità (al contrario della CPU, dove l'utente può attaccare la sua vecchia roccia con RAM fino alle campane e ai fischietti, o mettere RAM minima sulla nuova roccia, solo per risparmiare denaro al momento dell'acquisto).

Anche se, a mio parere, un approccio più corretto sarebbe quello di creare un debugger per OpenCL e sulla sua base difendere l'ottimizzazione per il dispositivo in bytecode. Altrimenti si arriverebbe all'assemblatore quando il programmatore dovrebbe indovinare su quale scheda il programma verrebbe eseguito e le caratteristiche medie del programma per un possibile ambiente.

 
MetaDriver:

Mi dica, se non le dispiace, come si fa il test? Dove, cosa cambiare? Copia, selezione, risultato:

Win7 x64 build 607

 
WChas:

Questo esempio non ha bisogno di essere "eseguito" nel tester. Per eseguire lo script, trascinalo dal "Navigator" al grafico. Il risultato sarà visualizzato nel pannello " Strumenti", scheda " Esperti".

 

w7 32 bit 4GB (3.5GB disponibili)

Intel Core 2 Quad Q9505 Yorkfield (2833MHz, LGA775, L2 6144Kb, 1333MHz) vs Radeon HD 5770

 
Snaf:

w7 32 bit 4GB (3.5GB disponibili)

Intel Core 2 Quad Q9505 Yorkfield (2833MHz, LGA775, L2 6144Kb, 1333MHz) vs Radeon HD 5770

Bene, ora sai dove guardare... :)
 
MetaDriver:
Bene, ora sai dove scavare... :)

i processori sono già 2-3 generazioni indietro

e video 5770 - 6770 -7770

:)

 
Urain:

Dalle informazioni disponibili sono giunto alla conclusione che la risorsa principale è il numero di core della GPU, in caso di mancanza di essi il compito viene suddiviso in corse consecutive di core con nuovi thread, ma è difficile risparmiare su questa risorsa quando si acquista una scheda, poiché più core ci sono più alto è il prezzo.

La seconda più importante è la velocità di esecuzione della memoria della GPU (dato che la memoria viene acceduta abbastanza frequentemente). I compiti della GPU nella maggior parte dei casi sono abbastanza primitivi e utilizzano 1-2-3 operazioni prima di accedere alla memoria per visualizzare i risultati. Tutte le operazioni logiche complesse sono controindicate per la GPU, quindi i programmatori si sforzano di ridurle al minimo, il che si tradurrebbe logicamente in accessi di memoria più frequenti. Qui ci sono delle varianti, se il compito è descritto dal programmatore in modo tale che gli accessi alla memoria siano i più bassi possibili, allora questa risorsa non è così importante.

E la terza risorsa, chiamerei la quantità di memoria della GPU. Poiché i crash test hanno dimostrato che, indipendentemente dal numero di contesti concorrenti, tutta la memoria distribuita nei contesti è allocata in un campo di memoria e non si sovrappone. Mi spiego con un esempio: se avete N contesti in ognuno dei quali i buffer sono allocati in 1/4 della memoria del dispositivo, allora potete avere 4 di questi contesti allo stesso tempo. Il quinto contesto, anche se lo si crea, non verrà assegnata memoria perché è già distribuita dai contesti precedenti. Anche se liberando la memoria in alcuni dei precedenti (semplicemente rimuovendo il buffer) apparirà dello spazio e il quinto contesto funzionerà bene.

Nikolai, sono d'accordo con te sulla gerarchia individuale dei valori. Ma riguardo al cloud... il problema è nella memoria. Se le prime due risorse non sono sufficienti sulla macchina cloud, il programma client semplicemente rallenterà. Se c'è una mancanza di memoria GPU, può semplicemente andare in crash. Cioè, se il driver non riesce a distribuire il buffer, questo è metà del problema. È una disgrazia se c'è effettivamente abbastanza memoria, ma non ne rimane abbastanza per il resto dei contesti della GPU (compresi quelli di sistema). Poi l'autista semplicemente scoppia (come la pratica ha dimostrato). Forse, questo è solo un difetto nel software del driver, ma finché esiste, sarebbe meglio non lasciare i programmi OpenCL nel cloud. Gli agenti remoti possono, ma il cloud non dovrebbe.
 

dopo l'aggiornamento alla build 607 ho improvvisamente ottenuto opencltest funzionante sul mio portatilehttps://www.mql5.com/ru/code/825, non funzionava prima (circa due settimane fa), penso che dicesse "OpenCL non trovato"

"Sento odore di trucco", non ho ancora pasticciato con i frattali di Mandelbrot ))))))))))))) , ma è ancora bello che non un nuovo computer portatile può tornare utile per il test completo di MT5

OpenCL Test
OpenCL Test
  • voti: 10
  • 2012.02.07
  • MetaQuotes Software
  • www.mql5.com
Небольшой рабочий пример расчета фрактала Мандельброта в OpenCL, который кардинально ускоряет расчеты по сравнению с софтверной реализацией примерно в 100 раз.