Python/OpenCL: Difference between revisions
< Python
Jump to navigation
Jump to search
(→numpy) |
|||
| Line 24: | Line 24: | ||
= pyopencl = | = pyopencl = | ||
== To increase an array of float32. == | |||
<source lang="python3"> | |||
import os | |||
import numpy as np | |||
import pyopencl as cl | |||
# Apple > HD Graphics 4000 | |||
os.environ['PYOPENCL_CTX'] = '0:1' | |||
# Kernel code. | |||
CL_INC_F32 = ''' | |||
__kernel void inc_f32(__global const float *a_g, __global float *res_g) | |||
{ | |||
int gid = get_global_id(0); | |||
res_g[gid] = a_g[gid] + 1; | |||
} | |||
''' | |||
# Context and Queue | |||
ctx = cl.create_some_context() | |||
queue = cl.CommandQueue(ctx) | |||
# Memory allocation. | |||
mf = cl.mem_flags | |||
in_np = np.array([1, 2, 3, 4, 5]).astype(np.float32) | |||
in_cl = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=in_np) | |||
out_cl = cl.Buffer(ctx, mf.WRITE_ONLY, in_np.nbytes) | |||
out_np = np.empty_like(in_np) | |||
# Build OpenCL kernel code. | |||
prg = cl.Program(ctx, CL_INC_F32).build() | |||
# Run kernel. | |||
prg.inc_f32(queue, in_np.shape, None, in_cl, out_cl) | |||
# Convert results into numpy format. | |||
cl.enqueue_copy(queue, out_np, out_cl) | |||
print(in_np) | |||
print(out_np) | |||
</source> | |||
Revision as of 07:35, 6 June 2018
numpy
Data Types
import numpy as np
# Default int type is int64
a = np.array([1, 2, 3])
print(type(a[0]).__name__)
# Default float type is float64
b = np.array([1.0, 2.0, 3.0])
print(type(b[0]).__name__)
# Force int32
c = np.array([1, 2, 3]).astype(np.int32)
print(type(c[0]).__name__)
# Force float32
d = np.array([1.0, 2.0, 3.0]).astype(np.float32)
print(type(d[0]).__name__)
pyopencl
To increase an array of float32.
import os
import numpy as np
import pyopencl as cl
# Apple > HD Graphics 4000
os.environ['PYOPENCL_CTX'] = '0:1'
# Kernel code.
CL_INC_F32 = '''
__kernel void inc_f32(__global const float *a_g, __global float *res_g)
{
int gid = get_global_id(0);
res_g[gid] = a_g[gid] + 1;
}
'''
# Context and Queue
ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)
# Memory allocation.
mf = cl.mem_flags
in_np = np.array([1, 2, 3, 4, 5]).astype(np.float32)
in_cl = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=in_np)
out_cl = cl.Buffer(ctx, mf.WRITE_ONLY, in_np.nbytes)
out_np = np.empty_like(in_np)
# Build OpenCL kernel code.
prg = cl.Program(ctx, CL_INC_F32).build()
# Run kernel.
prg.inc_f32(queue, in_np.shape, None, in_cl, out_cl)
# Convert results into numpy format.
cl.enqueue_copy(queue, out_np, out_cl)
print(in_np)
print(out_np)