Révision 296 ETSN/MyDFT_10.py
MyDFT_10.py (revision 296) | ||
---|---|---|
6 | 6 |
|
7 | 7 |
# |
8 | 8 |
def NumpyFFT(x,y): |
9 |
xy=x+1.j*y
|
|
9 |
xy=np.csingle(x+1.j*y)
|
|
10 | 10 |
XY=np.fft.fft(xy) |
11 |
print(XY) |
|
11 | 12 |
return(XY.real,XY.imag) |
12 | 13 |
|
13 | 14 |
# |
... | ... | |
18 | 19 |
import gpyfft |
19 | 20 |
from gpyfft.fft import FFT |
20 | 21 |
|
22 |
TimeIn=time.time() |
|
21 | 23 |
Id=0 |
22 | 24 |
HasXPU=False |
23 | 25 |
for platform in cl.get_platforms(): |
... | ... | |
32 | 34 |
if HasXPU==False: |
33 | 35 |
print("No XPU #%i found in all of %i devices, sorry..." % (Device,Id-1)) |
34 | 36 |
sys.exit() |
37 |
Elapsed=time.time()-TimeIn |
|
38 |
print("Selection of device : %.3f" % Elapsed) |
|
35 | 39 |
|
40 |
TimeIn=time.time() |
|
36 | 41 |
try: |
37 | 42 |
ctx = cl.Context(devices=[XPU]) |
38 | 43 |
queue = cl.CommandQueue(ctx,properties=cl.command_queue_properties.PROFILING_ENABLE) |
39 | 44 |
except: |
40 | 45 |
print("Crash during context creation") |
46 |
Elapsed=time.time()-TimeIn |
|
47 |
print("Context initialisation : %.3f" % Elapsed) |
|
41 | 48 |
|
42 |
XY_gpu = cla.to_device(queue, x+1.j*y) |
|
49 |
TimeIn=time.time() |
|
50 |
XY_gpu = cla.to_device(queue, np.csingle(x+1.j*y)) |
|
51 |
Elapsed=time.time()-TimeIn |
|
52 |
print("Copy from Host to Device : %.3f" % Elapsed) |
|
43 | 53 |
|
44 |
transform = FFT(ctx, queue, XY_gpu)
|
|
45 |
|
|
54 |
TimeIn=time.time()
|
|
55 |
transform = FFT(ctx, queue, XY_gpu) |
|
46 | 56 |
event, = transform.enqueue() |
47 | 57 |
event.wait() |
48 |
|
|
58 |
Elapsed=time.time()-TimeIn |
|
59 |
print("Compute FFT : %.3f" % Elapsed) |
|
60 |
TimeIn=time.time() |
|
49 | 61 |
XY = XY_gpu.get() |
62 |
Elapsed=time.time()-TimeIn |
|
63 |
print("Copy from Device to Host : %.3f" % Elapsed) |
|
64 |
print(XY) |
|
50 | 65 |
return(XY.real,XY.imag) |
51 | 66 |
|
52 | 67 |
# Naive Discrete Fourier Transform |
... | ... | |
451 | 466 |
m_np,n_np=NumpyFFT(a_np,b_np) |
452 | 467 |
NumpyFFTElapsed=time.time()-TimeIn |
453 | 468 |
NumpyFFTRate=int(SIZE/NumpyFFTElapsed) |
469 |
print("NumpyFFTElapsed: %i" % NumpyFFTElapsed) |
|
454 | 470 |
print("NumpyFFTRate: %i" % NumpyFFTRate) |
455 | 471 |
print("Precision: ",np.linalg.norm(m_np-C_np), |
456 | 472 |
np.linalg.norm(n_np-D_np)) |
... | ... | |
462 | 478 |
i_np,j_np=OpenCLFFT(a_np,b_np,Device) |
463 | 479 |
OpenCLFFTElapsed=time.time()-TimeIn |
464 | 480 |
OpenCLFFTRate=int(SIZE/OpenCLFFTElapsed) |
481 |
print("OpenCLElapsed: %i" % OpenCLFFTElapsed) |
|
465 | 482 |
print("OpenCLRate: %i" % OpenCLFFTRate) |
466 | 483 |
print("Precision: ",np.linalg.norm(i_np-C_np), |
467 | 484 |
np.linalg.norm(j_np-D_np)) |
468 | 485 |
|
486 |
if OpenCLFFTMethod and NumpyFFTMethod: |
|
487 |
print("NumpyOpenCLRatio: %f" % (OpenCLFFTRate/NumpyFFTRate)) |
Formats disponibles : Unified diff