Python cffi OpenCL bindings and helper classes.
Tested with Python 2.7, Python 3.3, Python 3.4 and PyPy on Linux, MacOSX and Windows.
To use clBLAS, libclBLAS.so (clBLAS.dll) should be present.
Not all OpenCL api is currently covered.
To install the module run:
pip install .
or just copy src/opencl4py to any place where python interpreter will be able to find it.
To run the tests, execute:
for Python 2.7:
PYTHONPATH=src nosetests -w tests
for Python 3.3, 3.4:
PYTHONPATH=src nosetests3 -w tests
for PyPy:
PYTHONPATH=src pypy -m nose -w tests
Example usage:
import opencl4py as cl
import logging
import numpy
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG)
platforms = cl.Platforms()
logging.info("OpenCL devices available:\n\n%s\n",
platforms.dump_devices())
ctx = platforms.create_some_context()
queue = ctx.create_queue(ctx.devices[0])
prg = ctx.create_program(
"""
__kernel void test(__global const float *a, __global const float *b,
__global float *c, const float k) {
size_t i = get_global_id(0);
c[i] = (a[i] + b[i]) * k;
}
""")
krn = prg.get_kernel("test")
a = numpy.arange(1000000, dtype=numpy.float32)
b = numpy.arange(1000000, dtype=numpy.float32)
c = numpy.empty(1000000, dtype=numpy.float32)
k = numpy.array([0.5], dtype=numpy.float32)
a_buf = ctx.create_buffer(cl.CL_MEM_READ_ONLY | cl.CL_MEM_COPY_HOST_PTR,
a)
b_buf = ctx.create_buffer(cl.CL_MEM_READ_ONLY | cl.CL_MEM_COPY_HOST_PTR,
b)
c_buf = ctx.create_buffer(cl.CL_MEM_WRITE_ONLY | cl.CL_MEM_ALLOC_HOST_PTR,
size=c.nbytes)
krn.set_args(a_buf, b_buf, c_buf, k[0:1])
queue.execute_kernel(krn, [a.size], None)
queue.read_buffer(c_buf, c)
max_diff = numpy.fabs(c - (a + b) * k[0]).max()
logging.info("max_diff = %.6f", max_diff)
Released under Simplified BSD License. Copyright (c) 2014, Samsung Electronics Co.,Ltd.