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 |