Skip to content
Snippets Groups Projects
index.rst 4.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • Welcome to PyOpenCL's documentation!
    ====================================
    
    PyOpenCL gives you easy, Pythonic access to the `OpenCL
    <http://www.khronos.org/opencl/>`_ parallel computation API.
    What makes PyOpenCL special?
    
    * Object cleanup tied to lifetime of objects. This idiom,
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
      often called
    
      `RAII <http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization>`_
      in C++, makes it much easier to write correct, leak- and
    
      crash-free code.
    
    
    * Completeness. PyOpenCL puts the full power of OpenCL's API at your
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
      disposal, if you wish. Every obscure `get_info()` query and
    
      all CL calls are accessible.
    
    
    * Automatic Error Checking. All errors are automatically translated
      into Python exceptions.
    
    * Speed. PyOpenCL's base layer is written in C++, so all the niceties above
      are virtually free.
    
    * Helpful Documentation. You're looking at it. ;)
    
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    * Liberal license. PyOpenCL is open-source under the
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
      :ref:`MIT license <license>`
      and free for commercial, academic, and private use.
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    Here's an example, to give you an impression:
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    .. literalinclude:: ../examples/demo.py
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    (You can find this example as
    :download:`examples/demo.py <../examples/demo.py>` in the PyOpenCL
    
    source distribution.)
    
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    Tutorials
    =========
    
    
    * Gaston Hillar's `two-part article series
      <http://www.drdobbs.com/open-source/easy-opencl-with-python/240162614>`_
      in Dr. Dobb's Journal provides a friendly introduction to PyOpenCL.
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    * `Simon McIntosh-Smith <http://www.cs.bris.ac.uk/~simonm/>`_
      and `Tom Deakin <http://www.tomdeakin.com/>`_'s course
      `Hands-on OpenCL <http://handsonopencl.github.io/>`_ contains
      both `lecture slides <https://github.com/HandsOnOpenCL/Lecture-Slides/releases>`_
    
      and `exercises (with solutions) <https://github.com/HandsOnOpenCL/Exercises-Solutions>`_
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
      (The course covers PyOpenCL as well as OpenCL's C and C++ APIs.)
    * PyOpenCL course at `PASI <http://bu.edu/pasi>`_: Parts
      `1 <https://www.youtube.com/watch?v=X9mflbX1NL8>`_
      `2 <https://www.youtube.com/watch?v=MqvfCE_bKOg>`_
      `3 <https://www.youtube.com/watch?v=TAvKmV7CuUw>`_
      `4 <https://www.youtube.com/watch?v=SsuJ0LvZW1Q>`_
      (YouTube, 2011)
    * PyOpenCL course at `DTU GPULab <http://gpulab.imm.dtu.dk/>`_ and
      `Simula <http://simula.no/>`_ (2011):
      `Lecture 1 <http://tiker.net/pub/simula-pyopencl-lec1.pdf>`_
      `Lecture 2 <http://tiker.net/pub/simula-pyopencl-lec2.pdf>`_
      `Problem set 1 <http://tiker.net/pub/simula-pyopencl-probset1.pdf>`_
      `Problem set 2 <http://tiker.net/pub/simula-pyopencl-probset2.pdf>`_
    * Ian Johnson's `PyOpenCL tutorial <http://enja.org/2011/02/22/adventures-in-pyopencl-part-1-getting-started-with-python/>`_.
    
    
    Software that works with or enhances PyOpenCL
    =============================================
    
    
    * Jon Roose's `pyclblas <https://pyclblas.readthedocs.io/en/latest/index.html>`_
      (`code <https://github.com/jroose/pyclblas>`_)
      makes BLAS in the form of `clBLAS <https://github.com/clMathLibraries/clBLAS>`_
      available from within :mod:`pyopencl` code.
    
      Two earlier wrappers continue to be available:
    
      one by `Eric Hunsberger <https://github.com/hunse/pyopencl_blas>`_ and one
      by `Lars Ericson <http://lists.tiker.net/pipermail/pyopencl/2015-June/001890.html>`_.
    
    
    * Cedric Nugteren provides a wrapper for the `CLBlast <https://github.com/CNugteren/CLBlast>`_ OpenCL BLAS library: `PyCLBlast <https://github.com/CNugteren/CLBlast/tree/master/src/pyclblast>`_.
    
    
    * Gregor Thalhammer's `gpyfft <https://github.com/geggo/gpyfft>`_ provides a
      Python wrapper for the OpenCL FFT library clFFT from AMD.
    
    
    * Bogdan Opanchuk's `reikna <http://pypi.python.org/pypi/reikna>`_ offers a
      variety of GPU-based algorithms (FFT, random number generation, matrix
      multiplication) designed to work with :class:`pyopencl.array.Array` objects.
    
    
    * Troels Henriksen, Ken Friis Larsen, and Cosmin Oancea's `Futhark
      <http://futhark-lang.org/>`_ programming language offers a nice way to code
      nested-parallel programs with reductions and scans on data in
      :class:`pyopencl.array.Array` instances.
    
    Robbert Harms's avatar
    Robbert Harms committed
    * Robbert Harms and Alard Roebroeck's `MOT
    
      <https://github.com/cbclab/MOT>`_ offers a variety of GPU-enabled non-linear optimization algorithms 
      and MCMC sampling routines for parallel optimization and sampling of multiple problems.
    
    
    If you know of a piece of software you feel that should be on this list, please
    let me know, or, even better, send a patch!
    
    
    Contents
    ========
    
    .. toctree::
        :maxdepth: 2
    
    
        runtime_const
        runtime_platform
        runtime_queue
        runtime_memory
        runtime_program
        runtime_gl
    
        howto
    
    Andreas Klöckner's avatar
    Andreas Klöckner committed
    Note that this guide does not explain OpenCL programming and technology. Please
    
    refer to the official `Khronos OpenCL documentation <http://khronos.org/opencl>`_
    for that.
    
    
    PyOpenCL also has its own `web site <http://mathema.tician.de/software/pyopencl>`_,
    where you can find updates, new versions, documentation, and support.
    
    Indices and tables
    ==================
    
    * :ref:`genindex`
    * :ref:`modindex`
    * :ref:`search`