![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Guardate il vostro codice: E poi, nell'ultima riga, voi stessi dividete 240 per 18 (che sono unità per la vostra carta).
È evidente che sei confuso su qualcosa. Ecco il pezzo controverso:
Conclusione: globale=30 locale=1
E 240 byte è esattamente quando si crea il buffer.
È evidente che sei confuso su qualcosa. Ecco un pezzo controverso:
Uscita: globale=30 locale=1
E 240 byte esatti quando si crea il buffer.
global_work_size[0]
E local_work_size[0] = (uint) 240/18 = 13
P.S. Sì, hai capito bene. Pardon. Mi sono un po' confuso.
local_work_size[0] = (uint) 30/18 = 1. E io ho lo stesso, dato che unità=28.
Di nuovo, Roffild:
Mathemat: Давай тупо прикинем. 18 задач, выполняемых одновременно на мухах GPU, - это максимум то, что можно сделать на 4-5 нитках CPU. А CPU на x86 эмуляции может организовать гораздо больше ниток. Во всяком случае, если это Intel. Мой бывший Pentium G840 (2 ядра) дал ускорение примерно в 70 раз - на двух unit'ах! Я уже не говорю о том, что вытворяет мой текущий... условно говоря, i7.
Un compito ben parcellizzato (vedi gli script di MetaDriver dal primo thread ocl) può raggiungere speedup fino a 1000 o più su GPU (rispetto all'esecuzione a 1-thread su CPU su MQL5). Se non riesci a trovarlo - posso mandartelo, puoi testarlo sulla tua carta.
Avete capito il buffer e la sua velocità?
Faresti meglio a usare AMD CodeXL per capire le UNITA' ecc... - ha dei bei grafici di performance.
AMD CodeXL stesso è glitchato, ma è difficile trarre conclusioni senza di esso.
Non ho intenzione di usare OpenCL finché il tester non mi permette di usare la CPU o finché non ho un compito che dura più a lungo di Number of_buffers * 0.353 msec.
P.S.
Ho finalmente finito di ottimizzare il mio codice e la variante finale supera il test in 33 secondi (320 secondi - prima dell'ottimizzazione, 55 secondi - "OpenCL-style").
Non c'è niente da capire. È chiaro che è un'operazione lenta. Conclusione - aumentate il lavoro all'interno del kernel (ce n'è troppo poco nel vostro codice).
E comprate una scheda video più moderna, sembra che sia diventata migliore con essa.
AMD CodeXL stesso è glitchato, ma è difficile trarre conclusioni senza di esso.
Anche l'utilità di Intel è piuttosto utile, ma per le pietre Intel. Bene, e per catturare gli errori più ovvi nel kernel.
P.S. Ho, dopo tutto, finito di ottimizzare il mio codice e la variante finale ora passa il test in 33 secondi (320 secondi - prima dell'ottimizzazione, 55 secondi - "OpenCL-style").
È già molto meglio.
Oggi avevo bisogno di generare un array con 1 bit in numeri.
Allo stesso tempo ho fatto pratica con OpenCL.
Sto postando il codice come dimostrazione di un metodo interessante per calcolare global_work_size e local_work_size. L'idea stessa è presa da IntrotoOpenCL.pdf (ne ho una copia), ma l'ho modificata.