Révision 303 ETSN/MyDFT_10.py
MyDFT_10.py (revision 303) | ||
---|---|---|
8 | 8 |
def NumpyFFT(x,y): |
9 | 9 |
xy=np.csingle(x+1.j*y) |
10 | 10 |
XY=np.fft.fft(xy) |
11 |
print(XY) |
|
12 | 11 |
return(XY.real,XY.imag) |
13 | 12 |
|
14 | 13 |
# |
... | ... | |
52 | 51 |
print("Copy from Host to Device : %.3f" % Elapsed) |
53 | 52 |
|
54 | 53 |
TimeIn=time.time() |
55 |
transform = FFT(ctx, queue, XY_gpu)
|
|
54 |
transform = FFT(ctx, queue, XY_gpu) |
|
56 | 55 |
event, = transform.enqueue() |
57 | 56 |
event.wait() |
58 | 57 |
Elapsed=time.time()-TimeIn |
... | ... | |
61 | 60 |
XY = XY_gpu.get() |
62 | 61 |
Elapsed=time.time()-TimeIn |
63 | 62 |
print("Copy from Device to Host : %.3f" % Elapsed) |
64 |
print(XY) |
|
65 | 63 |
return(XY.real,XY.imag) |
66 | 64 |
|
67 | 65 |
# Naive Discrete Fourier Transform |
... | ... | |
283 | 281 |
Device=0 |
284 | 282 |
NaiveMethod=False |
285 | 283 |
NumpyFFTMethod=True |
286 |
OpenCLFFTMethod=False
|
|
284 |
OpenCLFFTMethod=True
|
|
287 | 285 |
NumpyMethod=False |
288 | 286 |
NumbaMethod=False |
289 | 287 |
OpenCLMethod=False |
290 |
CUDAMethod=True
|
|
288 |
CUDAMethod=False
|
|
291 | 289 |
Threads=1 |
290 |
Verbose=True |
|
292 | 291 |
|
293 | 292 |
import getopt |
294 | 293 |
|
295 | 294 |
HowToUse='%s -n [Naive] -y [numpY] -a [numbA] -o [OpenCL] -c [CUDA] -s <SizeOfVector> -d <DeviceId> -t <threads>' |
296 | 295 |
|
297 | 296 |
try: |
298 |
opts, args = getopt.getopt(sys.argv[1:],"nyaochs:d:t:",["size=","device="]) |
|
297 |
opts, args = getopt.getopt(sys.argv[1:],"vnyaochs:d:t:",["size=","device="])
|
|
299 | 298 |
except getopt.GetoptError: |
300 | 299 |
print(HowToUse % sys.argv[0]) |
301 | 300 |
sys.exit(2) |
... | ... | |
361 | 360 |
print("FFT Numpy computation %s " % NumpyFFTMethod ) |
362 | 361 |
print("DFT Numba computation %s " % NumbaMethod ) |
363 | 362 |
print("DFT OpenCL computation %s " % OpenCLMethod ) |
363 |
print("FFT OpenCL computation %s " % OpenCLFFTMethod ) |
|
364 | 364 |
print("DFT CUDA computation %s " % CUDAMethod ) |
365 | 365 |
|
366 | 366 |
if CUDAMethod: |
... | ... | |
476 | 476 |
|
477 | 477 |
# OpenCL Implementation |
478 | 478 |
if OpenCLFFTMethod: |
479 |
print("Performing OpenCL implementation") |
|
479 |
print("Performing OpenCLFFT implementation")
|
|
480 | 480 |
TimeIn=time.time() |
481 | 481 |
i_np,j_np=OpenCLFFT(a_np,b_np,Device) |
482 | 482 |
OpenCLFFTElapsed=time.time()-TimeIn |
483 | 483 |
OpenCLFFTRate=int(SIZE/OpenCLFFTElapsed) |
484 |
print("OpenCLElapsed: %i" % OpenCLFFTElapsed) |
|
485 |
print("OpenCLRate: %i" % OpenCLFFTRate) |
|
484 |
print("OpenCLFFTElapsed: %i" % OpenCLFFTElapsed)
|
|
485 |
print("OpenCLFFTRate: %i" % OpenCLFFTRate)
|
|
486 | 486 |
print("Precision: ",np.linalg.norm(i_np-C_np), |
487 | 487 |
np.linalg.norm(j_np-D_np)) |
488 | 488 |
|
Formats disponibles : Unified diff