root / ETSN / MyDFT_1.py @ 285
Historique | Voir | Annoter | Télécharger (1,27 ko)
1 |
#!/usr/bin/env python3
|
---|---|
2 |
|
3 |
import numpy as np |
4 |
import pyopencl as cl |
5 |
|
6 |
# Naive Discrete Fourier Transform
|
7 |
def MyDFT(x,y): |
8 |
from numpy import pi,cos,sin |
9 |
size=x.shape[0]
|
10 |
X=np.zeros(size).astype(np.float32) |
11 |
Y=np.zeros(size).astype(np.float32) |
12 |
for i in range(size): |
13 |
for j in range(size): |
14 |
X[i]=X[i]+x[j]*cos(2.*pi*i*j/size)-y[j]*sin(2.*pi*i*j/size) |
15 |
Y[i]=Y[i]+x[j]*sin(2.*pi*i*j/size)+y[j]*cos(2.*pi*i*j/size) |
16 |
return(X,Y)
|
17 |
|
18 |
import sys |
19 |
import time |
20 |
|
21 |
if __name__=='__main__': |
22 |
|
23 |
# Size of input vectors definition based on stdin
|
24 |
import sys |
25 |
try:
|
26 |
SIZE=int(sys.argv[1]) |
27 |
print("Size of vectors set to %i" % SIZE)
|
28 |
except:
|
29 |
SIZE=256
|
30 |
print("Size of vectors set to default size %i" % SIZE)
|
31 |
|
32 |
a_np = np.ones(SIZE).astype(np.float32) |
33 |
b_np = np.ones(SIZE).astype(np.float32) |
34 |
|
35 |
C_np = np.zeros(SIZE).astype(np.float32) |
36 |
D_np = np.zeros(SIZE).astype(np.float32) |
37 |
C_np[0] = np.float32(SIZE)
|
38 |
D_np[0] = np.float32(SIZE)
|
39 |
|
40 |
# Native Implementation
|
41 |
TimeIn=time.time() |
42 |
c_np,d_np=MyDFT(a_np,b_np) |
43 |
NativeElapsed=time.time()-TimeIn |
44 |
NativeRate=int(SIZE/NativeElapsed)
|
45 |
print("NativeRate: %i" % NativeRate)
|
46 |
print("Precision: ",np.linalg.norm(c_np-C_np),np.linalg.norm(d_np-D_np))
|