Hi, i want to realize a convolution through fft and i also want to compare the time required for this process between gpu and cpu. Here is the code:
len=100000;x=randi(50,1,len);y=randi(50,1,len);ticl=gpuArray([x zeros(1,len-1)]); m=gpuArray([y zeros(1,len-1)]); c_1_temp=ifft(fft(l).*fft(m)); toc c_1=gather(c_1_temp);ticl_1=[x zeros(1,len-1)]; m_1=[y zeros(1,len-1)]; c_2=ifft(fft(l_1,2*len-1).*fft(m_1,2*len-1)); toc
But strangely i've found this result:
c_1= 559,999999985352 - 4,88283691418457e-09i 1655,00000000398 - 1,39078548907368e-08i 3569,99999999371 + 7,06640683828822e-09i 5104,99999999144 + 2,13079904230657e-08i 6494,99999999661 - 1,24666866807290e-08i 7888,00000000453 - 3,32333192044652e-08i 8864,99999998867 - 4,37161194092030e-09i 8850,99999999144 - 1,35629723232990e-08i 8513,99999995740 - 1,81275757497787e-08i 8608,99999998969 + 3,02029185265248e-08i 8493,99999997188 - 1,37329756956340e-08i
and
c_2= 559,999999995117 1655,00000000488 3569,99999998047 5105 6494,99999998047 7888,00000001587 8864,99999998657 8850,99999997559 8513,99999997314 8609,00000001221 8494,00000000122
The same operation for gpu gives complex value which is approximately real.
WHY?
Best Answer