Skip to content

Samsung/opencl4py

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Python cffi OpenCL bindings and helper classes

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.9%
  • C 0.1%