OpenCL cffi bindings and helper classes


Keywords
OpenCL, clBLAS, opencl4py
License
BSD-2-Clause
Install
pip install opencl4py==1.5.1

Documentation

opencl4py

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.