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

Comparing OpenCL/OpenCL.pm (file contents):
Revision 1.72 by root, Fri May 4 14:49:42 2012 UTC vs.
Revision 1.87 by root, Mon May 7 01:01:33 2012 UTC

28specific device ("compiling and linking"), also binary programs. For each 28specific device ("compiling and linking"), also binary programs. For each
29kernel function in a program you can then create an OpenCL::Kernel object 29kernel function in a program you can then create an OpenCL::Kernel object
30which represents basically a function call with argument values. 30which represents basically a function call with argument values.
31 31
32OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat 32OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat
33memory areas, think arrays or structs) and OpenCL::Image objects (think 2d 33memory areas, think arrays or structs) and OpenCL::Image objects (think 2D
34or 3d array) for bulk data and input and output for kernels. 34or 3D array) for bulk data and input and output for kernels.
35 35
36OpenCL::Sampler objects, which are kind of like texture filter modes in 36OpenCL::Sampler objects, which are kind of like texture filter modes in
37OpenGL. 37OpenGL.
38 38
39OpenCL::Queue objects - command queues, which allow you to submit memory 39OpenCL::Queue objects - command queues, which allow you to submit memory
213 $ev->wait; 213 $ev->wait;
214 214
215=head2 Use the OpenGL module to share a texture between OpenCL and OpenGL and draw some julia 215=head2 Use the OpenGL module to share a texture between OpenCL and OpenGL and draw some julia
216set flight effect. 216set flight effect.
217 217
218This is quite a long example to get you going - you can download it from 218This is quite a long example to get you going - you can also download it
219L<http://cvs.schmorp.de/OpenCL/examples/juliaflight>. 219from L<http://cvs.schmorp.de/OpenCL/examples/juliaflight>.
220 220
221 use OpenGL ":all"; 221 use OpenGL ":all";
222 use OpenCL; 222 use OpenCL;
223 223
224 my $S = $ARGV[0] || 256; # window/texture size, smaller is faster 224 my $S = $ARGV[0] || 256; # window/texture size, smaller is faster
388 388
389=item * When enqueuing commands, if the enqueue method is called in void 389=item * When enqueuing commands, if the enqueue method is called in void
390context, no event is created. In all other contexts an event is returned 390context, no event is created. In all other contexts an event is returned
391by the method. 391by the method.
392 392
393=item * This module expects all functions to return C<CL_SUCCESS>. If any 393=item * This module expects all functions to return C<OpenCL::SUCCESS>. If any
394other status is returned the function will throw an exception, so you 394other status is returned the function will throw an exception, so you
395don't normally have to to any error checking. 395don't normally have to to any error checking.
396 396
397=back 397=back
398
399=head2 CONSTANTS
400
401All C<CL_xxx> constants that this module supports are always available
402in the C<OpenCL> namespace as C<OpenCL::xxx> (i.e. without the C<CL_>
403prefix). Constants which are not defined in the header files used during
404compilation, or otherwise are not available, will have the value C<0> (in
405some cases, this will make them indistinguishable from real constants,
406sorry).
407
408The latest version of this module knows and exports the constants
409listed in L<http://cvs.schmorp.de/OpenCL/constiv.h>.
410
411=head2 OPENCL 1.1 VS. OPENCL 1.2
412
413This module supports both OpenCL version 1.1 and 1.2, although the OpenCL
4141.2 interface hasn't been tested much for lack of availability of an
415actual implementation.
416
417Every function or method in this manual page that interfaces to a
418particular OpenCL function has a link to the its C manual page.
419
420If the link contains a F<1.1>, then this function is an OpenCL 1.1
421function. Most but not all also exist in OpenCL 1.2, and this module
422tries to emulate the missing ones for you, when told to do so at
423compiletime. You can check whether a function was removed in OpenCL 1.2 by
424replacing the F<1.1> component in the URL by F<1.2>.
425
426If the link contains a F<1.2>, then this is a OpenCL 1.2-only
427function. Even if the module was compiled with OpenCL 1.2 header files
428and has an 1.2 OpenCL library, calling such a function on a platform that
429doesn't implement 1.2 causes undefined behaviour, usually a crash (But
430this is not guaranteed).
431
432You can find out whether this module was compiled to prefer 1.1
433functionality by ooking at C<OpenCL::PREFER_1_1> - if it is true, then
4341.1 functions generally are implemented using 1.1 OpenCL functions. If it
435is false, then 1.1 functions missing from 1.2 are emulated by calling 1.2
436fucntions.
437
438This is a somewhat sorry state of affairs, but the Khronos group choose to
439make every release of OpenCL source and binary incompatible with previous
440releases.
398 441
399=head2 PERL AND OPENCL TYPES 442=head2 PERL AND OPENCL TYPES
400 443
401This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack 444This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack
402format equivalents: 445format equivalents:
434OpenCL can generate a number of (potentially) asynchronous events, for 477OpenCL can generate a number of (potentially) asynchronous events, for
435example, after compiling a program, to signal a context-related error or, 478example, after compiling a program, to signal a context-related error or,
436perhaps most important, to signal completion of queued jobs (by setting 479perhaps most important, to signal completion of queued jobs (by setting
437callbacks on OpenCL::Event objects). 480callbacks on OpenCL::Event objects).
438 481
482The OpenCL module converts all these callbacks into events - you can
483still register callbacks, but they are not executed when your OpenCL
484implementation calls the actual callback, but only later. Therefore, none
485of the limitations of OpenCL callbacks apply to the perl implementation:
486it is perfectly safe to make blocking operations from event callbacks, and
487enqueued operations don't need to be flushed.
488
439To facilitate this, this module maintains an event queue - each 489To facilitate this, this module maintains an event queue - each
440time an asynchronous event happens, it is queued, and perl will be 490time an asynchronous event happens, it is queued, and perl will be
441interrupted. This is implemented via the L<Async::Interrupt> module. In 491interrupted. This is implemented via the L<Async::Interrupt> module. In
442addition, this module has L<AnyEvent> support, so it can seamlessly 492addition, this module has L<AnyEvent> support, so it can seamlessly
443integrate itself into many event loops. 493integrate itself into many event loops.
444 494
445Since this module is a bit hard to understand, here are some case examples: 495Since L<Async::Interrupt> is a bit hard to understand, here are some case examples:
446 496
447=head3 Don't use callbacks. 497=head3 Don't use callbacks.
448 498
449When your program never uses any callbacks, then there will never be any 499When your program never uses any callbacks, then there will never be any
450notifications you need to take care of, and therefore no need to worry 500notifications you need to take care of, and therefore no need to worry
547use Async::Interrupt (); 597use Async::Interrupt ();
548 598
549our $POLL_FUNC; # set by XS 599our $POLL_FUNC; # set by XS
550 600
551BEGIN { 601BEGIN {
552 our $VERSION = '0.99'; 602 our $VERSION = '1.01';
553 603
554 require XSLoader; 604 require XSLoader;
555 XSLoader::load (__PACKAGE__, $VERSION); 605 XSLoader::load (__PACKAGE__, $VERSION);
556 606
557 @OpenCL::Platform::ISA = 607 @OpenCL::Platform::ISA =
593The last error returned by a function - it's only valid after an error occured 643The last error returned by a function - it's only valid after an error occured
594and before calling another OpenCL function. 644and before calling another OpenCL function.
595 645
596=item $str = OpenCL::err2str [$errval] 646=item $str = OpenCL::err2str [$errval]
597 647
598Converts an error value into a human readable string. IF no error value is 648Converts an error value into a human readable string. If no error value is
599given, then the last error will be used (as returned by OpenCL::errno). 649given, then the last error will be used (as returned by OpenCL::errno).
650
651The latest version of this module knows the error constants
652listed in L<http://cvs.schmorp.de/OpenCL/errstr.h>.
600 653
601=item $str = OpenCL::enum2str $enum 654=item $str = OpenCL::enum2str $enum
602 655
603Converts most enum values (of parameter names, image format constants, 656Converts most enum values (of parameter names, image format constants,
604object types, addressing and filter modes, command types etc.) into a 657object types, addressing and filter modes, command types etc.) into a
605human readable string. When confronted with some random integer it can be 658human readable string. When confronted with some random integer it can be
606very helpful to pass it through this function to maybe get some readable 659very helpful to pass it through this function to maybe get some readable
607string out of it. 660string out of it.
608 661
662The latest version of this module knows the enumaration constants
663listed in L<http://cvs.schmorp.de/OpenCL/enumstr.h>.
664
609=item @platforms = OpenCL::platforms 665=item @platforms = OpenCL::platforms
610 666
611Returns all available OpenCL::Platform objects. 667Returns all available OpenCL::Platform objects.
612 668
613L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> 669L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html>
614 670
615=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr 671=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr
616 672
617Tries to create a context from a default device and platform type - never worked for me. 673Tries to create a context from a default device and platform type - never worked for me.
674Consider using C<< $platform->context_from_type >> instead.
618 675
619type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU, 676type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU,
620OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. 677OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL.
621 678
622L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> 679L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
623 680
624=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) 681=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr)
625 682
626Create a new OpenCL::Context object using the given device object(s). This 683Create a new OpenCL::Context object using the given device object(s).
627function isn't implemented yet, use C<< $platform->context >> instead. 684Consider using C<< $platform->context >> instead.
628 685
629L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> 686L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html>
630 687
631=item OpenCL::wait_for_events $wait_events... 688=item OpenCL::wait_for_events $wait_events...
632 689
713L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> 770L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
714 771
715=item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr) 772=item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr)
716 773
717Create a new OpenCL::Context object using the given device object(s)- a 774Create a new OpenCL::Context object using the given device object(s)- a
718CL_CONTEXT_PLATFORM property is supplied automatically. 775OpenCL::CONTEXT_PLATFORM property is supplied automatically.
719 776
720L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> 777L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html>
721 778
722=item $packed_value = $platform->info ($name) 779=item $packed_value = $platform->info ($name)
723 780
768=over 4 825=over 4
769 826
770=item $packed_value = $device->info ($name) 827=item $packed_value = $device->info ($name)
771 828
772See C<< $platform->info >> for details. 829See C<< $platform->info >> for details.
830
831type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU,
832OpenCL::DEVICE_TYPE_GPU, OpenCL::DEVICE_TYPE_ACCELERATOR,
833OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL.
834
835fp_config: OpenCL::FP_DENORM, OpenCL::FP_INF_NAN, OpenCL::FP_ROUND_TO_NEAREST,
836OpenCL::FP_ROUND_TO_ZERO, OpenCL::FP_ROUND_TO_INF, OpenCL::FP_FMA,
837OpenCL::FP_SOFT_FLOAT, OpenCL::FP_CORRECTLY_ROUNDED_DIVIDE_SQRT.
838
839mem_cache_type: OpenCL::NONE, OpenCL::READ_ONLY_CACHE, OpenCL::READ_WRITE_CACHE.
840
841local_mem_type: OpenCL::LOCAL, OpenCL::GLOBAL.
842
843exec_capabilities: OpenCL::EXEC_KERNEL, OpenCL::EXEC_NATIVE_KERNEL.
844
845command_queue_properties: OpenCL::QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,
846OpenCL::QUEUE_PROFILING_ENABLE.
847
848partition_properties: OpenCL::DEVICE_PARTITION_EQUALLY,
849OpenCL::DEVICE_PARTITION_BY_COUNTS, OpenCL::DEVICE_PARTITION_BY_COUNTS_LIST_END,
850OpenCL::DEVICE_PARTITION_BY_AFFINITY_DOMAIN.
851
852affinity_domain: OpenCL::DEVICE_AFFINITY_DOMAIN_NUMA,
853OpenCL::DEVICE_AFFINITY_DOMAIN_L4_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L3_CACHE,
854OpenCL::DEVICE_AFFINITY_DOMAIN_L2_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L1_CACHE,
855OpenCL::DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE.
773 856
774L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> 857L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html>
775 858
776=item @devices = $device->sub_devices (\@properties) 859=item @devices = $device->sub_devices (\@properties)
777 860
1157OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555, 1240OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555,
1158OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16, 1241OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16,
1159OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16, 1242OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16,
1160OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT. 1243OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT.
1161 1244
1162
1163type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D, 1245type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D,
1164OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY, 1246OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY,
1165OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY, 1247OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY,
1166OpenCL::MEM_OBJECT_IMAGE1D_BUFFER. 1248OpenCL::MEM_OBJECT_IMAGE1D_BUFFER.
1167 1249
1264 1346
1265Creates a new OpenCL::Program object from the given built-in kernel names. 1347Creates a new OpenCL::Program object from the given built-in kernel names.
1266 1348
1267L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html> 1349L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html>
1268 1350
1351=item $program = $ctx->link_program (\@devices, $options, \@programs, $cb->($program) = undef)
1352
1353Links all (already compiled) program objects specified in C<@programs>
1354together and returns a new OpenCL::Program object with the result.
1355
1356L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clLinkProgram.html>
1357
1269=item $packed_value = $ctx->info ($name) 1358=item $packed_value = $ctx->info ($name)
1270 1359
1271See C<< $platform->info >> for details. 1360See C<< $platform->info >> for details.
1272 1361
1273L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html> 1362L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html>
1335 1424
1336=item $ev = $queue->copy_buffer ($src, $dst, $src_offset, $dst_offset, $len, $wait_events...) 1425=item $ev = $queue->copy_buffer ($src, $dst, $src_offset, $dst_offset, $len, $wait_events...)
1337 1426
1338L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBuffer.html> 1427L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueCopyBuffer.html>
1339 1428
1340=item $ev = $queue->read_buffer_rect (OpenCL::Memory buf, cl_bool blocking, $buf_x, $buf_y, $buf_z, $host_x, $host_y, $host_z, $width, $height, $depth, $buf_row_pitch, $buf_slice_pitch, $host_row_pitch, $host_slice_pitch, $data, $wait_events...) 1429$eue->read_buffer_rect ($buf, cl_bool blocking, $buf_x, $buf_y, $buf_z, $host_x, $host_y, $host_z, $width, $height, $depth, $buf_row_pitch, $buf_slice_pitch, $host_row_pitch, $host_slice_pitch, $data, $wait_events...)
1341 1430
1342http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBufferRect.html 1431http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueReadBufferRect.html
1343 1432
1344=item $ev = $queue->write_buffer_rect (OpenCL::Memory buf, cl_bool blocking, $buf_x, $buf_y, $buf_z, $host_x, $host_y, $host_z, $width, $height, $depth, $buf_row_pitch, $buf_slice_pitch, $host_row_pitch, $host_slice_pitch, $data, $wait_events...) 1433=item $ev = $queue->write_buffer_rect ($buf, $blocking, $buf_y, $host_x, $host_z, $height, $buf_row_pitch, $host_row_pitch, $data, $wait_events...)
1345 1434
1346http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBufferRect.html 1435http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWriteBufferRect.html
1347 1436
1348=item $ev = $queue->copy_buffer_to_image ($src_buffer, $dst_image, $src_offset, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $wait_events...) 1437=item $ev = $queue->copy_buffer_to_image ($src_buffer, $dst_image, $src_offset, $dst_x, $dst_y, $dst_z, $width, $height, $depth, $wait_events...)
1349 1438
1533it. You are not necessarily meant to do it this way, this example just 1622it. You are not necessarily meant to do it this way, this example just
1534shows you the accessors to use :) 1623shows you the accessors to use :)
1535 1624
1536 my $mapped = $queue->map_image ($image, 1, OpenCL::MAP_WRITE); 1625 my $mapped = $queue->map_image ($image, 1, OpenCL::MAP_WRITE);
1537 1626
1538 $mapped->set ($_ * $mapped->row_pitch, pack "C", 5) 1627 $mapped->write ($_ * $mapped->row_pitch, pack "C", 5)
1539 for 0..$image->height; 1628 for 0 .. $mapped->height - 1;
1540 1629
1541 $mapped->unmap;. 1630 $mapped->unmap;.
1542 $mapped->wait; # only needed for out of order queues normally 1631 $mapped->wait; # only needed for out of order queues normally
1543 1632
1544=item $ev = $queue->unmap ($mapped, $wait_events...) 1633=item $ev = $queue->unmap ($mapped, $wait_events...)
1564 1653
1565See C<< $platform->info >> for details. 1654See C<< $platform->info >> for details.
1566 1655
1567L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetMemObjectInfo.html> 1656L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetMemObjectInfo.html>
1568 1657
1658=item $memory->destructor_callback ($cb->())
1659
1660Sets a callback that will be invoked after the memory object is destructed.
1661
1662L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetMemObjectDestructorCallback.html>
1663
1569=for gengetinfo begin mem 1664=for gengetinfo begin mem
1570 1665
1571=item $mem_object_type = $mem->type 1666=item $mem_object_type = $mem->type
1572 1667
1573Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_TYPE> and returns the result. 1668Calls C<clGetMemObjectInfo> with C<OpenCL::MEM_TYPE> and returns the result.
1630=over 4 1725=over 4
1631 1726
1632=item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size) 1727=item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size)
1633 1728
1634Creates an OpenCL::Buffer objects from this buffer and returns it. The 1729Creates an OpenCL::Buffer objects from this buffer and returns it. The
1635C<buffer_create_type> is assumed to be C<CL_BUFFER_CREATE_TYPE_REGION>. 1730C<buffer_create_type> is assumed to be C<OpenCL::BUFFER_CREATE_TYPE_REGION>.
1636 1731
1637L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html> 1732L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html>
1638 1733
1639=back 1734=back
1640 1735
1656L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html> 1751L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html>
1657 1752
1658=item ($channel_order, $channel_data_type) = $image->format 1753=item ($channel_order, $channel_data_type) = $image->format
1659 1754
1660Returns the channel order and type used to create the image by calling 1755Returns the channel order and type used to create the image by calling
1661C<clGetImageInfo> with C<CL_IMAGE_FORMAT>. 1756C<clGetImageInfo> with C<OpenCL::IMAGE_FORMAT>.
1662 1757
1663=for gengetinfo begin image 1758=for gengetinfo begin image
1664 1759
1665=item $int = $image->element_size 1760=item $int = $image->element_size
1666 1761
1766C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>, 1861C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>,
1767C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>, 1862C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>,
1768C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>, 1863C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>,
1769C<-create-library>, C<-enable-link-options>. 1864C<-create-library>, C<-enable-link-options>.
1770 1865
1866build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE,
1867OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS.
1868
1771L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> 1869L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1772 1870
1773=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) 1871=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef)
1774 1872
1775Similar to C<< ->build >>, except it starts a thread, and never fails (you 1873Similar to C<< ->build >>, except it starts a thread, and never fails (you
1776need to check the compilation status form the callback, or by polling). 1874need to check the compilation status form the callback, or by polling).
1777 1875
1778build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE, 1876=item $program->compile (\@devices = undef, $options = "", \%headers = undef, $cb->($program) = undef)
1779OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS. 1877
1878Compiles the given program for the given devices (or all devices if
1879undef). If C<$headers> is given, it must be a hashref with include name =>
1880OpenCL::Program pairs.
1881
1882L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCompileProgram.html>
1780 1883
1781=item $packed_value = $program->build_info ($device, $name) 1884=item $packed_value = $program->build_info ($device, $name)
1782 1885
1783Similar to C<< $platform->info >>, but returns build info for a previous 1886Similar to C<< $platform->info >>, but returns build info for a previous
1784build attempt for the given device. 1887build attempt for the given device.
1785 1888
1889binary_type: OpenCL::PROGRAM_BINARY_TYPE_NONE,
1890OpenCL::PROGRAM_BINARY_TYPE_COMPILED_OBJECT,
1891OpenCL::PROGRAM_BINARY_TYPE_LIBRARY,
1892OpenCL::PROGRAM_BINARY_TYPE_EXECUTABLE.
1893
1786L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html> 1894L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html>
1787 1895
1788=item $kernel = $program->kernel ($function_name) 1896=item $kernel = $program->kernel ($function_name)
1789 1897
1790Creates an OpenCL::Kernel object out of the named C<__kernel> function in 1898Creates an OpenCL::Kernel object out of the named C<__kernel> function in
1809Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result. 1917Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result.
1810 1918
1811=item $string = $program->build_log ($device) 1919=item $string = $program->build_log ($device)
1812 1920
1813Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result. 1921Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result.
1922
1923=item $binary_type = $program->binary_type ($device)
1924
1925Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BINARY_TYPE> and returns the result.
1814 1926
1815=for gengetinfo end program_build 1927=for gengetinfo end program_build
1816 1928
1817=item $packed_value = $program->info ($name) 1929=item $packed_value = $program->info ($name)
1818 1930
1897 2009
1898=item $packed_value = $kernel->work_group_info ($device, $name) 2010=item $packed_value = $kernel->work_group_info ($device, $name)
1899 2011
1900See C<< $platform->info >> for details. 2012See C<< $platform->info >> for details.
1901 2013
1902The reason this method is not called C<info> is that there already is an
1903C<< ->info >> method.
1904
1905L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html> 2014L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html>
1906 2015
1907=for gengetinfo begin kernel_work_group 2016=for gengetinfo begin kernel_work_group
1908 2017
1909=item $int = $kernel->work_group_size ($device) 2018=item $int = $kernel->work_group_size ($device)
1926 2035
1927Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result. 2036Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result.
1928 2037
1929=for gengetinfo end kernel_work_group 2038=for gengetinfo end kernel_work_group
1930 2039
2040=item $packed_value = $kernel->arg_info ($idx, $name)
2041
2042See C<< $platform->info >> for details.
2043
2044L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clGetKernelArgInfo.html>
2045
1931=for gengetinfo begin kernel_arg_info 2046=for gengetinfo begin kernel_arg
1932 2047
2048=item $kernel_arg_address_qualifier = $kernel->arg_address_qualifier ($idx)
2049
2050Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ADDRESS_QUALIFIER> and returns the result.
2051
2052=item $kernel_arg_access_qualifier = $kernel->arg_access_qualifier ($idx)
2053
2054Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ACCESS_QUALIFIER> and returns the result.
2055
2056=item $string = $kernel->arg_type_name ($idx)
2057
2058Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_NAME> and returns the result.
2059
2060=item $kernel_arg_type_qualifier = $kernel->arg_type_qualifier ($idx)
2061
2062Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_QUALIFIER> and returns the result.
2063
2064=item $string = $kernel->arg_name ($idx)
2065
2066Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_NAME> and returns the result.
2067
1933=for gengetinfo end kernel_arg_info 2068=for gengetinfo end kernel_arg
1934 2069
1935=item $kernel->setf ($format, ...) 2070=item $kernel->setf ($format, ...)
1936 2071
1937Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic 2072Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic
1938way to set arguments (and with OpenCL 1.2 it might be rather slow), you 2073way to set arguments (and with OpenCL 1.2 it might be rather slow), you
2210 2345
2211This is a subclass of OpenCL::Mapped, representing mapped images. 2346This is a subclass of OpenCL::Mapped, representing mapped images.
2212 2347
2213=over 4 2348=over 4
2214 2349
2350=item $pixels = $mapped->width
2351
2352=item $pixels = $mapped->height
2353
2354=item $pixels = $mapped->depth
2355
2356Return the width/height/depth of the mapped image region, in pixels.
2357
2215=item $bytes = $mapped->row_pitch 2358=item $bytes = $mapped->row_pitch
2216 2359
2217=item $bytes = $mapped->slice_pitch 2360=item $bytes = $mapped->slice_pitch
2218 2361
2219Return the row or slice pitch of the image that has been mapped. 2362Return the row or slice pitch of the image that has been mapped.
2220 2363
2364=item $bytes = $mapped->element_size
2365
2366Return the size of a single pixel.
2367
2368=item $data = $mapped->get_row ($count, $x=0, $y=0, $z=0)
2369
2370Return C<$count> pixels from the given coordinates. The pixel data must
2371be completely contained within a single row.
2372
2373If C<$count> is C<undef>, then all the remaining pixels in that row are
2374returned.
2375
2376=item $mapped->set_row ($data, $x=0, $y=0, $z=0)
2377
2378Write the given pixel data at the given coordinate. The pixel data must
2379be completely contained within a single row.
2380
2221=back 2381=back
2222
2223 2382
2224=cut 2383=cut
2225 2384
22261; 23851;
2227 2386

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines