Statistiques
| Révision :

root / ETSN / MyDFT_1.py @ 288

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))