Statistiques
| Révision :

root / Epidevomath / vector4.py @ 109

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

1 109 equemene
import numpy as np
2 109 equemene
import pyopencl as cl
3 109 equemene
import pyopencl.array as cl_array
4 109 equemene
from numpy.random import randint as nprnd
5 109 equemene
6 109 equemene
deviceID = 0
7 109 equemene
platformID = 0
8 109 equemene
workGroup=(1,1)
9 109 equemene
10 109 equemene
N = 10
11 109 equemene
MyData = np.zeros(N, dtype=cl_array.vec.float4)
12 109 equemene
13 109 equemene
dev = cl.get_platforms()[platformID].get_devices()[deviceID]
14 109 equemene
15 109 equemene
ctx = cl.Context([dev])
16 109 equemene
queue = cl.CommandQueue(ctx)
17 109 equemene
mf = cl.mem_flags
18 109 equemene
clData = cl.Buffer(ctx, mf.READ_WRITE, MyData.nbytes)
19 109 equemene
20 109 equemene
21 109 equemene
prg = cl.Program(ctx, """
22 109 equemene
#define znew  ((z=36969*(z&65535)+(z>>16))<<16)
23 109 equemene
#define wnew  ((w=18000*(w&65535)+(w>>16))&65535)
24 109 equemene
#define MWC   (znew+wnew)
25 109 equemene
#define SHR3  (jsr=(jsr=(jsr=jsr^(jsr<<17))^(jsr>>13))^(jsr<<5))
26 109 equemene
#define CONG  (jcong=69069*jcong+1234567)
27 109 equemene
#define KISS  ((MWC^CONG)+SHR3)
28 109 equemene

29 109 equemene
#define MWCfp MWC * 2.328306435454494e-10f
30 109 equemene
#define KISSfp KISS * 2.328306435454494e-10f
31 109 equemene
#define SHR3fp SHR3 * 2.328306435454494e-10f
32 109 equemene
#define CONGfp CONG * 2.328306435454494e-10f
33 109 equemene

34 109 equemene
__kernel void SplutterSpace(__global float4* clData,
35 109 equemene
                               uint seed_z,uint seed_w)
36 109 equemene
{
37 109 equemene
   int gid = get_global_id(0);
38 109 equemene
   uint z=seed_z+(uint)gid;
39 109 equemene
   uint w=seed_w-(uint)gid;
40 109 equemene

41 109 equemene
  clData[gid].xyzw = (float4) (MWCfp,MWCfp,MWCfp,0.);
42 109 equemene
}
43 109 equemene

44 109 equemene

45 109 equemene
 """).build()
46 109 equemene
47 109 equemene
#prg.Pack_Cmplx(queue, (N,1), workGroup, Data_In, np.int32(N))
48 109 equemene
49 109 equemene
prg.SplutterSpace(queue, (N,1), None, clData,
50 109 equemene
                   numpy.uint32(nprnd(2**32)),numpy.uint32(nprnd(2**32)))
51 109 equemene
cl.enqueue_copy(queue, MyData, clData)
52 109 equemene
53 109 equemene
54 109 equemene
print MyData