yuyichao / OpenCL.jl

OpenCL 1.2 Julia bindings

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OpenCL.jl

OpenCL bindings for Julia

Build Status Coverage Status

Julia interface for the OpenCL parallel computation API

This package aims to be a complete solution for OpenCL programming in Julia, similar in scope to PyOpenCL for Python. It provides a high level api for OpenCL to make programing GPU's and multicore CPU's much less onerous.

OpenCL.jl provides access to OpenCL API versions 1.0, 1.1, 1.2 and 2.0.

Support of Julia v0.4

Currently OpenCL.jl only supports Julia v0.3 due to some breaking changes in Julia v0.4. Support is comming as soon as Julia v0.4 is entering its prerelease phase.

This package is based off the work of others:

Contributors

  • Jake Bolewski (@jakebolewski)
  • Valentin Churavy (@vchuravy)
  • Simon Danisch (@SimonDanisch)

Setup

  1. Install an OpenCL driver. If you use OSX, OpenCL is already available

  2. Checkout the packages from the Julia repl

    Pkg.add("OpenCL")
  3. OpenCL will be installed in your .julia directory

  4. cd into your .julia directory to run the tests and try out the examples

  5. To update to the latest development version, from the Julia repl:

       Pkg.update()

IJulia Notebooks

Quick Example

import OpenCL
const cl = OpenCL

const sum_kernel = "
   __kernel void sum(__global const float *a,
                     __global const float *b,
                     __global float *c)
    {
      int gid = get_global_id(0);
      c[gid] = a[gid] + b[gid];
    }
"
a = rand(Float32, 50_000)
b = rand(Float32, 50_000)

device, ctx, queue = cl.create_compute_context()

a_buff = cl.Buffer(Float32, ctx, (:r, :copy), hostbuf=a)
b_buff = cl.Buffer(Float32, ctx, (:r, :copy), hostbuf=b)
c_buff = cl.Buffer(Float32, ctx, :w, length(a))

p = cl.Program(ctx, source=sum_kernel) |> cl.build!
k = cl.Kernel(p, "sum")

cl.call(queue, k, size(a), nothing, a_buff, b_buff, c_buff)

r = cl.read(queue, c_buff)

if isapprox(norm(r - (a+b)), zero(Float32))
    info("Success!")
else
    error("Norm should be 0.0f")
end

About

OpenCL 1.2 Julia bindings

License:Other


Languages

Language:Julia 75.0%Language:C 24.7%Language:Shell 0.3%