… | |
… | |
28 | specific device ("compiling and linking"), also binary programs. For each |
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 |
29 | kernel function in a program you can then create an OpenCL::Kernel object |
30 | which represents basically a function call with argument values. |
30 | which represents basically a function call with argument values. |
31 | |
31 | |
32 | OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat |
32 | OpenCL::Memory objects of various flavours: OpenCL::Buffer objects (flat |
33 | memory areas, think arrays or structs) and OpenCL::Image objects (think 2d |
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. |
34 | or 3D array) for bulk data and input and output for kernels. |
35 | |
35 | |
36 | OpenCL::Sampler objects, which are kind of like texture filter modes in |
36 | OpenCL::Sampler objects, which are kind of like texture filter modes in |
37 | OpenGL. |
37 | OpenGL. |
38 | |
38 | |
39 | OpenCL::Queue objects - command queues, which allow you to submit memory |
39 | OpenCL::Queue objects - command queues, which allow you to submit memory |
… | |
… | |
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 |
390 | context, no event is created. In all other contexts an event is returned |
390 | context, no event is created. In all other contexts an event is returned |
391 | by the method. |
391 | by 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 |
394 | other status is returned the function will throw an exception, so you |
394 | other status is returned the function will throw an exception, so you |
395 | don't normally have to to any error checking. |
395 | don't normally have to to any error checking. |
396 | |
396 | |
397 | =back |
397 | =back |
|
|
398 | |
|
|
399 | =head2 CONSTANTS |
|
|
400 | |
|
|
401 | All C<CL_xxx> constants that this module supports are always available |
|
|
402 | in the C<OpenCL> namespace as C<OpenCL::xxx> (i.e. without the C<CL_> |
|
|
403 | prefix). Constants which are not defined in the heaer files used during |
|
|
404 | compilation, or otherwise are not available, will have the value C<-1>. |
|
|
405 | |
|
|
406 | =head2 OPENCL 1.1 VS. OPENCL 1.2 |
|
|
407 | |
|
|
408 | This module supports both OpenCL version 1.1 and 1.2, although the OpenCL |
|
|
409 | 1.2 interface hasn't been tested much for lack of availability of an |
|
|
410 | actual implementation. |
|
|
411 | |
|
|
412 | Every function or method in this manual page that interfaces to a |
|
|
413 | particular OpenCL function has a link to the its C manual page. |
|
|
414 | |
|
|
415 | If the link contains a F<1.1>, then this function is an OpenCL 1.1 |
|
|
416 | function. Most but not all also exist in OpenCL 1.2, and this module |
|
|
417 | tries to emulate the missing ones for you, when told to do so at |
|
|
418 | compiletime. You cna check whether a function was removed in OpenCL 1.2 by |
|
|
419 | replacing the F<1.1> component in the URL by F<1.2>. |
|
|
420 | |
|
|
421 | If the link contains a F<1.2>, then this is a OpenCL 1.2-only |
|
|
422 | function. Even if the module was compiled with OpenCL 1.2 header files |
|
|
423 | and has an 1.2 OpenCL library, calling such a function on a platform that |
|
|
424 | doesn't implement 1.2 causes undefined behaviour, usually a crash (But |
|
|
425 | this is not guaranteed). |
|
|
426 | |
|
|
427 | You can find out whether this module was compiled to prefer 1.1 |
|
|
428 | functionality by ooking at C<OpenCL::PREFER_1_1> - if it is true, then |
|
|
429 | 1.1 functions generally are implemented using 1.1 OpenCL functions. If it |
|
|
430 | is false, then 1.1 functions missing from 1.2 are emulated by calling 1.2 |
|
|
431 | fucntions. |
|
|
432 | |
|
|
433 | This is a somewhat sorry state of affairs, but the Khronos group choose to |
|
|
434 | make every release of OpenCL source and binary incompatible with previous |
|
|
435 | releases. |
398 | |
436 | |
399 | =head2 PERL AND OPENCL TYPES |
437 | =head2 PERL AND OPENCL TYPES |
400 | |
438 | |
401 | This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack |
439 | This handy(?) table lists OpenCL types and their perl, PDL and pack/unpack |
402 | format equivalents: |
440 | format equivalents: |
… | |
… | |
434 | OpenCL can generate a number of (potentially) asynchronous events, for |
472 | OpenCL can generate a number of (potentially) asynchronous events, for |
435 | example, after compiling a program, to signal a context-related error or, |
473 | example, after compiling a program, to signal a context-related error or, |
436 | perhaps most important, to signal completion of queued jobs (by setting |
474 | perhaps most important, to signal completion of queued jobs (by setting |
437 | callbacks on OpenCL::Event objects). |
475 | callbacks on OpenCL::Event objects). |
438 | |
476 | |
|
|
477 | The OpenCL module converts all these callbacks into events - you can |
|
|
478 | still register callbacks, but they are not executed when your OpenCL |
|
|
479 | implementation calls the actual callback, but only later. Therefore, none |
|
|
480 | of the limitations of OpenCL callbacks apply to the perl implementation: |
|
|
481 | it is perfectly safe to make blocking operations from event callbacks, and |
|
|
482 | enqueued operations don't need to be flushed. |
|
|
483 | |
439 | To facilitate this, this module maintains an event queue - each |
484 | To facilitate this, this module maintains an event queue - each |
440 | time an asynchronous event happens, it is queued, and perl will be |
485 | time an asynchronous event happens, it is queued, and perl will be |
441 | interrupted. This is implemented via the L<Async::Interrupt> module. In |
486 | interrupted. This is implemented via the L<Async::Interrupt> module. In |
442 | addition, this module has L<AnyEvent> support, so it can seamlessly |
487 | addition, this module has L<AnyEvent> support, so it can seamlessly |
443 | integrate itself into many event loops. |
488 | integrate itself into many event loops. |
444 | |
489 | |
445 | Since this module is a bit hard to understand, here are some case examples: |
490 | Since L<Async::Interrupt> is a bit hard to understand, here are some case examples: |
446 | |
491 | |
447 | =head3 Don't use callbacks. |
492 | =head3 Don't use callbacks. |
448 | |
493 | |
449 | When your program never uses any callbacks, then there will never be any |
494 | When your program never uses any callbacks, then there will never be any |
450 | notifications you need to take care of, and therefore no need to worry |
495 | notifications you need to take care of, and therefore no need to worry |
… | |
… | |
613 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> |
658 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> |
614 | |
659 | |
615 | =item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr |
660 | =item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr |
616 | |
661 | |
617 | Tries to create a context from a default device and platform type - never worked for me. |
662 | Tries to create a context from a default device and platform type - never worked for me. |
|
|
663 | Consider using C<< $platform->context_from_type >> instead. |
618 | |
664 | |
619 | type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU, |
665 | type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU, |
620 | OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. |
666 | OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. |
621 | |
667 | |
622 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
668 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
623 | |
669 | |
624 | =item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
670 | =item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
625 | |
671 | |
626 | Create a new OpenCL::Context object using the given device object(s). This |
672 | Create a new OpenCL::Context object using the given device object(s). |
627 | function isn't implemented yet, use C<< $platform->context >> instead. |
673 | Consider using C<< $platform->context >> instead. |
628 | |
674 | |
629 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
675 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
630 | |
676 | |
631 | =item OpenCL::wait_for_events $wait_events... |
677 | =item OpenCL::wait_for_events $wait_events... |
632 | |
678 | |
… | |
… | |
713 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
759 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> |
714 | |
760 | |
715 | =item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
761 | =item $ctx = $platform->context ($properties, \@devices, $callback->($err, $pvt) = $print_stderr) |
716 | |
762 | |
717 | Create a new OpenCL::Context object using the given device object(s)- a |
763 | Create a new OpenCL::Context object using the given device object(s)- a |
718 | CL_CONTEXT_PLATFORM property is supplied automatically. |
764 | OpenCL::CONTEXT_PLATFORM property is supplied automatically. |
719 | |
765 | |
720 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
766 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> |
721 | |
767 | |
722 | =item $packed_value = $platform->info ($name) |
768 | =item $packed_value = $platform->info ($name) |
723 | |
769 | |
… | |
… | |
768 | =over 4 |
814 | =over 4 |
769 | |
815 | |
770 | =item $packed_value = $device->info ($name) |
816 | =item $packed_value = $device->info ($name) |
771 | |
817 | |
772 | See C<< $platform->info >> for details. |
818 | See C<< $platform->info >> for details. |
|
|
819 | |
|
|
820 | type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, |
|
|
821 | OpenCL::DEVICE_TYPE_GPU, OpenCL::DEVICE_TYPE_ACCELERATOR, |
|
|
822 | OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. |
|
|
823 | |
|
|
824 | fp_config: OpenCL::FP_DENORM, OpenCL::FP_INF_NAN, OpenCL::FP_ROUND_TO_NEAREST, |
|
|
825 | OpenCL::FP_ROUND_TO_ZERO, OpenCL::FP_ROUND_TO_INF, OpenCL::FP_FMA, |
|
|
826 | OpenCL::FP_SOFT_FLOAT, OpenCL::FP_CORRECTLY_ROUNDED_DIVIDE_SQRT. |
|
|
827 | |
|
|
828 | mem_cache_type: OpenCL::NONE, OpenCL::READ_ONLY_CACHE, OpenCL::READ_WRITE_CACHE. |
|
|
829 | |
|
|
830 | local_mem_type: OpenCL::LOCAL, OpenCL::GLOBAL. |
|
|
831 | |
|
|
832 | exec_capabilities: OpenCL::EXEC_KERNEL, OpenCL::EXEC_NATIVE_KERNEL. |
|
|
833 | |
|
|
834 | command_queue_properties: OpenCL::QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, |
|
|
835 | OpenCL::QUEUE_PROFILING_ENABLE. |
|
|
836 | |
|
|
837 | partition_properties: OpenCL::DEVICE_PARTITION_EQUALLY, |
|
|
838 | OpenCL::DEVICE_PARTITION_BY_COUNTS, OpenCL::DEVICE_PARTITION_BY_COUNTS_LIST_END, |
|
|
839 | OpenCL::DEVICE_PARTITION_BY_AFFINITY_DOMAIN. |
|
|
840 | |
|
|
841 | affinity_domain: OpenCL::DEVICE_AFFINITY_DOMAIN_NUMA, |
|
|
842 | OpenCL::DEVICE_AFFINITY_DOMAIN_L4_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L3_CACHE, |
|
|
843 | OpenCL::DEVICE_AFFINITY_DOMAIN_L2_CACHE, OpenCL::DEVICE_AFFINITY_DOMAIN_L1_CACHE, |
|
|
844 | OpenCL::DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE. |
773 | |
845 | |
774 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> |
846 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html> |
775 | |
847 | |
776 | =item @devices = $device->sub_devices (\@properties) |
848 | =item @devices = $device->sub_devices (\@properties) |
777 | |
849 | |
… | |
… | |
1157 | OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555, |
1229 | OpenCL::UNORM_INT16, OpenCL::UNORM_SHORT_565, OpenCL::UNORM_SHORT_555, |
1158 | OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16, |
1230 | OpenCL::UNORM_INT_101010, OpenCL::SIGNED_INT8, OpenCL::SIGNED_INT16, |
1159 | OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16, |
1231 | OpenCL::SIGNED_INT32, OpenCL::UNSIGNED_INT8, OpenCL::UNSIGNED_INT16, |
1160 | OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT. |
1232 | OpenCL::UNSIGNED_INT32, OpenCL::HALF_FLOAT, OpenCL::FLOAT. |
1161 | |
1233 | |
1162 | |
|
|
1163 | type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D, |
1234 | type: OpenCL::MEM_OBJECT_BUFFER, OpenCL::MEM_OBJECT_IMAGE2D, |
1164 | OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY, |
1235 | OpenCL::MEM_OBJECT_IMAGE3D, OpenCL::MEM_OBJECT_IMAGE2D_ARRAY, |
1165 | OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY, |
1236 | OpenCL::MEM_OBJECT_IMAGE1D, OpenCL::MEM_OBJECT_IMAGE1D_ARRAY, |
1166 | OpenCL::MEM_OBJECT_IMAGE1D_BUFFER. |
1237 | OpenCL::MEM_OBJECT_IMAGE1D_BUFFER. |
1167 | |
1238 | |
… | |
… | |
1264 | |
1335 | |
1265 | Creates a new OpenCL::Program object from the given built-in kernel names. |
1336 | Creates a new OpenCL::Program object from the given built-in kernel names. |
1266 | |
1337 | |
1267 | L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html> |
1338 | L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html> |
1268 | |
1339 | |
|
|
1340 | =item $program = $ctx->link_program (\@devices, $options, \@programs, $cb->($program) = undef) |
|
|
1341 | |
|
|
1342 | Links all (already compiled) program objects specified in C<@programs> |
|
|
1343 | together and returns a new OpenCL::Program object with the result. |
|
|
1344 | |
|
|
1345 | L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clLinkProgram.html> |
|
|
1346 | |
1269 | =item $packed_value = $ctx->info ($name) |
1347 | =item $packed_value = $ctx->info ($name) |
1270 | |
1348 | |
1271 | See C<< $platform->info >> for details. |
1349 | See C<< $platform->info >> for details. |
1272 | |
1350 | |
1273 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html> |
1351 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html> |
… | |
… | |
1630 | =over 4 |
1708 | =over 4 |
1631 | |
1709 | |
1632 | =item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size) |
1710 | =item $subbuf = $buf_obj->sub_buffer_region ($flags, $origin, $size) |
1633 | |
1711 | |
1634 | Creates an OpenCL::Buffer objects from this buffer and returns it. The |
1712 | Creates an OpenCL::Buffer objects from this buffer and returns it. The |
1635 | C<buffer_create_type> is assumed to be C<CL_BUFFER_CREATE_TYPE_REGION>. |
1713 | C<buffer_create_type> is assumed to be C<OpenCL::BUFFER_CREATE_TYPE_REGION>. |
1636 | |
1714 | |
1637 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html> |
1715 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateSubBuffer.html> |
1638 | |
1716 | |
1639 | =back |
1717 | =back |
1640 | |
1718 | |
… | |
… | |
1656 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html> |
1734 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetImageInfo.html> |
1657 | |
1735 | |
1658 | =item ($channel_order, $channel_data_type) = $image->format |
1736 | =item ($channel_order, $channel_data_type) = $image->format |
1659 | |
1737 | |
1660 | Returns the channel order and type used to create the image by calling |
1738 | Returns the channel order and type used to create the image by calling |
1661 | C<clGetImageInfo> with C<CL_IMAGE_FORMAT>. |
1739 | C<clGetImageInfo> with C<OpenCL::IMAGE_FORMAT>. |
1662 | |
1740 | |
1663 | =for gengetinfo begin image |
1741 | =for gengetinfo begin image |
1664 | |
1742 | |
1665 | =item $int = $image->element_size |
1743 | =item $int = $image->element_size |
1666 | |
1744 | |
… | |
… | |
1766 | C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>, |
1844 | C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>, |
1767 | C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>, |
1845 | C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>, |
1768 | C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>, |
1846 | C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>, |
1769 | C<-create-library>, C<-enable-link-options>. |
1847 | C<-create-library>, C<-enable-link-options>. |
1770 | |
1848 | |
|
|
1849 | build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE, |
|
|
1850 | OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS. |
|
|
1851 | |
1771 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> |
1852 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> |
1772 | |
1853 | |
1773 | =item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) |
1854 | =item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) |
1774 | |
1855 | |
1775 | Similar to C<< ->build >>, except it starts a thread, and never fails (you |
1856 | Similar to C<< ->build >>, except it starts a thread, and never fails (you |
1776 | need to check the compilation status form the callback, or by polling). |
1857 | need to check the compilation status form the callback, or by polling). |
1777 | |
1858 | |
1778 | build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE, |
1859 | =item $program->compile (\@devices = undef, $options = "", \%headers = undef, $cb->($program) = undef) |
1779 | OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS. |
1860 | |
|
|
1861 | Compiles the given program for the given devices (or all devices if |
|
|
1862 | undef). If C<$headers> is given, it must be a hashref with include name => |
|
|
1863 | OpenCL::Program pairs. |
|
|
1864 | |
|
|
1865 | L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCompileProgram.html> |
1780 | |
1866 | |
1781 | =item $packed_value = $program->build_info ($device, $name) |
1867 | =item $packed_value = $program->build_info ($device, $name) |
1782 | |
1868 | |
1783 | Similar to C<< $platform->info >>, but returns build info for a previous |
1869 | Similar to C<< $platform->info >>, but returns build info for a previous |
1784 | build attempt for the given device. |
1870 | build attempt for the given device. |
1785 | |
1871 | |
|
|
1872 | binary_type: OpenCL::PROGRAM_BINARY_TYPE_NONE, |
|
|
1873 | OpenCL::PROGRAM_BINARY_TYPE_COMPILED_OBJECT, |
|
|
1874 | OpenCL::PROGRAM_BINARY_TYPE_LIBRARY, |
|
|
1875 | OpenCL::PROGRAM_BINARY_TYPE_EXECUTABLE. |
|
|
1876 | |
1786 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html> |
1877 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetBuildInfo.html> |
1787 | |
1878 | |
1788 | =item $kernel = $program->kernel ($function_name) |
1879 | =item $kernel = $program->kernel ($function_name) |
1789 | |
1880 | |
1790 | Creates an OpenCL::Kernel object out of the named C<__kernel> function in |
1881 | Creates an OpenCL::Kernel object out of the named C<__kernel> function in |
… | |
… | |
1809 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result. |
1900 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result. |
1810 | |
1901 | |
1811 | =item $string = $program->build_log ($device) |
1902 | =item $string = $program->build_log ($device) |
1812 | |
1903 | |
1813 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result. |
1904 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_LOG> and returns the result. |
|
|
1905 | |
|
|
1906 | =item $binary_type = $program->binary_type ($device) |
|
|
1907 | |
|
|
1908 | Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BINARY_TYPE> and returns the result. |
1814 | |
1909 | |
1815 | =for gengetinfo end program_build |
1910 | =for gengetinfo end program_build |
1816 | |
1911 | |
1817 | =item $packed_value = $program->info ($name) |
1912 | =item $packed_value = $program->info ($name) |
1818 | |
1913 | |
… | |
… | |
1897 | |
1992 | |
1898 | =item $packed_value = $kernel->work_group_info ($device, $name) |
1993 | =item $packed_value = $kernel->work_group_info ($device, $name) |
1899 | |
1994 | |
1900 | See C<< $platform->info >> for details. |
1995 | See C<< $platform->info >> for details. |
1901 | |
1996 | |
1902 | The reason this method is not called C<info> is that there already is an |
|
|
1903 | C<< ->info >> method. |
|
|
1904 | |
|
|
1905 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html> |
1997 | L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html> |
1906 | |
1998 | |
1907 | =for gengetinfo begin kernel_work_group |
1999 | =for gengetinfo begin kernel_work_group |
1908 | |
2000 | |
1909 | =item $int = $kernel->work_group_size ($device) |
2001 | =item $int = $kernel->work_group_size ($device) |
… | |
… | |
1926 | |
2018 | |
1927 | Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result. |
2019 | Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result. |
1928 | |
2020 | |
1929 | =for gengetinfo end kernel_work_group |
2021 | =for gengetinfo end kernel_work_group |
1930 | |
2022 | |
|
|
2023 | =item $packed_value = $kernel->arg_info ($idx, $name) |
|
|
2024 | |
|
|
2025 | See C<< $platform->info >> for details. |
|
|
2026 | |
|
|
2027 | L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clGetKernelArgInfo.html> |
|
|
2028 | |
1931 | =for gengetinfo begin kernel_arg_info |
2029 | =for gengetinfo begin kernel_arg |
1932 | |
2030 | |
|
|
2031 | =item $kernel_arg_address_qualifier = $kernel->arg_address_qualifier ($idx) |
|
|
2032 | |
|
|
2033 | Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ADDRESS_QUALIFIER> and returns the result. |
|
|
2034 | |
|
|
2035 | =item $kernel_arg_access_qualifier = $kernel->arg_access_qualifier ($idx) |
|
|
2036 | |
|
|
2037 | Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ACCESS_QUALIFIER> and returns the result. |
|
|
2038 | |
|
|
2039 | =item $string = $kernel->arg_type_name ($idx) |
|
|
2040 | |
|
|
2041 | Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_NAME> and returns the result. |
|
|
2042 | |
|
|
2043 | =item $kernel_arg_type_qualifier = $kernel->arg_type_qualifier ($idx) |
|
|
2044 | |
|
|
2045 | Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_QUALIFIER> and returns the result. |
|
|
2046 | |
|
|
2047 | =item $string = $kernel->arg_name ($idx) |
|
|
2048 | |
|
|
2049 | Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_NAME> and returns the result. |
|
|
2050 | |
1933 | =for gengetinfo end kernel_arg_info |
2051 | =for gengetinfo end kernel_arg |
1934 | |
2052 | |
1935 | =item $kernel->setf ($format, ...) |
2053 | =item $kernel->setf ($format, ...) |
1936 | |
2054 | |
1937 | Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic |
2055 | Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic |
1938 | way to set arguments (and with OpenCL 1.2 it might be rather slow), you |
2056 | way to set arguments (and with OpenCL 1.2 it might be rather slow), you |