ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/OpenCL/OpenCL.pm
Revision: 1.22
Committed: Sun Nov 20 10:25:17 2011 UTC (12 years, 6 months ago) by root
Branch: MAIN
Changes since 1.21: +5 -18 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.5 OpenCL - Open Computing Language Bindings
4 root 1.1
5     =head1 SYNOPSIS
6    
7     use OpenCL;
8    
9     =head1 DESCRIPTION
10    
11 root 1.7 This is an early release which might be useful, but hasn't seen much testing.
12 root 1.1
13 root 1.9 =head2 OpenCL FROM 10000 FEET HEIGHT
14    
15     Here is a high level overview of OpenCL:
16    
17     First you need to find one or more OpenCL::Platforms (kind of like
18     vendors) - usually there is only one.
19    
20     Each platform gives you access to a number of OpenCL::Device objects, e.g.
21     your graphics card.
22    
23 root 1.11 From a platform and some device(s), you create an OpenCL::Context, which is
24 root 1.9 a very central object in OpenCL: Once you have a context you can create
25     most other objects:
26    
27 root 1.11 OpenCL::Program objects, which store source code and, after building for a
28     specific device ("compiling and linking"), also binary programs. For each
29     kernel function in a program you can then create an OpenCL::Kernel object
30     which represents basically a function call with argument values.
31 root 1.9
32 root 1.20 OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat
33 root 1.16 memory areas, think arrays or structs) and OpenCL::Image objects (think 2d
34     or 3d array) for bulk data and input and output for kernels.
35 root 1.9
36     OpenCL::Sampler objects, which are kind of like texture filter modes in
37     OpenGL.
38    
39     OpenCL::Queue objects - command queues, which allow you to submit memory
40     reads, writes and copies, as well as kernel calls to your devices. They
41     also offer a variety of methods to synchronise request execution, for
42     example with barriers or OpenCL::Event objects.
43    
44     OpenCL::Event objects are used to signal when something is complete.
45    
46     =head2 HELPFUL RESOURCES
47 root 1.3
48 root 1.5 The OpenCL spec used to develop this module (1.2 spec was available, but
49 root 1.3 no implementation was available to me :).
50    
51     http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf
52    
53     OpenCL manpages:
54    
55     http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/
56    
57 root 1.18 If you are into UML class diagrams, the following diagram might help - if
58     not, it will be mildly cobfusing:
59    
60     http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/classDiagram.html
61    
62 root 1.16 Here's a tutorial from AMD (very AMD-centric, too), not sure how useful it
63     is, but at least it's free of charge:
64    
65     http://developer.amd.com/zones/OpenCLZone/courses/Documents/Introduction_to_OpenCL_Programming%20Training_Guide%20%28201005%29.pdf
66    
67 root 1.18 And here's NVIDIA's OpenCL Best Practises Guide:
68 root 1.16
69 root 1.18 http://developer.download.nvidia.com/compute/cuda/3_2/toolkit/docs/OpenCL_Best_Practices_Guide.pdf
70 root 1.16
71 root 1.9 =head1 BASIC WORKFLOW
72    
73 root 1.11 To get something done, you basically have to do this once (refer to the
74     examples below for actual code, this is just a high-level description):
75 root 1.9
76 root 1.11 Find some platform (e.g. the first one) and some device(s) (e.g. the first
77     device of the platform), and create a context from those.
78 root 1.9
79 root 1.11 Create program objects from your OpenCL source code, then build (compile)
80     the programs for each device you want to run them on.
81 root 1.9
82 root 1.11 Create kernel objects for all kernels you want to use (surprisingly, these
83     are not device-specific).
84 root 1.9
85 root 1.11 Then, to execute stuff, you repeat these steps, possibly resuing or
86     sharing some buffers:
87 root 1.9
88 root 1.11 Create some input and output buffers from your context. Set these as
89     arguments to your kernel.
90    
91     Enqueue buffer writes to initialise your input buffers (when not
92     initialised at creation time).
93 root 1.9
94     Enqueue the kernel execution.
95    
96     Enqueue buffer reads for your output buffer to read results.
97    
98 root 1.3 =head1 EXAMPLES
99    
100 root 1.5 =head2 Enumerate all devices and get contexts for them.
101 root 1.1
102 root 1.11 Best run this once to get a feel for the platforms and devices in your
103     system.
104    
105 root 1.1 for my $platform (OpenCL::platforms) {
106 root 1.10 printf "platform: %s\n", $platform->info (OpenCL::PLATFORM_NAME);
107     printf "extensions: %s\n", $platform->info (OpenCL::PLATFORM_EXTENSIONS);
108 root 1.1 for my $device ($platform->devices) {
109 root 1.10 printf "+ device: %s\n", $device->info (OpenCL::DEVICE_NAME);
110     my $ctx = $device->context;
111 root 1.1 # do stuff
112     }
113     }
114    
115 root 1.5 =head2 Get a useful context and a command queue.
116 root 1.1
117 root 1.11 This is a useful boilerplate for any OpenCL program that only wants to use
118     one device,
119    
120     my ($platform) = OpenCL::platforms; # find first platform
121     my ($dev) = $platform->devices; # find first device of platform
122     my $ctx = $platform->context (undef, [$dev]); # create context out of those
123     my $queue = $ctx->queue ($dev); # create a command queue for the device
124 root 1.1
125 root 1.5 =head2 Print all supported image formats of a context.
126    
127 root 1.11 Best run this once for your context, to see whats available and how to
128     gather information.
129    
130 root 1.5 for my $type (OpenCL::MEM_OBJECT_IMAGE2D, OpenCL::MEM_OBJECT_IMAGE3D) {
131 root 1.10 print "supported image formats for ", OpenCL::enum2str $type, "\n";
132 root 1.5
133     for my $f ($ctx->supported_image_formats (0, $type)) {
134     printf " %-10s %-20s\n", OpenCL::enum2str $f->[0], OpenCL::enum2str $f->[1];
135     }
136     }
137    
138     =head2 Create a buffer with some predefined data, read it back synchronously,
139     then asynchronously.
140 root 1.3
141     my $buf = $ctx->buffer_sv (OpenCL::MEM_COPY_HOST_PTR, "helmut");
142    
143     $queue->enqueue_read_buffer ($buf, 1, 1, 3, my $data);
144 root 1.10 print "$data\n";
145 root 1.3
146     my $ev = $queue->enqueue_read_buffer ($buf, 0, 1, 3, my $data);
147     $ev->wait;
148 root 1.10 print "$data\n"; # prints "elm"
149 root 1.3
150 root 1.5 =head2 Create and build a program, then create a kernel out of one of its
151     functions.
152 root 1.3
153     my $src = '
154     __kernel void
155     squareit (__global float *input, __global float *output)
156     {
157 root 1.15 $id = get_global_id (0);
158 root 1.3 output [id] = input [id] * input [id];
159     }
160     ';
161    
162     my $prog = $ctx->program_with_source ($src);
163    
164 root 1.11 # build croaks on compile errors, so catch it and print the compile errors
165 root 1.3 eval { $prog->build ($dev); 1 }
166     or die $prog->build_info ($dev, OpenCL::PROGRAM_BUILD_LOG);
167    
168     my $kernel = $prog->kernel ("squareit");
169    
170 root 1.11 =head2 Create some input and output float buffers, then call the
171     'squareit' kernel on them.
172 root 1.4
173     my $input = $ctx->buffer_sv (OpenCL::MEM_COPY_HOST_PTR, pack "f*", 1, 2, 3, 4.5);
174     my $output = $ctx->buffer (0, OpenCL::SIZEOF_FLOAT * 5);
175    
176     # set buffer
177     $kernel->set_buffer (0, $input);
178     $kernel->set_buffer (1, $output);
179    
180     # execute it for all 4 numbers
181     $queue->enqueue_nd_range_kernel ($kernel, undef, [4], undef);
182    
183 root 1.5 # enqueue a synchronous read
184     $queue->enqueue_read_buffer ($output, 1, 0, OpenCL::SIZEOF_FLOAT * 4, my $data);
185    
186     # print the results:
187 root 1.10 printf "%s\n", join ", ", unpack "f*", $data;
188 root 1.5
189     =head2 The same enqueue operations as before, but assuming an out-of-order queue,
190     showing off barriers.
191    
192     # execute it for all 4 numbers
193     $queue->enqueue_nd_range_kernel ($kernel, undef, [4], undef);
194    
195     # enqueue a barrier to ensure in-order execution
196 root 1.4 $queue->enqueue_barrier;
197    
198 root 1.5 # enqueue an async read
199     $queue->enqueue_read_buffer ($output, 0, 0, OpenCL::SIZEOF_FLOAT * 4, my $data);
200    
201     # wait for all requests to finish
202     $queue->finish;
203    
204     =head2 The same enqueue operations as before, but assuming an out-of-order queue,
205     showing off event objects and wait lists.
206    
207     # execute it for all 4 numbers
208     my $ev = $queue->enqueue_nd_range_kernel ($kernel, undef, [4], undef);
209    
210     # enqueue an async read
211     $ev = $queue->enqueue_read_buffer ($output, 0, 0, OpenCL::SIZEOF_FLOAT * 4, my $data, $ev);
212    
213     # wait for the last event to complete
214 root 1.4 $ev->wait;
215    
216 root 1.5 =head1 DOCUMENTATION
217    
218     =head2 BASIC CONVENTIONS
219    
220 root 1.14 This is not a one-to-one C-style translation of OpenCL to Perl - instead
221     I attempted to make the interface as type-safe as possible by introducing
222 root 1.5 object syntax where it makes sense. There are a number of important
223     differences between the OpenCL C API and this module:
224    
225     =over 4
226    
227     =item * Object lifetime managament is automatic - there is no need
228     to free objects explicitly (C<clReleaseXXX>), the release function
229     is called automatically once all Perl references to it go away.
230    
231 root 1.20 =item * OpenCL uses CamelCase for function names
232     (e.g. C<clGetPlatformIDs>, C<clGetPlatformInfo>), while this module
233     uses underscores as word separator and often leaves out prefixes
234     (C<OpenCL::platforms>, C<< $platform->info >>).
235 root 1.5
236     =item * OpenCL often specifies fixed vector function arguments as short
237 root 1.19 arrays (C<size_t origin[3]>), while this module explicitly expects the
238     components as separate arguments (C<$orig_x, $orig_y, $orig_z>) in
239     function calls.
240 root 1.5
241 root 1.19 =item * Structures are often specified by flattening out their components
242     as with short vectors, and returned as arrayrefs.
243 root 1.5
244     =item * When enqueuing commands, the wait list is specified by adding
245 root 1.9 extra arguments to the function - anywhere a C<$wait_events...> argument
246 root 1.5 is documented this can be any number of event objects.
247    
248     =item * When enqueuing commands, if the enqueue method is called in void
249     context, no event is created. In all other contexts an event is returned
250     by the method.
251    
252     =item * This module expects all functions to return C<CL_SUCCESS>. If any
253     other status is returned the function will throw an exception, so you
254     don't normally have to to any error checking.
255    
256     =back
257    
258 root 1.7 =head2 PERL AND OPENCL TYPES
259    
260 root 1.8 This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack
261 root 1.7 format equivalents:
262    
263 root 1.8 OpenCL perl PDL pack/unpack
264     char IV - c
265     uchar IV byte C
266     short IV short s
267     ushort IV ushort S
268     int IV long? l
269     uint IV - L
270     long IV longlong q
271     ulong IV - Q
272     float NV float f
273     half IV ushort S
274     double NV double d
275 root 1.7
276 root 1.5 =head2 THE OpenCL PACKAGE
277    
278     =over 4
279    
280     =item $int = OpenCL::errno
281    
282 root 1.11 The last error returned by a function - it's only valid after an error occured
283     and before calling another OpenCL function.
284 root 1.5
285     =item $str = OpenCL::err2str $errval
286    
287     Comverts an error value into a human readable string.
288    
289 root 1.9 =item $str = OpenCL::enum2str $enum
290 root 1.5
291     Converts most enum values (inof parameter names, image format constants,
292     object types, addressing and filter modes, command types etc.) into a
293     human readbale string. When confronted with some random integer it can be
294     very helpful to pass it through this function to maybe get some readable
295     string out of it.
296    
297     =item @platforms = OpenCL::platforms
298    
299     Returns all available OpenCL::Platform objects.
300    
301     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html>
302    
303 root 1.10 =item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $notify = undef
304 root 1.5
305     Tries to create a context from a default device and platform - never worked for me.
306    
307     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
308    
309     =item OpenCL::wait_for_events $wait_events...
310    
311     Waits for all events to complete.
312    
313     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clWaitForEvents.html>
314    
315     =back
316    
317     =head2 THE OpenCL::Platform CLASS
318    
319     =over 4
320    
321     =item @devices = $platform->devices ($type = OpenCL::DEVICE_TYPE_ALL)
322    
323     Returns a list of matching OpenCL::Device objects.
324    
325 root 1.10 =item $ctx = $platform->context_from_type ($properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $notify = undef)
326 root 1.5
327 root 1.22 Tries to create a context. Never worked for me, and you need devices explicitly anyway.
328 root 1.5
329     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
330    
331 root 1.11 =item $ctx = $device->context ($properties = undef, @$devices, $notify = undef)
332    
333     Create a new OpenCL::Context object using the given device object(s)- a
334     CL_CONTEXT_PLATFORM property is supplied automatically.
335    
336     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html>
337    
338 root 1.20 =item $packed_value = $platform->info ($name)
339    
340     Calls C<clGetPlatformInfo> and returns the packed, raw value - for
341 root 1.22 strings, this will be the string (possibly including terminating \0), for
342     other values you probably need to use the correct C<unpack>.
343 root 1.20
344 root 1.22 It's best to avoid this method and use one of the following convenience
345     wrappers.
346 root 1.20
347     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformInfo.html>
348    
349     =for gengetinfo begin platform
350    
351     =item $string = $platform->profile
352    
353     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_PROFILE> and returns the result(s).
354    
355     =item $string = $platform->version
356    
357     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VERSION> and returns the result(s).
358    
359     =item $string = $platform->name
360    
361     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_NAME> and returns the result(s).
362    
363     =item $string = $platform->vendor
364    
365     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VENDOR> and returns the result(s).
366    
367     =item $string = $platform->extensions
368    
369     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_EXTENSIONS> and returns the result(s).
370 root 1.21
371 root 1.20 =for gengetinfo end platform
372    
373 root 1.5 =back
374    
375     =head2 THE OpenCL::Device CLASS
376    
377     =over 4
378    
379     =item $packed_value = $device->info ($name)
380    
381     See C<< $platform->info >> for details.
382    
383     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html>
384    
385 root 1.21 =for gengetinfo begin device
386    
387     =item $device_type = $device->type
388    
389     Calls C<clGetDeviceInfo> with C<CL_DEVICE_TYPE> and returns the result(s).
390    
391     =item $uint = $device->vendor_id
392    
393     Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR_ID> and returns the result(s).
394    
395     =item $uint = $device->max_compute_units
396    
397     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_COMPUTE_UNITS> and returns the result(s).
398    
399     =item $uint = $device->max_work_item_dimensions
400    
401     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS> and returns the result(s).
402    
403     =item $int = $device->max_work_group_size
404    
405     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_GROUP_SIZE> and returns the result(s).
406    
407     =item @ints = $device->max_work_item_sizes
408    
409     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_SIZES> and returns the result(s).
410    
411     =item $uint = $device->preferred_vector_width_char
412    
413     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR> and returns the result(s).
414    
415     =item $uint = $device->preferred_vector_width_short
416    
417     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT> and returns the result(s).
418    
419     =item $uint = $device->preferred_vector_width_int
420    
421     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT> and returns the result(s).
422    
423     =item $uint = $device->preferred_vector_width_long
424    
425     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG> and returns the result(s).
426    
427     =item $uint = $device->preferred_vector_width_float
428    
429     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT> and returns the result(s).
430    
431     =item $uint = $device->preferred_vector_width_double
432    
433     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE> and returns the result(s).
434    
435     =item $uint = $device->max_clock_frequency
436    
437     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CLOCK_FREQUENCY> and returns the result(s).
438    
439     =item $bitfield = $device->address_bits
440    
441     Calls C<clGetDeviceInfo> with C<CL_DEVICE_ADDRESS_BITS> and returns the result(s).
442    
443     =item $uint = $device->max_read_image_args
444    
445     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_READ_IMAGE_ARGS> and returns the result(s).
446    
447     =item $uint = $device->max_write_image_args
448    
449     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WRITE_IMAGE_ARGS> and returns the result(s).
450    
451     =item $ulong = $device->max_mem_alloc_size
452    
453     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_MEM_ALLOC_SIZE> and returns the result(s).
454    
455     =item $int = $device->image2d_max_width
456    
457     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_WIDTH> and returns the result(s).
458    
459     =item $int = $device->image2d_max_height
460    
461     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_HEIGHT> and returns the result(s).
462    
463     =item $int = $device->image3d_max_width
464    
465     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_WIDTH> and returns the result(s).
466    
467     =item $int = $device->image3d_max_height
468    
469     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_HEIGHT> and returns the result(s).
470    
471     =item $int = $device->image3d_max_depth
472    
473     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_DEPTH> and returns the result(s).
474    
475     =item $uint = $device->image_support
476    
477     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE_SUPPORT> and returns the result(s).
478    
479     =item $int = $device->max_parameter_size
480    
481     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_PARAMETER_SIZE> and returns the result(s).
482    
483     =item $uint = $device->max_samplers
484    
485     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_SAMPLERS> and returns the result(s).
486    
487     =item $uint = $device->mem_base_addr_align
488    
489     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MEM_BASE_ADDR_ALIGN> and returns the result(s).
490    
491     =item $uint = $device->min_data_type_align_size
492    
493     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE> and returns the result(s).
494    
495     =item $device_fp_config = $device->single_fp_config
496    
497     Calls C<clGetDeviceInfo> with C<CL_DEVICE_SINGLE_FP_CONFIG> and returns the result(s).
498    
499     =item $device_mem_cache_type = $device->global_mem_cache_type
500    
501     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_TYPE> and returns the result(s).
502    
503     =item $uint = $device->global_mem_cacheline_size
504    
505     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE> and returns the result(s).
506    
507     =item $ulong = $device->global_mem_cache_size
508    
509     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_SIZE> and returns the result(s).
510    
511     =item $ulong = $device->global_mem_size
512    
513     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_SIZE> and returns the result(s).
514    
515     =item $ulong = $device->max_constant_buffer_size
516    
517     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE> and returns the result(s).
518    
519     =item $uint = $device->max_constant_args
520    
521     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_ARGS> and returns the result(s).
522    
523     =item $device_local_mem_type = $device->local_mem_type
524    
525     Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_TYPE> and returns the result(s).
526    
527     =item $ulong = $device->local_mem_size
528    
529     Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_SIZE> and returns the result(s).
530    
531     =item $boolean = $device->error_correction_support
532    
533     Calls C<clGetDeviceInfo> with C<CL_DEVICE_ERROR_CORRECTION_SUPPORT> and returns the result(s).
534    
535     =item $int = $device->profiling_timer_resolution
536    
537     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILING_TIMER_RESOLUTION> and returns the result(s).
538    
539     =item $boolean = $device->endian_little
540    
541     Calls C<clGetDeviceInfo> with C<CL_DEVICE_ENDIAN_LITTLE> and returns the result(s).
542    
543     =item $boolean = $device->available
544    
545     Calls C<clGetDeviceInfo> with C<CL_DEVICE_AVAILABLE> and returns the result(s).
546    
547     =item $boolean = $device->compiler_available
548    
549     Calls C<clGetDeviceInfo> with C<CL_DEVICE_COMPILER_AVAILABLE> and returns the result(s).
550    
551     =item $device_exec_capabilities = $device->execution_capabilities
552    
553     Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXECUTION_CAPABILITIES> and returns the result(s).
554    
555     =item $command_queue_properties = $device->properties
556    
557     Calls C<clGetDeviceInfo> with C<CL_DEVICE_QUEUE_PROPERTIES> and returns the result(s).
558    
559     =item $ = $device->platform
560    
561     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PLATFORM> and returns the result(s).
562    
563     =item $string = $device->name
564    
565     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NAME> and returns the result(s).
566    
567     =item $string = $device->vendor
568    
569     Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR> and returns the result(s).
570    
571     =item $string = $device->driver_version
572    
573     Calls C<clGetDeviceInfo> with C<CL_DRIVER_VERSION> and returns the result(s).
574    
575     =item $string = $device->profile
576    
577     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILE> and returns the result(s).
578    
579     =item $string = $device->version
580    
581     Calls C<clGetDeviceInfo> with C<CL_DEVICE_VERSION> and returns the result(s).
582    
583     =item $string = $device->extensions
584    
585     Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXTENSIONS> and returns the result(s).
586    
587     =item $uint = $device->preferred_vector_width_half
588    
589     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF> and returns the result(s).
590    
591     =item $uint = $device->native_vector_width_char
592    
593     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR> and returns the result(s).
594    
595     =item $uint = $device->native_vector_width_short
596    
597     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT> and returns the result(s).
598    
599     =item $uint = $device->native_vector_width_int
600    
601     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_INT> and returns the result(s).
602    
603     =item $uint = $device->native_vector_width_long
604    
605     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG> and returns the result(s).
606    
607     =item $uint = $device->native_vector_width_float
608    
609     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT> and returns the result(s).
610    
611     =item $uint = $device->native_vector_width_double
612    
613     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE> and returns the result(s).
614    
615     =item $uint = $device->native_vector_width_half
616    
617     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF> and returns the result(s).
618    
619     =item $device_fp_config = $device->double_fp_config
620    
621     Calls C<clGetDeviceInfo> with C<CL_DEVICE_DOUBLE_FP_CONFIG> and returns the result(s).
622    
623     =item $device_fp_config = $device->half_fp_config
624    
625     Calls C<clGetDeviceInfo> with C<CL_DEVICE_HALF_FP_CONFIG> and returns the result(s).
626    
627     =item $boolean = $device->host_unified_memory
628    
629     Calls C<clGetDeviceInfo> with C<CL_DEVICE_HOST_UNIFIED_MEMORY> and returns the result(s).
630    
631     =item $device = $device->parent_device_ext
632    
633     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARENT_DEVICE_EXT> and returns the result(s).
634    
635     =item @device_partition_property_exts = $device->partition_types_ext
636    
637     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_TYPES_EXT> and returns the result(s).
638    
639     =item @device_partition_property_exts = $device->affinity_domains_ext
640    
641     Calls C<clGetDeviceInfo> with C<CL_DEVICE_AFFINITY_DOMAINS_EXT> and returns the result(s).
642    
643     =item $uint = $device->reference_count_ext
644    
645     Calls C<clGetDeviceInfo> with C<CL_DEVICE_REFERENCE_COUNT_EXT > and returns the result(s).
646    
647     =item @device_partition_property_exts = $device->partition_style_ext
648    
649     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_STYLE_EXT> and returns the result(s).
650    
651     =for gengetinfo end device
652    
653 root 1.5 =back
654    
655     =head2 THE OpenCL::Context CLASS
656    
657     =over 4
658    
659 root 1.9 =item $queue = $ctx->queue ($device, $properties)
660 root 1.5
661 root 1.9 Create a new OpenCL::Queue object from the context and the given device.
662 root 1.5
663     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateCommandQueue.html>
664    
665     =item $ev = $ctx->user_event
666    
667     Creates a new OpenCL::UserEvent object.
668    
669     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateUserEvent.html>
670    
671     =item $buf = $ctx->buffer ($flags, $len)
672    
673     Creates a new OpenCL::Buffer object with the given flags and octet-size.
674    
675     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateBuffer.html>
676    
677     =item $buf = $ctx->buffer_sv ($flags, $data)
678    
679     Creates a new OpenCL::Buffer object and initialise it with the given data values.
680    
681 root 1.18 =item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef)
682 root 1.5
683     Creates a new OpenCL::Image2D object and optionally initialises it with the given data values.
684    
685     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateImage2D.html>
686    
687 root 1.18 =item $img = $ctx->image3d ($flags, $channel_order, $channel_type, $width, $height, $depth, $row_pitch = 0, $slice_pitch = 0, $data = undef)
688 root 1.5
689     Creates a new OpenCL::Image3D object and optionally initialises it with the given data values.
690    
691     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateImage3D.html>
692    
693     =item @formats = $ctx->supported_image_formats ($flags, $image_type)
694    
695     Returns a list of matching image formats - each format is an arrayref with
696     two values, $channel_order and $channel_type, in it.
697    
698     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetSupportedImageFormats.html>
699    
700     =item $sampler = $ctx->sampler ($normalized_coords, $addressing_mode, $filter_mode)
701    
702     Creates a new OpenCL::Sampler object.
703    
704     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSampler.html>
705    
706     =item $program = $ctx->program_with_source ($string)
707    
708     Creates a new OpenCL::Program object from the given source code.
709    
710     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateProgramWithSource.html>
711    
712 root 1.20 =item $packed_value = $ctx->info ($name)
713    
714     See C<< $platform->info >> for details.
715    
716     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html>
717    
718     =for gengetinfo begin context
719    
720 root 1.21 =item $uint = $context->reference_count
721    
722     Calls C<clGetContextInfo> with C<CL_CONTEXT_REFERENCE_COUNT> and returns the result(s).
723    
724     =item @devices = $context->devices
725    
726     Calls C<clGetContextInfo> with C<CL_CONTEXT_DEVICES> and returns the result(s).
727    
728     =item @property_ints = $context->properties
729    
730     Calls C<clGetContextInfo> with C<CL_CONTEXT_PROPERTIES> and returns the result(s).
731    
732     =item $uint = $context->num_devices
733    
734     Calls C<clGetContextInfo> with C<CL_CONTEXT_NUM_DEVICES> and returns the result(s).
735    
736 root 1.20 =for gengetinfo end context
737    
738 root 1.5 =back
739    
740     =head2 THE OpenCL::Queue CLASS
741    
742     An OpenCL::Queue represents an execution queue for OpenCL. You execute
743     requests by calling their respective C<enqueue_xxx> method and waitinf for
744     it to complete in some way.
745    
746     All the enqueue methods return an event object that can be used to wait
747     for completion, unless the method is called in void context, in which case
748     no event object is created.
749    
750     They also allow you to specify any number of other event objects that this
751     request has to wait for before it starts executing, by simply passing the
752     event objects as extra parameters to the enqueue methods.
753    
754     Queues execute in-order by default, without any parallelism, so in most
755 root 1.6 cases (i.e. you use only one queue) it's not necessary to wait for or
756     create event objects.
757 root 1.5
758     =over 4
759    
760     =item $ev = $queue->enqueue_read_buffer ($buffer, $blocking, $offset, $len, $data, $wait_events...)
761    
762     Reads data from buffer into the given string.
763    
764     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBuffer.html>
765    
766     =item $ev = $queue->enqueue_write_buffer ($buffer, $blocking, $offset, $data, $wait_events...)
767    
768     Writes data to buffer from the given string.
769    
770     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBuffer.html>
771    
772     =item $ev = $queue->enqueue_copy_buffer ($src, $dst, $src_offset, $dst_offset, $len, $wait_events...)
773    
774     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBuffer.html>
775    
776     =item $ev = $queue->enqueue_read_image ($src, $blocking, $x, $y, $z, $width, $height, $depth, $row_pitch, $slice_pitch, $data, $wait_events...)
777    
778     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadImage.html>
779    
780 root 1.17 =item $ev = $queue->enqueue_write_image ($src, $blocking, $x, $y, $z, $width, $height, $depth, $row_pitch, $slice_pitch, $data, $wait_events...)
781 root 1.5
782     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteImage.html>
783    
784 root 1.17 =item $ev = $queue->enqueue_copy_buffer_rect ($src, $dst, $src_x, $src_y, $src_z, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $src_row_pitch, $src_slice_pitch, $dst_row_pitch, $dst_slice_pitch, $wait_event...)
785 root 1.5
786     Yeah.
787    
788     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBufferRect.html>
789    
790 root 1.15 =item $ev = $queue->enqueue_copy_buffer_to_image ($src_buffer, $dst_image, $src_offset, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $wait_events...)
791 root 1.5
792     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBufferToImage.html>.
793    
794 root 1.15 =item $ev = $queue->enqueue_copy_image ($src_image, $dst_image, $src_x, $src_y, $src_z, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $wait_events...)
795 root 1.5
796     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyImage.html>
797    
798 root 1.15 =item $ev = $queue->enqueue_copy_image_to_buffer ($src_image, $dst_image, $src_x, $src_y, $src_z, $width, $height, $depth, $dst_offset, $wait_events...)
799 root 1.5
800     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyImageToBuffer.html>
801    
802     =item $ev = $queue->enqueue_task ($kernel, $wait_events...)
803    
804     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueTask.html>
805    
806     =item $ev = $queue->enqueue_nd_range_kernel ($kernel, @$global_work_offset, @$global_work_size, @$local_work_size, $wait_events...)
807    
808     Enqueues a kernel execution.
809    
810     @$global_work_size must be specified as a reference to an array of
811     integers specifying the work sizes (element counts).
812    
813     @$global_work_offset must be either C<undef> (in which case all offsets
814     are C<0>), or a reference to an array of work offsets, with the same number
815     of elements as @$global_work_size.
816    
817     @$local_work_size must be either C<undef> (in which case the
818     implementation is supposed to choose good local work sizes), or a
819     reference to an array of local work sizes, with the same number of
820     elements as @$global_work_size.
821    
822     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html>
823    
824     =item $ev = $queue->enqueue_marker
825    
826     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMarker.html>
827    
828     =item $ev = $queue->enqueue_wait_for_events ($wait_events...)
829    
830     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWaitForEvents.html>
831    
832     =item $queue->enqueue_barrier
833    
834     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueBarrier.html>
835    
836     =item $queue->flush
837    
838     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFlush.html>
839    
840     =item $queue->finish
841    
842     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFinish.html>
843    
844 root 1.21 =item $packed_value = $queue->info ($name)
845    
846     See C<< $platform->info >> for details.
847    
848     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetCommandQueueInfo.html>
849    
850     =for gengetinfo begin command_queue
851    
852     =item $ctx = $command_queue->context
853    
854     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_CONTEXT> and returns the result(s).
855    
856     =item $device = $command_queue->device
857    
858     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_DEVICE> and returns the result(s).
859    
860     =item $uint = $command_queue->reference_count
861    
862     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_REFERENCE_COUNT> and returns the result(s).
863    
864     =item $command_queue_properties = $command_queue->properties
865    
866     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_PROPERTIES> and returns the result(s).
867    
868     =for gengetinfo end command_queue
869    
870 root 1.5 =back
871    
872     =head2 THE OpenCL::Memory CLASS
873    
874     This the superclass of all memory objects - OpenCL::Buffer, OpenCL::Image,
875 root 1.21 OpenCL::Image2D and OpenCL::Image3D.
876 root 1.5
877     =over 4
878    
879     =item $packed_value = $memory->info ($name)
880    
881     See C<< $platform->info >> for details.
882    
883     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetMemObjectInfo.html>
884    
885 root 1.21 =for gengetinfo begin mem
886    
887     =item $mem_object_type = $mem->type
888    
889     Calls C<clGetMemObjectInfo> with C<CL_MEM_TYPE> and returns the result(s).
890    
891     =item $mem_flags = $mem->flags
892    
893     Calls C<clGetMemObjectInfo> with C<CL_MEM_FLAGS> and returns the result(s).
894    
895     =item $int = $mem->size
896    
897     Calls C<clGetMemObjectInfo> with C<CL_MEM_SIZE> and returns the result(s).
898    
899     =item $ptr_value = $mem->host_ptr
900    
901     Calls C<clGetMemObjectInfo> with C<CL_MEM_HOST_PTR> and returns the result(s).
902    
903     =item $uint = $mem->map_count
904    
905     Calls C<clGetMemObjectInfo> with C<CL_MEM_MAP_COUNT> and returns the result(s).
906    
907     =item $uint = $mem->reference_count
908    
909     Calls C<clGetMemObjectInfo> with C<CL_MEM_REFERENCE_COUNT> and returns the result(s).
910    
911     =item $ctx = $mem->context
912    
913     Calls C<clGetMemObjectInfo> with C<CL_MEM_CONTEXT> and returns the result(s).
914    
915     =item $mem = $mem->associated_memobject
916    
917     Calls C<clGetMemObjectInfo> with C<CL_MEM_ASSOCIATED_MEMOBJECT> and returns the result(s).
918    
919     =item $int = $mem->offset
920    
921     Calls C<clGetMemObjectInfo> with C<CL_MEM_OFFSET> and returns the result(s).
922    
923     =for gengetinfo end mem
924    
925 root 1.5 =back
926    
927 root 1.20 =head2 THE OpenCL::Image CLASS
928    
929     This is the superclass of all image objects - OpenCL::Image2D and OpenCL::Image3D.
930    
931     =over 4
932    
933     =item $packed_value = $ev->image_info ($name)
934    
935     See C<< $platform->info >> for details.
936    
937     The reason this method is not called C<info> is that there already is an
938     C<< ->info >> method inherited from C<OpenCL::Memory>.
939    
940     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html>
941    
942 root 1.21 =for gengetinfo begin image
943    
944     =item $int = $image->element_size
945    
946     Calls C<clGetImageInfo> with C<CL_IMAGE_ELEMENT_SIZE> and returns the result(s).
947    
948     =item $int = $image->row_pitch
949    
950     Calls C<clGetImageInfo> with C<CL_IMAGE_ROW_PITCH> and returns the result(s).
951    
952     =item $int = $image->slice_pitch
953    
954     Calls C<clGetImageInfo> with C<CL_IMAGE_SLICE_PITCH> and returns the result(s).
955    
956     =item $int = $image->width
957    
958     Calls C<clGetImageInfo> with C<CL_IMAGE_WIDTH> and returns the result(s).
959    
960     =item $int = $image->height
961    
962     Calls C<clGetImageInfo> with C<CL_IMAGE_HEIGHT> and returns the result(s).
963    
964     =item $int = $image->depth
965    
966     Calls C<clGetImageInfo> with C<CL_IMAGE_DEPTH> and returns the result(s).
967    
968     =for gengetinfo end image
969    
970 root 1.20 =back
971    
972 root 1.5 =head2 THE OpenCL::Sampler CLASS
973    
974     =over 4
975    
976     =item $packed_value = $sampler->info ($name)
977    
978     See C<< $platform->info >> for details.
979    
980     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetSamplerInfo.html>
981    
982 root 1.21 =for gengetinfo begin sampler
983    
984     =item $uint = $sampler->reference_count
985    
986     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_REFERENCE_COUNT> and returns the result(s).
987    
988     =item $ctx = $sampler->context
989    
990     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_CONTEXT> and returns the result(s).
991    
992     =item $addressing_mode = $sampler->normalized_coords
993    
994     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_NORMALIZED_COORDS> and returns the result(s).
995    
996     =item $filter_mode = $sampler->addressing_mode
997    
998     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_ADDRESSING_MODE> and returns the result(s).
999    
1000     =item $boolean = $sampler->filter_mode
1001    
1002     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_FILTER_MODE> and returns the result(s).
1003    
1004     =for gengetinfo end sampler
1005    
1006 root 1.5 =back
1007    
1008     =head2 THE OpenCL::Program CLASS
1009    
1010     =over 4
1011    
1012     =item $program->build ($device, $options = "")
1013    
1014     Tries to build the program with the givne options.
1015    
1016     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1017    
1018     =item $packed_value = $program->build_info ($device, $name)
1019    
1020     Similar to C<< $platform->info >>, but returns build info for a previous
1021     build attempt for the given device.
1022    
1023     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html>
1024    
1025     =item $kernel = $program->kernel ($function_name)
1026    
1027     Creates an OpenCL::Kernel object out of the named C<__kernel> function in
1028     the program.
1029    
1030     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateKernel.html>
1031    
1032 root 1.21 =for gengetinfo begin program_build
1033    
1034     =item $build_status = $program->build_status ($device)
1035    
1036     Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_STATUS> and returns the result(s).
1037    
1038     =item $string = $program->build_options ($device)
1039    
1040     Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_OPTIONS> and returns the result(s).
1041    
1042     =item $string = $program->build_log ($device)
1043    
1044     Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_LOG> and returns the result(s).
1045    
1046     =for gengetinfo end program_build
1047    
1048     =item $packed_value = $program->info ($name)
1049    
1050     See C<< $platform->info >> for details.
1051    
1052     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetProgramInfo.html>
1053    
1054     =for gengetinfo begin program
1055    
1056     =item $uint = $program->reference_count
1057    
1058     Calls C<clGetProgramInfo> with C<CL_PROGRAM_REFERENCE_COUNT> and returns the result(s).
1059    
1060     =item $ctx = $program->context
1061    
1062     Calls C<clGetProgramInfo> with C<CL_PROGRAM_CONTEXT> and returns the result(s).
1063    
1064     =item $uint = $program->num_devices
1065    
1066     Calls C<clGetProgramInfo> with C<CL_PROGRAM_NUM_DEVICES> and returns the result(s).
1067    
1068     =item @devices = $program->devices
1069    
1070     Calls C<clGetProgramInfo> with C<CL_PROGRAM_DEVICES> and returns the result(s).
1071    
1072     =item $string = $program->source
1073    
1074     Calls C<clGetProgramInfo> with C<CL_PROGRAM_SOURCE> and returns the result(s).
1075    
1076     =item @ints = $program->binary_sizes
1077    
1078     Calls C<clGetProgramInfo> with C<CL_PROGRAM_BINARY_SIZES> and returns the result(s).
1079    
1080     =for gengetinfo end program
1081    
1082 root 1.5 =back
1083    
1084     =head2 THE OpenCL::Kernel CLASS
1085    
1086     =over 4
1087    
1088     =item $packed_value = $kernel->info ($name)
1089    
1090     See C<< $platform->info >> for details.
1091    
1092     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelInfo.html>
1093    
1094 root 1.21 =for gengetinfo begin kernel
1095    
1096     =item $string = $kernel->function_name
1097    
1098     Calls C<clGetKernelInfo> with C<CL_KERNEL_FUNCTION_NAME> and returns the result(s).
1099    
1100     =item $uint = $kernel->num_args
1101    
1102     Calls C<clGetKernelInfo> with C<CL_KERNEL_NUM_ARGS> and returns the result(s).
1103    
1104     =item $uint = $kernel->reference_count
1105    
1106     Calls C<clGetKernelInfo> with C<CL_KERNEL_REFERENCE_COUNT> and returns the result(s).
1107    
1108     =item $ctx = $kernel->context
1109    
1110     Calls C<clGetKernelInfo> with C<CL_KERNEL_CONTEXT> and returns the result(s).
1111    
1112     =item $program = $kernel->program
1113    
1114     Calls C<clGetKernelInfo> with C<CL_KERNEL_PROGRAM> and returns the result(s).
1115    
1116     =for gengetinfo end kernel
1117    
1118 root 1.20 =item $packed_value = $kernel->work_group_info ($device, $name)
1119    
1120     See C<< $platform->info >> for details.
1121    
1122     The reason this method is not called C<info> is that there already is an
1123     C<< ->info >> method.
1124    
1125     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html>
1126    
1127 root 1.21 =for gengetinfo begin kernel_work_group
1128    
1129     =item $int = $kernel->work_group_size ($device)
1130    
1131     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_WORK_GROUP_SIZE> and returns the result(s).
1132    
1133     =item @ints = $kernel->compile_work_group_size ($device)
1134    
1135     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_COMPILE_WORK_GROUP_SIZE> and returns the result(s).
1136    
1137     =item $ulong = $kernel->local_mem_size ($device)
1138    
1139     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_LOCAL_MEM_SIZE> and returns the result(s).
1140    
1141     =item $int = $kernel->preferred_work_group_size_multiple ($device)
1142    
1143     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE> and returns the result(s).
1144    
1145     =item $ulong = $kernel->private_mem_size ($device)
1146    
1147     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PRIVATE_MEM_SIZE> and returns the result(s).
1148    
1149     =for gengetinfo end kernel_work_group
1150    
1151 root 1.5 =item $kernel->set_TYPE ($index, $value)
1152    
1153     This is a family of methods to set the kernel argument with the number C<$index> to the give C<$value>.
1154    
1155     TYPE is one of C<char>, C<uchar>, C<short>, C<ushort>, C<int>, C<uint>,
1156     C<long>, C<ulong>, C<half>, C<float>, C<double>, C<memory>, C<buffer>,
1157     C<image2d>, C<image3d>, C<sampler> or C<event>.
1158    
1159     Chars and integers (including the half type) are specified as integers,
1160     float and double as floating point values, memory/buffer/image2d/image3d
1161     must be an object of that type or C<undef>, and sampler and event must be
1162     objects of that type.
1163    
1164     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetKernelArg.html>
1165    
1166     =back
1167    
1168     =head2 THE OpenCL::Event CLASS
1169    
1170     This is the superclass for all event objects (including OpenCL::UserEvent
1171     objects).
1172    
1173     =over 4
1174    
1175 root 1.21 =item $ev->wait
1176    
1177     Waits for the event to complete.
1178    
1179     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clWaitForEvents.html>
1180    
1181 root 1.5 =item $packed_value = $ev->info ($name)
1182    
1183     See C<< $platform->info >> for details.
1184    
1185     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetEventInfo.html>
1186    
1187 root 1.21 =for gengetinfo begin event
1188    
1189     =item $queue = $event->command_queue
1190    
1191     Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_QUEUE> and returns the result(s).
1192    
1193     =item $command_type = $event->command_type
1194    
1195     Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_TYPE> and returns the result(s).
1196    
1197     =item $uint = $event->reference_count
1198    
1199     Calls C<clGetEventInfo> with C<CL_EVENT_REFERENCE_COUNT> and returns the result(s).
1200    
1201     =item $uint = $event->command_execution_status
1202    
1203     Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_EXECUTION_STATUS> and returns the result(s).
1204    
1205     =item $ctx = $event->context
1206    
1207     Calls C<clGetEventInfo> with C<CL_EVENT_CONTEXT> and returns the result(s).
1208    
1209     =for gengetinfo end event
1210    
1211 root 1.20 =item $packed_value = $ev->profiling_info ($name)
1212    
1213     See C<< $platform->info >> for details.
1214    
1215     The reason this method is not called C<info> is that there already is an
1216     C<< ->info >> method.
1217    
1218     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetProfilingInfo.html>
1219    
1220 root 1.21 =for gengetinfo begin profiling
1221    
1222     =item $ulong = $event->profiling_command_queued
1223    
1224     Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_QUEUED> and returns the result(s).
1225    
1226     =item $ulong = $event->profiling_command_submit
1227    
1228     Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_SUBMIT> and returns the result(s).
1229    
1230     =item $ulong = $event->profiling_command_start
1231    
1232     Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_START> and returns the result(s).
1233    
1234     =item $ulong = $event->profiling_command_end
1235 root 1.5
1236 root 1.21 Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_END> and returns the result(s).
1237 root 1.5
1238 root 1.21 =for gengetinfo end profiling
1239 root 1.5
1240     =back
1241    
1242     =head2 THE OpenCL::UserEvent CLASS
1243    
1244     This is a subclass of OpenCL::Event.
1245 root 1.4
1246 root 1.1 =over 4
1247    
1248 root 1.5 =item $ev->set_status ($execution_status)
1249    
1250     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetUserEventStatus.html>
1251    
1252     =back
1253    
1254 root 1.1 =cut
1255    
1256     package OpenCL;
1257    
1258 root 1.2 use common::sense;
1259    
1260 root 1.1 BEGIN {
1261 root 1.21 our $VERSION = '0.55';
1262 root 1.1
1263     require XSLoader;
1264     XSLoader::load (__PACKAGE__, $VERSION);
1265 root 1.3
1266 root 1.5 @OpenCL::Buffer::ISA =
1267     @OpenCL::Image::ISA = OpenCL::Memory::;
1268 root 1.3
1269 root 1.5 @OpenCL::Image2D::ISA =
1270     @OpenCL::Image3D::ISA = OpenCL::Image::;
1271    
1272     @OpenCL::UserEvent::ISA = OpenCL::Event::;
1273 root 1.1 }
1274    
1275     1;
1276    
1277     =head1 AUTHOR
1278    
1279     Marc Lehmann <schmorp@schmorp.de>
1280     http://home.schmorp.de/
1281    
1282     =cut
1283