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

# Content
1 =head1 NAME
2
3 OpenCL - Open Computing Language Bindings
4
5 =head1 SYNOPSIS
6
7 use OpenCL;
8
9 =head1 DESCRIPTION
10
11 This is an early release which might be useful, but hasn't seen much testing.
12
13 =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 From a platform and some device(s), you create an OpenCL::Context, which is
24 a very central object in OpenCL: Once you have a context you can create
25 most other objects:
26
27 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
32 OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat
33 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
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
48 The OpenCL spec used to develop this module (1.2 spec was available, but
49 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 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 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 And 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
73 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
76 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
79 Create program objects from your OpenCL source code, then build (compile)
80 the programs for each device you want to run them on.
81
82 Create kernel objects for all kernels you want to use (surprisingly, these
83 are not device-specific).
84
85 Then, to execute stuff, you repeat these steps, possibly resuing or
86 sharing some buffers:
87
88 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
94 Enqueue the kernel execution.
95
96 Enqueue buffer reads for your output buffer to read results.
97
98 =head1 EXAMPLES
99
100 =head2 Enumerate all devices and get contexts for them.
101
102 Best run this once to get a feel for the platforms and devices in your
103 system.
104
105 for my $platform (OpenCL::platforms) {
106 printf "platform: %s\n", $platform->info (OpenCL::PLATFORM_NAME);
107 printf "extensions: %s\n", $platform->info (OpenCL::PLATFORM_EXTENSIONS);
108 for my $device ($platform->devices) {
109 printf "+ device: %s\n", $device->info (OpenCL::DEVICE_NAME);
110 my $ctx = $device->context;
111 # do stuff
112 }
113 }
114
115 =head2 Get a useful context and a command queue.
116
117 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
125 =head2 Print all supported image formats of a context.
126
127 Best run this once for your context, to see whats available and how to
128 gather 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,
139 then 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
151 functions.
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,
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 $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,
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 $ev->wait;
215
216 =head1 DOCUMENTATION
217
218 =head2 BASIC CONVENTIONS
219
220 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 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 =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
236 =item * OpenCL often specifies fixed vector function arguments as short
237 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
241 =item * Structures are often specified by flattening out their components
242 as with short vectors, and returned as arrayrefs.
243
244 =item * When enqueuing commands, the wait list is specified by adding
245 extra arguments to the function - anywhere a C<$wait_events...> argument
246 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 =head2 PERL AND OPENCL TYPES
259
260 This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack
261 format 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
282 The last error returned by a function - it's only valid after an error occured
283 and before calling another OpenCL function.
284
285 =item $str = OpenCL::err2str $errval
286
287 Comverts an error value into a human readable string.
288
289 =item $str = OpenCL::enum2str $enum
290
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 =item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $notify = undef
304
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 =item $ctx = $platform->context_from_type ($properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $notify = undef)
326
327 Tries to create a context. Never worked for me, and you need devices explitly anyway.
328
329 L<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
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 =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
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
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 =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 =back
656
657 =head2 THE OpenCL::Context CLASS
658
659 =over 4
660
661 =item $queue = $ctx->queue ($device, $properties)
662
663 Create a new OpenCL::Queue object from the context and the given device.
664
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 =item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef)
684
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 =item $img = $ctx->image3d ($flags, $channel_order, $channel_type, $width, $height, $depth, $row_pitch = 0, $slice_pitch = 0, $data = undef)
690
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 =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
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 =for gengetinfo end context
740
741 =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 cases (i.e. you use only one queue) it's not necessary to wait for or
759 create event objects.
760
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 =item $ev = $queue->enqueue_write_image ($src, $blocking, $x, $y, $z, $width, $height, $depth, $row_pitch, $slice_pitch, $data, $wait_events...)
784
785 L<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
789 Yeah.
790
791 L<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
795 L<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
799 L<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
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 =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 =back
875
876 =head2 THE OpenCL::Memory CLASS
877
878 This the superclass of all memory objects - OpenCL::Buffer, OpenCL::Image,
879 OpenCL::Image2D and OpenCL::Image3D.
880
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 =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 =back
931
932 =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 =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 =back
977
978 =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 =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 =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 =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 =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 =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 =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 =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 =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 =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 =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 =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 =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 =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
1249 Calls 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
1257 This is a subclass of OpenCL::Event.
1258
1259 =over 4
1260
1261 =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 =cut
1268
1269 package OpenCL;
1270
1271 use common::sense;
1272
1273 BEGIN {
1274 our $VERSION = '0.55';
1275
1276 require XSLoader;
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::;
1286 }
1287
1288 1;
1289
1290 =head1 AUTHOR
1291
1292 Marc Lehmann <schmorp@schmorp.de>
1293 http://home.schmorp.de/
1294
1295 =cut
1296