Não tenho a certeza, porque tento não usar construções complicadas (difíceis de perceber a olho nu), mas provavelmente não o deveria fazer, pois pode acelerar o código.
O seu código deveria provavelmente ser mais lento, porque a variável b é redeclarada a cada iteração do laço.
O meu código é mais curto e mais rápido de qualquer forma. Pode verificar tanto a velocidade como a equivalência
"__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"; //;-))
Esquerda e direita são a mesma coisa, equivalência total.
Apenas com a expressão esquerda aquecerá a pedra durante bastante tempo, enquanto que com a direita será quase instantânea, o processador não notará e permanecerá frio.
P.S. I actualizou para OpenCL 1.2 (é beta). Por favor note a pequena adição após o número da versão - sse2.
Não quer dizer que tenha melhorado drasticamente, mas que tenha acelerado em alguns testes. Digamos, em Tast_Mand_ (bem, és um pervertido, Andrewha) - 5% a 10%. Só um pouco, mas bom.
O laço adiciona 0+1+2+3+...+999999999999. E após cada 10000 passos, o valor é 0.
O que é que fez? - Atribuiu um número de mosca e pronto. Então, como podem os meus resultados ser os mesmos que os seus?
Dei-lhe quase 24 horas para cair em si. Ainda insiste? :)
Vejamos:
// Это твой код (оригинал)" { \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";// есть ещё вариант, надёжнее - распечатай результаты и сравни. ;-)))
Parece que sim.
Não tenho a certeza, porque tento não usar construções complicadas (difíceis de perceber a olho nu), mas provavelmente não o deveria fazer, pois pode acelerar o código.
O seu código deveria provavelmente ser mais lento, porque a variável b é redeclarada a cada iteração do laço.
Não, bem, isso não é justo. Lida com o código de Andrei e acelera-o.
O que é que eu fiz?
O que se exige do optimista? Reduzir as despesas gerais, mantendo os resultados equivalentes! Portanto, vejam só, tudo se soma a um centavo.
:)
// A propósito!!! Este código não deixa cair o meu motorista mesmo com #define BUF_SIZE 1024*1024*4 !!!
// Isto é um avanço!
;))))
O que é que eu fiz?
O que se exige do optimista? Reduzir as despesas gerais, mantendo os resultados equivalentes! Portanto, vejam só, tudo se soma a um centavo.
:)
Como é que se verificou? :O
Como, como! na calculadora! Corri oito delas em paralelo e verifiquei.
A sua calculadora está a mentir. :)
O ciclo acrescenta 0+1+2+3+...+999999999999. E após cada 10000 passos, o valor é 0.
O que é que fez? - Atribuiu um número de mosca e pronto. Como podem os meus resultados ser os mesmos que os seus?
Tenho feito um pouco de investigação e suspeito que isto
A questão é, get_global_id() muito provavelmente não é uma função, mas uma operação de registo super-rápida.
Se alguém precisar e quiser, por favor comunique os resultados ao estúdio.O que se exige do optimista? Reduza as despesas gerais, mantendo os resultados equivalentes! Por isso, vejam só, tudo se soma a um cêntimo.
// A propósito!!! Este código não deixa cair o meu motorista mesmo com #define BUF_SIZE 1024*1024*4 !!!
Por outro lado - se o condutor não o deixar cair, a equivalência no resultado já está incompleta.
Merda... Que chatice! :(
Não, não tem fumado bem.
1^3 + 2^3 + 3^3 + ... + 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4
Esquerda e direita são a mesma coisa, equivalência total.
Apenas com a expressão esquerda aquecerá a pedra durante bastante tempo, enquanto que com a direita será quase instantânea, o processador não notará e permanecerá frio.
P.S. I actualizou para OpenCL 1.2 (é beta). Por favor note a pequena adição após o número da versão - sse2.
Não quer dizer que tenha melhorado drasticamente, mas que tenha acelerado em alguns testes. Digamos, em Tast_Mand_ (bem, és um pervertido, Andrewha) - 5% a 10%. Só um pouco, mas bom.
A sua calculadora está a mentir. :)
O laço adiciona 0+1+2+3+...+999999999999. E após cada 10000 passos, o valor é 0.
O que é que fez? - Atribuiu um número de mosca e pronto. Então, como podem os meus resultados ser os mesmos que os seus?
Dei-lhe quase 24 horas para cair em si. Ainda insiste? :)
Vejamos: