Statistiques
| Révision :

root / ETSN / MyDFT_1.py @ 310

Historique | Voir | Annoter | Télécharger (1,27 ko)

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