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.76 by root, Sat May 5 02:45:38 2012 UTC

434OpenCL can generate a number of (potentially) asynchronous events, for 434OpenCL can generate a number of (potentially) asynchronous events, for
435example, after compiling a program, to signal a context-related error or, 435example, after compiling a program, to signal a context-related error or,
436perhaps most important, to signal completion of queued jobs (by setting 436perhaps most important, to signal completion of queued jobs (by setting
437callbacks on OpenCL::Event objects). 437callbacks on OpenCL::Event objects).
438 438
439The OpenCL module converts all these callbacks into events - you can
440still register callbacks, but they are not executed when your OpenCL
441implementation calls the actual callback, but only later. Therefore, none
442of the limitations of OpenCL callbacks apply to the perl implementation:
443it is perfectly safe to make blocking operations from event callbacks, and
444enqueued operations don't need to be flushed.
445
439To facilitate this, this module maintains an event queue - each 446To facilitate this, this module maintains an event queue - each
440time an asynchronous event happens, it is queued, and perl will be 447time an asynchronous event happens, it is queued, and perl will be
441interrupted. This is implemented via the L<Async::Interrupt> module. In 448interrupted. This is implemented via the L<Async::Interrupt> module. In
442addition, this module has L<AnyEvent> support, so it can seamlessly 449addition, this module has L<AnyEvent> support, so it can seamlessly
443integrate itself into many event loops. 450integrate itself into many event loops.
444 451
445Since this module is a bit hard to understand, here are some case examples: 452Since L<Async::Interrupt> is a bit hard to understand, here are some case examples:
446 453
447=head3 Don't use callbacks. 454=head3 Don't use callbacks.
448 455
449When your program never uses any callbacks, then there will never be any 456When 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 457notifications you need to take care of, and therefore no need to worry
613L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html> 620L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformIDs.html>
614 621
615=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr 622=item $ctx = OpenCL::context_from_type $properties, $type = OpenCL::DEVICE_TYPE_DEFAULT, $callback->($err, $pvt) = $print_stderr
616 623
617Tries to create a context from a default device and platform type - never worked for me. 624Tries to create a context from a default device and platform type - never worked for me.
625Consider using C<< $platform->context_from_type >> instead.
618 626
619type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU, 627type: OpenCL::DEVICE_TYPE_DEFAULT, OpenCL::DEVICE_TYPE_CPU, OpenCL::DEVICE_TYPE_GPU,
620OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL. 628OpenCL::DEVICE_TYPE_ACCELERATOR, OpenCL::DEVICE_TYPE_CUSTOM, OpenCL::DEVICE_TYPE_ALL.
621 629
622L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html> 630L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContextFromType.html>
623 631
624=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr) 632=item $ctx = OpenCL::context $properties, \@devices, $callback->($err, $pvt) = $print_stderr)
625 633
626Create a new OpenCL::Context object using the given device object(s). This 634Create a new OpenCL::Context object using the given device object(s).
627function isn't implemented yet, use C<< $platform->context >> instead. 635Consider using C<< $platform->context >> instead.
628 636
629L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html> 637L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateContext.html>
630 638
631=item OpenCL::wait_for_events $wait_events... 639=item OpenCL::wait_for_events $wait_events...
632 640
1263=item $program = $ctx->program_with_built_in_kernels (\@devices, $kernel_names) 1271=item $program = $ctx->program_with_built_in_kernels (\@devices, $kernel_names)
1264 1272
1265Creates a new OpenCL::Program object from the given built-in kernel names. 1273Creates a new OpenCL::Program object from the given built-in kernel names.
1266 1274
1267L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html> 1275L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html>
1276
1277=item $program = $ctx->link_program (\@devices, $options, \@programs, $cb->($program) = undef)
1278
1279Links all (already compiled) program objects specified in C<@programs>
1280together and returns a new OpenCL::Program object with the result.
1281
1282L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clLinkProgram.html>
1268 1283
1269=item $packed_value = $ctx->info ($name) 1284=item $packed_value = $ctx->info ($name)
1270 1285
1271See C<< $platform->info >> for details. 1286See C<< $platform->info >> for details.
1272 1287
1766C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>, 1781C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>,
1767C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>, 1782C<-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>, 1783C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>,
1769C<-create-library>, C<-enable-link-options>. 1784C<-create-library>, C<-enable-link-options>.
1770 1785
1786build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE,
1787OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS.
1788
1771L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> 1789L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1772 1790
1773=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) 1791=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef)
1774 1792
1775Similar to C<< ->build >>, except it starts a thread, and never fails (you 1793Similar to C<< ->build >>, except it starts a thread, and never fails (you
1776need to check the compilation status form the callback, or by polling). 1794need to check the compilation status form the callback, or by polling).
1777 1795
1778build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE, 1796=item $program->compile (\@devices = undef, $options = "", \%headers = undef, $cb->($program) = undef)
1779OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS. 1797
1798Compiles the given program for the given devices (or all devices if
1799undef). If C<$headers> is given, it must be a hashref with include name =>
1800OpenCL::Program pairs.
1801
1802L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCompileProgram.html>
1780 1803
1781=item $packed_value = $program->build_info ($device, $name) 1804=item $packed_value = $program->build_info ($device, $name)
1782 1805
1783Similar to C<< $platform->info >>, but returns build info for a previous 1806Similar to C<< $platform->info >>, but returns build info for a previous
1784build attempt for the given device. 1807build attempt for the given device.
1897 1920
1898=item $packed_value = $kernel->work_group_info ($device, $name) 1921=item $packed_value = $kernel->work_group_info ($device, $name)
1899 1922
1900See C<< $platform->info >> for details. 1923See C<< $platform->info >> for details.
1901 1924
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> 1925L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html>
1906 1926
1907=for gengetinfo begin kernel_work_group 1927=for gengetinfo begin kernel_work_group
1908 1928
1909=item $int = $kernel->work_group_size ($device) 1929=item $int = $kernel->work_group_size ($device)
1926 1946
1927Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result. 1947Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result.
1928 1948
1929=for gengetinfo end kernel_work_group 1949=for gengetinfo end kernel_work_group
1930 1950
1951=item $packed_value = $kernel->arg_info ($idx, $name)
1952
1953See C<< $platform->info >> for details.
1954
1955L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clGetKernelArgInfo.html>
1956
1931=for gengetinfo begin kernel_arg_info 1957=for gengetinfo begin kernel_arg
1932 1958
1959=item $kernel_arg_address_qualifier = $kernel->arg_address_qualifier ($idx)
1960
1961Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ADDRESS_QUALIFIER> and returns the result.
1962
1963=item $kernel_arg_access_qualifier = $kernel->arg_access_qualifier ($idx)
1964
1965Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ACCESS_QUALIFIER> and returns the result.
1966
1967=item $string = $kernel->arg_type_name ($idx)
1968
1969Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_NAME> and returns the result.
1970
1971=item $kernel_arg_type_qualifier = $kernel->arg_type_qualifier ($idx)
1972
1973Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_QUALIFIER> and returns the result.
1974
1975=item $string = $kernel->arg_name ($idx)
1976
1977Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_NAME> and returns the result.
1978
1933=for gengetinfo end kernel_arg_info 1979=for gengetinfo end kernel_arg
1934 1980
1935=item $kernel->setf ($format, ...) 1981=item $kernel->setf ($format, ...)
1936 1982
1937Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic 1983Sets 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 1984way to set arguments (and with OpenCL 1.2 it might be rather slow), you

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines