ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/OpenCL/OpenCL.pm
(Generate patch)

Comparing OpenCL/OpenCL.pm (file contents):
Revision 1.1 by root, Tue Nov 15 06:50:30 2011 UTC vs.
Revision 1.21 by root, Sun Nov 20 10:21:27 2011 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines