Non sono sicuro, perché cerco di non usare costruzioni complicate (difficili da percepire a occhio), ma probabilmente dovrebbe, perché può accelerare il codice.
Il vostro codice dovrebbe probabilmente essere più lento, perché la variabile b viene ridichiarata ad ogni iterazione del ciclo.
Il mio codice è comunque più corto e veloce. Puoi controllare sia la velocità che l'equivalenza
"__kernel void MFractal( \r\n"" __global int *out \r\n"" ) \r\n"" { \r\n"" int i = get_global_id(0); \r\n"" out[i]= i; \r\n"" } \r\n"; //;-))
MetaDriver: Hai fumato più a lungo e ti sei arrabbiato. D'altra parte, dato che l'autista non lo fa cadere, l'equivalenza nel risultato è già incompleta.
Sinistra e destra sono la stessa cosa, equivalenza totale.
Solo con l'espressione di sinistra riscalderai la pietra per un tempo abbastanza lungo, mentre con quella di destra sarà quasi istantaneo, il processore non se ne accorgerà e rimarrà freddo.
P.S. Ho aggiornato a OpenCL 1.2 (è beta). Si prega di notare la piccola aggiunta dopo il numero di versione - sse2.
Non per dire che è migliorato drasticamente, ma ha accelerato in alcuni test. Diciamo, su Tast_Mand_ (beh, sei un pervertito, Andrewha) - dal 5% al 10%. Solo un po', ma buono.
Il ciclo aggiunge 0+1+2+3+...+99999999. E dopo ogni 10000 passi il valore è 0.
Che cosa hai fatto? - Hai assegnato un numero di mosca e questo è tutto. Quindi come possono i miei risultati essere uguali ai vostri?
Ti ho dato quasi 24 ore per rinsavire, insisti ancora? :)
Vediamo:
// Это твой код (оригинал)" { \r\n"" int i = get_global_id(0); \r\n"" for(int u=0;u<100000000;u++) \r\n"" { \r\n"" out[i]+=u; \r\n"" if(out[i]>10000) \r\n"" out[i]=0; \r\n"// после десятитысячного шага итерации этот оператор начнёт выполняться в каждом цикле." } \r\n"// т.е. на выходе из цикла по любому будем иметь out[i] = 0;" out[i]+= i; \r\n"// ecли к нулю прибавить номер мухи то получится... сам посчитай..... на калькуляторе... :)" } \r\n";// есть ещё вариант, надёжнее - распечатай результаты и сравни. ;-)))
Sembra che sia così.
Non sono sicuro, perché cerco di non usare costruzioni complicate (difficili da percepire a occhio), ma probabilmente dovrebbe, perché può accelerare il codice.
Il vostro codice dovrebbe probabilmente essere più lento, perché la variabile b viene ridichiarata ad ogni iterazione del ciclo.
No, beh, non è giusto. Lei gestisce il codice di Andrei e lo velocizza.
Cosa ho fatto?
Cosa è richiesto all'ottimizzatore? Ridurre le spese generali mantenendo i risultati equivalenti! Quindi controlla, tutto si aggiunge a un centesimo.
:)
// A proposito!!! Questo codice non fa cadere il mio driver anche con #define BUF_SIZE 1024*1024*4 !!!
// Questo è un passo avanti!
;))))
Cosa ho fatto?
Cosa è richiesto all'ottimizzatore? Ridurre le spese generali mantenendo i risultati equivalenti! Quindi controlla, tutto si aggiunge a un centesimo.
:)
Ti sta bene? Come hai controllato? :O
Come, come, sulla calcolatrice, ne ho fatti correre otto in parallelo e ho controllato.
La tua calcolatrice sta mentendo. :)
Il ciclo aggiunge 0+1+2+3+...+99999999. E dopo ogni 10000 passi il valore è 0.
Che cosa hai fatto? - Hai assegnato un numero di mosca e questo è tutto. Come possono i miei risultati essere uguali ai vostri?
Ho fatto un po' di ricerche e ho sospettato che questo
Il fatto è che get_global_id() molto probabilmente non è una funzione, ma un'operazione di registro super veloce.
Se qualcuno ha davvero bisogno e vuole farlo - si prega di riportare i risultati allo studio. sarà utile.Cosa è richiesto all'ottimizzatore? Ridurre le spese generali mantenendo i risultati equivalenti! Quindi controlla, tutto si aggiunge a un centesimo.
// A proposito!!! Questo codice non fa cadere il mio driver anche con #define BUF_SIZE 1024*1024*4 !!!
Ho fumato un po' di più e mi sono arrabbiato. D'altra parte - se il guidatore non lo fa cadere, l'equivalenza nel risultato è già incompleta.
Merda... Che sfortuna. :(
No, non hai fumato bene.
1^3 + 2^3 + 3^3 + ... + 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4
Sinistra e destra sono la stessa cosa, equivalenza totale.
Solo con l'espressione di sinistra riscalderai la pietra per un tempo abbastanza lungo, mentre con quella di destra sarà quasi istantaneo, il processore non se ne accorgerà e rimarrà freddo.
P.S. Ho aggiornato a OpenCL 1.2 (è beta). Si prega di notare la piccola aggiunta dopo il numero di versione - sse2.
Non per dire che è migliorato drasticamente, ma ha accelerato in alcuni test. Diciamo, su Tast_Mand_ (beh, sei un pervertito, Andrewha) - dal 5% al 10%. Solo un po', ma buono.
La tua calcolatrice sta mentendo. :)
Il ciclo aggiunge 0+1+2+3+...+99999999. E dopo ogni 10000 passi il valore è 0.
Che cosa hai fatto? - Hai assegnato un numero di mosca e questo è tutto. Quindi come possono i miei risultati essere uguali ai vostri?
Ti ho dato quasi 24 ore per rinsavire, insisti ancora? :)
Vediamo: