ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/OpenCL/OpenCL.pm
Revision: 1.21
Committed: Sun Nov 20 10:21:27 2011 UTC (12 years, 6 months ago) by root
Branch: MAIN
Changes since 1.20: +562 -18 lines
Log Message:
0.55

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.11 Tries to create a context. Never worked for me, and you need devices explitly 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     strings, this will be the string, for other values you probably need to
342     use the correct C<unpack>.
343    
344     It's best to avoid this method and use one of the predefined C<get_*>
345     methods.
346    
347     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformInfo.html>
348    
349     =for gengetinfo begin platform
350    
351    
352     =item $string = $platform->profile
353    
354     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_PROFILE> and returns the result(s).
355    
356     =item $string = $platform->version
357    
358     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VERSION> and returns the result(s).
359    
360     =item $string = $platform->name
361    
362     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_NAME> and returns the result(s).
363    
364     =item $string = $platform->vendor
365    
366     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_VENDOR> and returns the result(s).
367    
368     =item $string = $platform->extensions
369    
370     Calls C<clGetPlatformInfo> with C<CL_PLATFORM_EXTENSIONS> and returns the result(s).
371 root 1.21
372 root 1.20 =for gengetinfo end platform
373    
374 root 1.5 =back
375    
376     =head2 THE OpenCL::Device CLASS
377    
378     =over 4
379    
380     =item $packed_value = $device->info ($name)
381    
382     See C<< $platform->info >> for details.
383    
384     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html>
385    
386 root 1.21 =for gengetinfo begin device
387    
388    
389     =item $device_type = $device->type
390    
391     Calls C<clGetDeviceInfo> with C<CL_DEVICE_TYPE> and returns the result(s).
392    
393     =item $uint = $device->vendor_id
394    
395     Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR_ID> and returns the result(s).
396    
397     =item $uint = $device->max_compute_units
398    
399     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_COMPUTE_UNITS> and returns the result(s).
400    
401     =item $uint = $device->max_work_item_dimensions
402    
403     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS> and returns the result(s).
404    
405     =item $int = $device->max_work_group_size
406    
407     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_GROUP_SIZE> and returns the result(s).
408    
409     =item @ints = $device->max_work_item_sizes
410    
411     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WORK_ITEM_SIZES> and returns the result(s).
412    
413     =item $uint = $device->preferred_vector_width_char
414    
415     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR> and returns the result(s).
416    
417     =item $uint = $device->preferred_vector_width_short
418    
419     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT> and returns the result(s).
420    
421     =item $uint = $device->preferred_vector_width_int
422    
423     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT> and returns the result(s).
424    
425     =item $uint = $device->preferred_vector_width_long
426    
427     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG> and returns the result(s).
428    
429     =item $uint = $device->preferred_vector_width_float
430    
431     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT> and returns the result(s).
432    
433     =item $uint = $device->preferred_vector_width_double
434    
435     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE> and returns the result(s).
436    
437     =item $uint = $device->max_clock_frequency
438    
439     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CLOCK_FREQUENCY> and returns the result(s).
440    
441     =item $bitfield = $device->address_bits
442    
443     Calls C<clGetDeviceInfo> with C<CL_DEVICE_ADDRESS_BITS> and returns the result(s).
444    
445     =item $uint = $device->max_read_image_args
446    
447     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_READ_IMAGE_ARGS> and returns the result(s).
448    
449     =item $uint = $device->max_write_image_args
450    
451     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_WRITE_IMAGE_ARGS> and returns the result(s).
452    
453     =item $ulong = $device->max_mem_alloc_size
454    
455     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_MEM_ALLOC_SIZE> and returns the result(s).
456    
457     =item $int = $device->image2d_max_width
458    
459     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_WIDTH> and returns the result(s).
460    
461     =item $int = $device->image2d_max_height
462    
463     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE2D_MAX_HEIGHT> and returns the result(s).
464    
465     =item $int = $device->image3d_max_width
466    
467     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_WIDTH> and returns the result(s).
468    
469     =item $int = $device->image3d_max_height
470    
471     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_HEIGHT> and returns the result(s).
472    
473     =item $int = $device->image3d_max_depth
474    
475     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE3D_MAX_DEPTH> and returns the result(s).
476    
477     =item $uint = $device->image_support
478    
479     Calls C<clGetDeviceInfo> with C<CL_DEVICE_IMAGE_SUPPORT> and returns the result(s).
480    
481     =item $int = $device->max_parameter_size
482    
483     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_PARAMETER_SIZE> and returns the result(s).
484    
485     =item $uint = $device->max_samplers
486    
487     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_SAMPLERS> and returns the result(s).
488    
489     =item $uint = $device->mem_base_addr_align
490    
491     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MEM_BASE_ADDR_ALIGN> and returns the result(s).
492    
493     =item $uint = $device->min_data_type_align_size
494    
495     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE> and returns the result(s).
496    
497     =item $device_fp_config = $device->single_fp_config
498    
499     Calls C<clGetDeviceInfo> with C<CL_DEVICE_SINGLE_FP_CONFIG> and returns the result(s).
500    
501     =item $device_mem_cache_type = $device->global_mem_cache_type
502    
503     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_TYPE> and returns the result(s).
504    
505     =item $uint = $device->global_mem_cacheline_size
506    
507     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE> and returns the result(s).
508    
509     =item $ulong = $device->global_mem_cache_size
510    
511     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_CACHE_SIZE> and returns the result(s).
512    
513     =item $ulong = $device->global_mem_size
514    
515     Calls C<clGetDeviceInfo> with C<CL_DEVICE_GLOBAL_MEM_SIZE> and returns the result(s).
516    
517     =item $ulong = $device->max_constant_buffer_size
518    
519     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE> and returns the result(s).
520    
521     =item $uint = $device->max_constant_args
522    
523     Calls C<clGetDeviceInfo> with C<CL_DEVICE_MAX_CONSTANT_ARGS> and returns the result(s).
524    
525     =item $device_local_mem_type = $device->local_mem_type
526    
527     Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_TYPE> and returns the result(s).
528    
529     =item $ulong = $device->local_mem_size
530    
531     Calls C<clGetDeviceInfo> with C<CL_DEVICE_LOCAL_MEM_SIZE> and returns the result(s).
532    
533     =item $boolean = $device->error_correction_support
534    
535     Calls C<clGetDeviceInfo> with C<CL_DEVICE_ERROR_CORRECTION_SUPPORT> and returns the result(s).
536    
537     =item $int = $device->profiling_timer_resolution
538    
539     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILING_TIMER_RESOLUTION> and returns the result(s).
540    
541     =item $boolean = $device->endian_little
542    
543     Calls C<clGetDeviceInfo> with C<CL_DEVICE_ENDIAN_LITTLE> and returns the result(s).
544    
545     =item $boolean = $device->available
546    
547     Calls C<clGetDeviceInfo> with C<CL_DEVICE_AVAILABLE> and returns the result(s).
548    
549     =item $boolean = $device->compiler_available
550    
551     Calls C<clGetDeviceInfo> with C<CL_DEVICE_COMPILER_AVAILABLE> and returns the result(s).
552    
553     =item $device_exec_capabilities = $device->execution_capabilities
554    
555     Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXECUTION_CAPABILITIES> and returns the result(s).
556    
557     =item $command_queue_properties = $device->properties
558    
559     Calls C<clGetDeviceInfo> with C<CL_DEVICE_QUEUE_PROPERTIES> and returns the result(s).
560    
561     =item $ = $device->platform
562    
563     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PLATFORM> and returns the result(s).
564    
565     =item $string = $device->name
566    
567     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NAME> and returns the result(s).
568    
569     =item $string = $device->vendor
570    
571     Calls C<clGetDeviceInfo> with C<CL_DEVICE_VENDOR> and returns the result(s).
572    
573     =item $string = $device->driver_version
574    
575     Calls C<clGetDeviceInfo> with C<CL_DRIVER_VERSION> and returns the result(s).
576    
577     =item $string = $device->profile
578    
579     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PROFILE> and returns the result(s).
580    
581     =item $string = $device->version
582    
583     Calls C<clGetDeviceInfo> with C<CL_DEVICE_VERSION> and returns the result(s).
584    
585     =item $string = $device->extensions
586    
587     Calls C<clGetDeviceInfo> with C<CL_DEVICE_EXTENSIONS> and returns the result(s).
588    
589     =item $uint = $device->preferred_vector_width_half
590    
591     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF> and returns the result(s).
592    
593     =item $uint = $device->native_vector_width_char
594    
595     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR> and returns the result(s).
596    
597     =item $uint = $device->native_vector_width_short
598    
599     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT> and returns the result(s).
600    
601     =item $uint = $device->native_vector_width_int
602    
603     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_INT> and returns the result(s).
604    
605     =item $uint = $device->native_vector_width_long
606    
607     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG> and returns the result(s).
608    
609     =item $uint = $device->native_vector_width_float
610    
611     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT> and returns the result(s).
612    
613     =item $uint = $device->native_vector_width_double
614    
615     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE> and returns the result(s).
616    
617     =item $uint = $device->native_vector_width_half
618    
619     Calls C<clGetDeviceInfo> with C<CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF> and returns the result(s).
620    
621     =item $device_fp_config = $device->double_fp_config
622    
623     Calls C<clGetDeviceInfo> with C<CL_DEVICE_DOUBLE_FP_CONFIG> and returns the result(s).
624    
625     =item $device_fp_config = $device->half_fp_config
626    
627     Calls C<clGetDeviceInfo> with C<CL_DEVICE_HALF_FP_CONFIG> and returns the result(s).
628    
629     =item $boolean = $device->host_unified_memory
630    
631     Calls C<clGetDeviceInfo> with C<CL_DEVICE_HOST_UNIFIED_MEMORY> and returns the result(s).
632    
633     =item $device = $device->parent_device_ext
634    
635     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARENT_DEVICE_EXT> and returns the result(s).
636    
637     =item @device_partition_property_exts = $device->partition_types_ext
638    
639     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_TYPES_EXT> and returns the result(s).
640    
641     =item @device_partition_property_exts = $device->affinity_domains_ext
642    
643     Calls C<clGetDeviceInfo> with C<CL_DEVICE_AFFINITY_DOMAINS_EXT> and returns the result(s).
644    
645     =item $uint = $device->reference_count_ext
646    
647     Calls C<clGetDeviceInfo> with C<CL_DEVICE_REFERENCE_COUNT_EXT > and returns the result(s).
648    
649     =item @device_partition_property_exts = $device->partition_style_ext
650    
651     Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_STYLE_EXT> and returns the result(s).
652    
653     =for gengetinfo end device
654    
655 root 1.5 =back
656    
657     =head2 THE OpenCL::Context CLASS
658    
659     =over 4
660    
661 root 1.9 =item $queue = $ctx->queue ($device, $properties)
662 root 1.5
663 root 1.9 Create a new OpenCL::Queue object from the context and the given device.
664 root 1.5
665     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateCommandQueue.html>
666    
667     =item $ev = $ctx->user_event
668    
669     Creates a new OpenCL::UserEvent object.
670    
671     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateUserEvent.html>
672    
673     =item $buf = $ctx->buffer ($flags, $len)
674    
675     Creates a new OpenCL::Buffer object with the given flags and octet-size.
676    
677     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateBuffer.html>
678    
679     =item $buf = $ctx->buffer_sv ($flags, $data)
680    
681     Creates a new OpenCL::Buffer object and initialise it with the given data values.
682    
683 root 1.18 =item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef)
684 root 1.5
685     Creates a new OpenCL::Image2D object and optionally initialises it with the given data values.
686    
687     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateImage2D.html>
688    
689 root 1.18 =item $img = $ctx->image3d ($flags, $channel_order, $channel_type, $width, $height, $depth, $row_pitch = 0, $slice_pitch = 0, $data = undef)
690 root 1.5
691     Creates a new OpenCL::Image3D object and optionally initialises it with the given data values.
692    
693     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateImage3D.html>
694    
695     =item @formats = $ctx->supported_image_formats ($flags, $image_type)
696    
697     Returns a list of matching image formats - each format is an arrayref with
698     two values, $channel_order and $channel_type, in it.
699    
700     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetSupportedImageFormats.html>
701    
702     =item $sampler = $ctx->sampler ($normalized_coords, $addressing_mode, $filter_mode)
703    
704     Creates a new OpenCL::Sampler object.
705    
706     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSampler.html>
707    
708     =item $program = $ctx->program_with_source ($string)
709    
710     Creates a new OpenCL::Program object from the given source code.
711    
712     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateProgramWithSource.html>
713    
714 root 1.20 =item $packed_value = $ctx->info ($name)
715    
716     See C<< $platform->info >> for details.
717    
718     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html>
719    
720     =for gengetinfo begin context
721    
722 root 1.21
723     =item $uint = $context->reference_count
724    
725     Calls C<clGetContextInfo> with C<CL_CONTEXT_REFERENCE_COUNT> and returns the result(s).
726    
727     =item @devices = $context->devices
728    
729     Calls C<clGetContextInfo> with C<CL_CONTEXT_DEVICES> and returns the result(s).
730    
731     =item @property_ints = $context->properties
732    
733     Calls C<clGetContextInfo> with C<CL_CONTEXT_PROPERTIES> and returns the result(s).
734    
735     =item $uint = $context->num_devices
736    
737     Calls C<clGetContextInfo> with C<CL_CONTEXT_NUM_DEVICES> and returns the result(s).
738    
739 root 1.20 =for gengetinfo end context
740    
741 root 1.5 =back
742    
743     =head2 THE OpenCL::Queue CLASS
744    
745     An OpenCL::Queue represents an execution queue for OpenCL. You execute
746     requests by calling their respective C<enqueue_xxx> method and waitinf for
747     it to complete in some way.
748    
749     All the enqueue methods return an event object that can be used to wait
750     for completion, unless the method is called in void context, in which case
751     no event object is created.
752    
753     They also allow you to specify any number of other event objects that this
754     request has to wait for before it starts executing, by simply passing the
755     event objects as extra parameters to the enqueue methods.
756    
757     Queues execute in-order by default, without any parallelism, so in most
758 root 1.6 cases (i.e. you use only one queue) it's not necessary to wait for or
759     create event objects.
760 root 1.5
761     =over 4
762    
763     =item $ev = $queue->enqueue_read_buffer ($buffer, $blocking, $offset, $len, $data, $wait_events...)
764    
765     Reads data from buffer into the given string.
766    
767     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBuffer.html>
768    
769     =item $ev = $queue->enqueue_write_buffer ($buffer, $blocking, $offset, $data, $wait_events...)
770    
771     Writes data to buffer from the given string.
772    
773     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBuffer.html>
774    
775     =item $ev = $queue->enqueue_copy_buffer ($src, $dst, $src_offset, $dst_offset, $len, $wait_events...)
776    
777     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBuffer.html>
778    
779     =item $ev = $queue->enqueue_read_image ($src, $blocking, $x, $y, $z, $width, $height, $depth, $row_pitch, $slice_pitch, $data, $wait_events...)
780    
781     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadImage.html>
782    
783 root 1.17 =item $ev = $queue->enqueue_write_image ($src, $blocking, $x, $y, $z, $width, $height, $depth, $row_pitch, $slice_pitch, $data, $wait_events...)
784 root 1.5
785     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteImage.html>
786    
787 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...)
788 root 1.5
789     Yeah.
790    
791     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBufferRect.html>
792    
793 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...)
794 root 1.5
795     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBufferToImage.html>.
796    
797 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...)
798 root 1.5
799     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyImage.html>
800    
801 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...)
802 root 1.5
803     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyImageToBuffer.html>
804    
805     =item $ev = $queue->enqueue_task ($kernel, $wait_events...)
806    
807     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueTask.html>
808    
809     =item $ev = $queue->enqueue_nd_range_kernel ($kernel, @$global_work_offset, @$global_work_size, @$local_work_size, $wait_events...)
810    
811     Enqueues a kernel execution.
812    
813     @$global_work_size must be specified as a reference to an array of
814     integers specifying the work sizes (element counts).
815    
816     @$global_work_offset must be either C<undef> (in which case all offsets
817     are C<0>), or a reference to an array of work offsets, with the same number
818     of elements as @$global_work_size.
819    
820     @$local_work_size must be either C<undef> (in which case the
821     implementation is supposed to choose good local work sizes), or a
822     reference to an array of local work sizes, with the same number of
823     elements as @$global_work_size.
824    
825     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html>
826    
827     =item $ev = $queue->enqueue_marker
828    
829     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMarker.html>
830    
831     =item $ev = $queue->enqueue_wait_for_events ($wait_events...)
832    
833     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWaitForEvents.html>
834    
835     =item $queue->enqueue_barrier
836    
837     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueBarrier.html>
838    
839     =item $queue->flush
840    
841     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFlush.html>
842    
843     =item $queue->finish
844    
845     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFinish.html>
846    
847 root 1.21 =item $packed_value = $queue->info ($name)
848    
849     See C<< $platform->info >> for details.
850    
851     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetCommandQueueInfo.html>
852    
853     =for gengetinfo begin command_queue
854    
855    
856     =item $ctx = $command_queue->context
857    
858     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_CONTEXT> and returns the result(s).
859    
860     =item $device = $command_queue->device
861    
862     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_DEVICE> and returns the result(s).
863    
864     =item $uint = $command_queue->reference_count
865    
866     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_REFERENCE_COUNT> and returns the result(s).
867    
868     =item $command_queue_properties = $command_queue->properties
869    
870     Calls C<clGetCommandQueueInfo> with C<CL_QUEUE_PROPERTIES> and returns the result(s).
871    
872     =for gengetinfo end command_queue
873    
874 root 1.5 =back
875    
876     =head2 THE OpenCL::Memory CLASS
877    
878     This the superclass of all memory objects - OpenCL::Buffer, OpenCL::Image,
879 root 1.21 OpenCL::Image2D and OpenCL::Image3D.
880 root 1.5
881     =over 4
882    
883     =item $packed_value = $memory->info ($name)
884    
885     See C<< $platform->info >> for details.
886    
887     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetMemObjectInfo.html>
888    
889 root 1.21 =for gengetinfo begin mem
890    
891    
892     =item $mem_object_type = $mem->type
893    
894     Calls C<clGetMemObjectInfo> with C<CL_MEM_TYPE> and returns the result(s).
895    
896     =item $mem_flags = $mem->flags
897    
898     Calls C<clGetMemObjectInfo> with C<CL_MEM_FLAGS> and returns the result(s).
899    
900     =item $int = $mem->size
901    
902     Calls C<clGetMemObjectInfo> with C<CL_MEM_SIZE> and returns the result(s).
903    
904     =item $ptr_value = $mem->host_ptr
905    
906     Calls C<clGetMemObjectInfo> with C<CL_MEM_HOST_PTR> and returns the result(s).
907    
908     =item $uint = $mem->map_count
909    
910     Calls C<clGetMemObjectInfo> with C<CL_MEM_MAP_COUNT> and returns the result(s).
911    
912     =item $uint = $mem->reference_count
913    
914     Calls C<clGetMemObjectInfo> with C<CL_MEM_REFERENCE_COUNT> and returns the result(s).
915    
916     =item $ctx = $mem->context
917    
918     Calls C<clGetMemObjectInfo> with C<CL_MEM_CONTEXT> and returns the result(s).
919    
920     =item $mem = $mem->associated_memobject
921    
922     Calls C<clGetMemObjectInfo> with C<CL_MEM_ASSOCIATED_MEMOBJECT> and returns the result(s).
923    
924     =item $int = $mem->offset
925    
926     Calls C<clGetMemObjectInfo> with C<CL_MEM_OFFSET> and returns the result(s).
927    
928     =for gengetinfo end mem
929    
930 root 1.5 =back
931    
932 root 1.20 =head2 THE OpenCL::Image CLASS
933    
934     This is the superclass of all image objects - OpenCL::Image2D and OpenCL::Image3D.
935    
936     =over 4
937    
938     =item $packed_value = $ev->image_info ($name)
939    
940     See C<< $platform->info >> for details.
941    
942     The reason this method is not called C<info> is that there already is an
943     C<< ->info >> method inherited from C<OpenCL::Memory>.
944    
945     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html>
946    
947 root 1.21 =for gengetinfo begin image
948    
949    
950     =item $int = $image->element_size
951    
952     Calls C<clGetImageInfo> with C<CL_IMAGE_ELEMENT_SIZE> and returns the result(s).
953    
954     =item $int = $image->row_pitch
955    
956     Calls C<clGetImageInfo> with C<CL_IMAGE_ROW_PITCH> and returns the result(s).
957    
958     =item $int = $image->slice_pitch
959    
960     Calls C<clGetImageInfo> with C<CL_IMAGE_SLICE_PITCH> and returns the result(s).
961    
962     =item $int = $image->width
963    
964     Calls C<clGetImageInfo> with C<CL_IMAGE_WIDTH> and returns the result(s).
965    
966     =item $int = $image->height
967    
968     Calls C<clGetImageInfo> with C<CL_IMAGE_HEIGHT> and returns the result(s).
969    
970     =item $int = $image->depth
971    
972     Calls C<clGetImageInfo> with C<CL_IMAGE_DEPTH> and returns the result(s).
973    
974     =for gengetinfo end image
975    
976 root 1.20 =back
977    
978 root 1.5 =head2 THE OpenCL::Sampler CLASS
979    
980     =over 4
981    
982     =item $packed_value = $sampler->info ($name)
983    
984     See C<< $platform->info >> for details.
985    
986     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetSamplerInfo.html>
987    
988 root 1.21 =for gengetinfo begin sampler
989    
990    
991     =item $uint = $sampler->reference_count
992    
993     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_REFERENCE_COUNT> and returns the result(s).
994    
995     =item $ctx = $sampler->context
996    
997     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_CONTEXT> and returns the result(s).
998    
999     =item $addressing_mode = $sampler->normalized_coords
1000    
1001     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_NORMALIZED_COORDS> and returns the result(s).
1002    
1003     =item $filter_mode = $sampler->addressing_mode
1004    
1005     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_ADDRESSING_MODE> and returns the result(s).
1006    
1007     =item $boolean = $sampler->filter_mode
1008    
1009     Calls C<clGetSamplerInfo> with C<CL_SAMPLER_FILTER_MODE> and returns the result(s).
1010    
1011     =for gengetinfo end sampler
1012    
1013 root 1.5 =back
1014    
1015     =head2 THE OpenCL::Program CLASS
1016    
1017     =over 4
1018    
1019     =item $program->build ($device, $options = "")
1020    
1021     Tries to build the program with the givne options.
1022    
1023     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1024    
1025     =item $packed_value = $program->build_info ($device, $name)
1026    
1027     Similar to C<< $platform->info >>, but returns build info for a previous
1028     build attempt for the given device.
1029    
1030     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html>
1031    
1032     =item $kernel = $program->kernel ($function_name)
1033    
1034     Creates an OpenCL::Kernel object out of the named C<__kernel> function in
1035     the program.
1036    
1037     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateKernel.html>
1038    
1039 root 1.21 =for gengetinfo begin program_build
1040    
1041    
1042     =item $build_status = $program->build_status ($device)
1043    
1044     Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_STATUS> and returns the result(s).
1045    
1046     =item $string = $program->build_options ($device)
1047    
1048     Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_OPTIONS> and returns the result(s).
1049    
1050     =item $string = $program->build_log ($device)
1051    
1052     Calls C<clGetProgramBuildInfo> with C<CL_PROGRAM_BUILD_LOG> and returns the result(s).
1053    
1054     =for gengetinfo end program_build
1055    
1056     =item $packed_value = $program->info ($name)
1057    
1058     See C<< $platform->info >> for details.
1059    
1060     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetProgramInfo.html>
1061    
1062     =for gengetinfo begin program
1063    
1064    
1065     =item $uint = $program->reference_count
1066    
1067     Calls C<clGetProgramInfo> with C<CL_PROGRAM_REFERENCE_COUNT> and returns the result(s).
1068    
1069     =item $ctx = $program->context
1070    
1071     Calls C<clGetProgramInfo> with C<CL_PROGRAM_CONTEXT> and returns the result(s).
1072    
1073     =item $uint = $program->num_devices
1074    
1075     Calls C<clGetProgramInfo> with C<CL_PROGRAM_NUM_DEVICES> and returns the result(s).
1076    
1077     =item @devices = $program->devices
1078    
1079     Calls C<clGetProgramInfo> with C<CL_PROGRAM_DEVICES> and returns the result(s).
1080    
1081     =item $string = $program->source
1082    
1083     Calls C<clGetProgramInfo> with C<CL_PROGRAM_SOURCE> and returns the result(s).
1084    
1085     =item @ints = $program->binary_sizes
1086    
1087     Calls C<clGetProgramInfo> with C<CL_PROGRAM_BINARY_SIZES> and returns the result(s).
1088    
1089     =for gengetinfo end program
1090    
1091 root 1.5 =back
1092    
1093     =head2 THE OpenCL::Kernel CLASS
1094    
1095     =over 4
1096    
1097     =item $packed_value = $kernel->info ($name)
1098    
1099     See C<< $platform->info >> for details.
1100    
1101     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelInfo.html>
1102    
1103 root 1.21 =for gengetinfo begin kernel
1104    
1105    
1106     =item $string = $kernel->function_name
1107    
1108     Calls C<clGetKernelInfo> with C<CL_KERNEL_FUNCTION_NAME> and returns the result(s).
1109    
1110     =item $uint = $kernel->num_args
1111    
1112     Calls C<clGetKernelInfo> with C<CL_KERNEL_NUM_ARGS> and returns the result(s).
1113    
1114     =item $uint = $kernel->reference_count
1115    
1116     Calls C<clGetKernelInfo> with C<CL_KERNEL_REFERENCE_COUNT> and returns the result(s).
1117    
1118     =item $ctx = $kernel->context
1119    
1120     Calls C<clGetKernelInfo> with C<CL_KERNEL_CONTEXT> and returns the result(s).
1121    
1122     =item $program = $kernel->program
1123    
1124     Calls C<clGetKernelInfo> with C<CL_KERNEL_PROGRAM> and returns the result(s).
1125    
1126     =for gengetinfo end kernel
1127    
1128 root 1.20 =item $packed_value = $kernel->work_group_info ($device, $name)
1129    
1130     See C<< $platform->info >> for details.
1131    
1132     The reason this method is not called C<info> is that there already is an
1133     C<< ->info >> method.
1134    
1135     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html>
1136    
1137 root 1.21 =for gengetinfo begin kernel_work_group
1138    
1139    
1140     =item $int = $kernel->work_group_size ($device)
1141    
1142     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_WORK_GROUP_SIZE> and returns the result(s).
1143    
1144     =item @ints = $kernel->compile_work_group_size ($device)
1145    
1146     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_COMPILE_WORK_GROUP_SIZE> and returns the result(s).
1147    
1148     =item $ulong = $kernel->local_mem_size ($device)
1149    
1150     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_LOCAL_MEM_SIZE> and returns the result(s).
1151    
1152     =item $int = $kernel->preferred_work_group_size_multiple ($device)
1153    
1154     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE> and returns the result(s).
1155    
1156     =item $ulong = $kernel->private_mem_size ($device)
1157    
1158     Calls C<clGetKernelWorkGroupInfo> with C<CL_KERNEL_PRIVATE_MEM_SIZE> and returns the result(s).
1159    
1160     =for gengetinfo end kernel_work_group
1161    
1162 root 1.5 =item $kernel->set_TYPE ($index, $value)
1163    
1164     This is a family of methods to set the kernel argument with the number C<$index> to the give C<$value>.
1165    
1166     TYPE is one of C<char>, C<uchar>, C<short>, C<ushort>, C<int>, C<uint>,
1167     C<long>, C<ulong>, C<half>, C<float>, C<double>, C<memory>, C<buffer>,
1168     C<image2d>, C<image3d>, C<sampler> or C<event>.
1169    
1170     Chars and integers (including the half type) are specified as integers,
1171     float and double as floating point values, memory/buffer/image2d/image3d
1172     must be an object of that type or C<undef>, and sampler and event must be
1173     objects of that type.
1174    
1175     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetKernelArg.html>
1176    
1177     =back
1178    
1179     =head2 THE OpenCL::Event CLASS
1180    
1181     This is the superclass for all event objects (including OpenCL::UserEvent
1182     objects).
1183    
1184     =over 4
1185    
1186 root 1.21 =item $ev->wait
1187    
1188     Waits for the event to complete.
1189    
1190     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clWaitForEvents.html>
1191    
1192 root 1.5 =item $packed_value = $ev->info ($name)
1193    
1194     See C<< $platform->info >> for details.
1195    
1196     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetEventInfo.html>
1197    
1198 root 1.21 =for gengetinfo begin event
1199    
1200    
1201     =item $queue = $event->command_queue
1202    
1203     Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_QUEUE> and returns the result(s).
1204    
1205     =item $command_type = $event->command_type
1206    
1207     Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_TYPE> and returns the result(s).
1208    
1209     =item $uint = $event->reference_count
1210    
1211     Calls C<clGetEventInfo> with C<CL_EVENT_REFERENCE_COUNT> and returns the result(s).
1212    
1213     =item $uint = $event->command_execution_status
1214    
1215     Calls C<clGetEventInfo> with C<CL_EVENT_COMMAND_EXECUTION_STATUS> and returns the result(s).
1216    
1217     =item $ctx = $event->context
1218    
1219     Calls C<clGetEventInfo> with C<CL_EVENT_CONTEXT> and returns the result(s).
1220    
1221     =for gengetinfo end event
1222    
1223 root 1.20 =item $packed_value = $ev->profiling_info ($name)
1224    
1225     See C<< $platform->info >> for details.
1226    
1227     The reason this method is not called C<info> is that there already is an
1228     C<< ->info >> method.
1229    
1230     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetProfilingInfo.html>
1231    
1232 root 1.21 =for gengetinfo begin profiling
1233    
1234    
1235     =item $ulong = $event->profiling_command_queued
1236    
1237     Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_QUEUED> and returns the result(s).
1238    
1239     =item $ulong = $event->profiling_command_submit
1240    
1241     Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_SUBMIT> and returns the result(s).
1242    
1243     =item $ulong = $event->profiling_command_start
1244    
1245     Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_START> and returns the result(s).
1246    
1247     =item $ulong = $event->profiling_command_end
1248 root 1.5
1249 root 1.21 Calls C<clGetEventProfilingInfo> with C<CL_PROFILING_COMMAND_END> and returns the result(s).
1250 root 1.5
1251 root 1.21 =for gengetinfo end profiling
1252 root 1.5
1253     =back
1254    
1255     =head2 THE OpenCL::UserEvent CLASS
1256    
1257     This is a subclass of OpenCL::Event.
1258 root 1.4
1259 root 1.1 =over 4
1260    
1261 root 1.5 =item $ev->set_status ($execution_status)
1262    
1263     L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetUserEventStatus.html>
1264    
1265     =back
1266    
1267 root 1.1 =cut
1268    
1269     package OpenCL;
1270    
1271 root 1.2 use common::sense;
1272    
1273 root 1.1 BEGIN {
1274 root 1.21 our $VERSION = '0.55';
1275 root 1.1
1276     require XSLoader;
1277     XSLoader::load (__PACKAGE__, $VERSION);
1278 root 1.3
1279 root 1.5 @OpenCL::Buffer::ISA =
1280     @OpenCL::Image::ISA = OpenCL::Memory::;
1281 root 1.3
1282 root 1.5 @OpenCL::Image2D::ISA =
1283     @OpenCL::Image3D::ISA = OpenCL::Image::;
1284    
1285     @OpenCL::UserEvent::ISA = OpenCL::Event::;
1286 root 1.1 }
1287    
1288     1;
1289    
1290     =head1 AUTHOR
1291    
1292     Marc Lehmann <schmorp@schmorp.de>
1293     http://home.schmorp.de/
1294    
1295     =cut
1296