OpenCL
This package provides a binding for OpenCL based on the 1.0.48 revision.
This documentation does not describe meaning of API calls; it only describes their Racket calling conventions. For details on API semantics, refer to the specification at the Khronos OpenCL API Registry.
If you run "tests/test.rkt", it will print out a whole lot of stuff and run some code on all your OpenCL devices. This will show you that it is really doing something on your hardware.
Here are some caveats:
The binding should wrap some objects in finalizers (using register-finalizer) that decrement their reference count.
The binding should wrap _cl_event objects in a struct with the prop:evt property to support synchronization in a Racket style.
These functions should provide the properties in a Racket style to look like fields or using the dictionary interface (by wrapping with prop:dict.)
clCreateContext’s properties argument is hard to fathom. It is defaulted to NULL in the binding.
No functions allow callbacks. (clCreateContext and clBuildProgram should.)
clCreateProgramWithBinary doesn’t automatically extract the status of each binary.
program-info doesn’t support the 'CL_PROGRAM_BINARIES option, because its calling convention doesn’t match my macro.
clSetKernelArg is specialized for each argument type (i.e., clSetKernelArg:_cl_mem), but I definitely haven’t created a binding for each available argument type.
clGetKernelWorkGroupInfo implements 'CL_KERNEL_COMPILE_WORK_GROUP_SIZE a bit wonky.
clEnqueueNativeKernel isn’t available.