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

Comparing OpenCL/OpenCL.pm (file contents):
Revision 1.71 by root, Fri May 4 14:29:35 2012 UTC vs.
Revision 1.75 by root, Sat May 5 02:30:27 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
1264 1271
1265Creates a new OpenCL::Program object from the given built-in kernel names. 1272Creates a new OpenCL::Program object from the given built-in kernel names.
1266 1273
1267L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html> 1274L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html>
1268 1275
1276=item $program = $ctx->link_program (\@devices, $options, \@programs, $cb->($program) = undef)
1277
1278Links all (already compiled) program objects specified in C<@programs>
1279together and returns a new OpenCL::Program object with the result.
1280
1281L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clLinkProgram.html>
1282
1269=item $packed_value = $ctx->info ($name) 1283=item $packed_value = $ctx->info ($name)
1270 1284
1271See C<< $platform->info >> for details. 1285See C<< $platform->info >> for details.
1272 1286
1273L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html> 1287L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetContextInfo.html>
1766C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>, 1780C<-cl-mad-enable>, C<-cl-no-signed-zeros>, C<-cl-unsafe-math-optimizations>,
1767C<-cl-finite-math-only>, C<-cl-fast-relaxed-math>, 1781C<-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>, 1782C<-w>, C<-Werror>, C<-cl-std=CL1.1/CL1.2>, C<-cl-kernel-arg-info>,
1769C<-create-library>, C<-enable-link-options>. 1783C<-create-library>, C<-enable-link-options>.
1770 1784
1785build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE,
1786OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS.
1787
1771L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html> 1788L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clBuildProgram.html>
1772 1789
1773=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef) 1790=item $program->build_async (\@devices = undef, $options = "", $cb->($program) = undef)
1774 1791
1775Similar to C<< ->build >>, except it starts a thread, and never fails (you 1792Similar to C<< ->build >>, except it starts a thread, and never fails (you
1776need to check the compilation status form the callback, or by polling). 1793need to check the compilation status form the callback, or by polling).
1777 1794
1795=item $program->compile (\@devices = undef, $options = "", \%headers = undef, $cb->($program) = undef)
1796
1797Compiles the given program for the given devices (or all devices if
1798undef). If C<$headers> is given, it must be a hashref with include name =>
1799OpenCL::Program pairs.
1800
1801L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCompileProgram.html>
1802
1778=item $packed_value = $program->build_info ($device, $name) 1803=item $packed_value = $program->build_info ($device, $name)
1779 1804
1780Similar to C<< $platform->info >>, but returns build info for a previous 1805Similar to C<< $platform->info >>, but returns build info for a previous
1781build attempt for the given device. 1806build attempt for the given device.
1782 1807
1798=for gengetinfo begin program_build 1823=for gengetinfo begin program_build
1799 1824
1800=item $build_status = $program->build_status ($device) 1825=item $build_status = $program->build_status ($device)
1801 1826
1802Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_STATUS> and returns the result. 1827Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_STATUS> and returns the result.
1803
1804build_status: OpenCL::BUILD_SUCCESS, OpenCL::BUILD_NONE,
1805OpenCL::BUILD_ERROR, OpenCL::BUILD_IN_PROGRESS.
1806 1828
1807=item $string = $program->build_options ($device) 1829=item $string = $program->build_options ($device)
1808 1830
1809Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result. 1831Calls C<clGetProgramBuildInfo> with C<OpenCL::PROGRAM_BUILD_OPTIONS> and returns the result.
1810 1832
1897 1919
1898=item $packed_value = $kernel->work_group_info ($device, $name) 1920=item $packed_value = $kernel->work_group_info ($device, $name)
1899 1921
1900See C<< $platform->info >> for details. 1922See C<< $platform->info >> for details.
1901 1923
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> 1924L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetKernelWorkGroupInfo.html>
1906 1925
1907=for gengetinfo begin kernel_work_group 1926=for gengetinfo begin kernel_work_group
1908 1927
1909=item $int = $kernel->work_group_size ($device) 1928=item $int = $kernel->work_group_size ($device)
1925=item $ulong = $kernel->private_mem_size ($device) 1944=item $ulong = $kernel->private_mem_size ($device)
1926 1945
1927Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result. 1946Calls C<clGetKernelWorkGroupInfo> with C<OpenCL::KERNEL_PRIVATE_MEM_SIZE> and returns the result.
1928 1947
1929=for gengetinfo end kernel_work_group 1948=for gengetinfo end kernel_work_group
1949
1950=item $packed_value = $kernel->arg_info ($idx, $name)
1951
1952See C<< $platform->info >> for details.
1953
1954L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clGetKernelArgInfo.html>
1955
1956=for gengetinfo begin kernel_arg
1957
1958=item $kernel_arg_address_qualifier = $kernel->arg_address_qualifier ($idx)
1959
1960Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ADDRESS_QUALIFIER> and returns the result.
1961
1962=item $kernel_arg_access_qualifier = $kernel->arg_access_qualifier ($idx)
1963
1964Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_ACCESS_QUALIFIER> and returns the result.
1965
1966=item $string = $kernel->arg_type_name ($idx)
1967
1968Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_NAME> and returns the result.
1969
1970=item $kernel_arg_type_qualifier = $kernel->arg_type_qualifier ($idx)
1971
1972Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_TYPE_QUALIFIER> and returns the result.
1973
1974=item $string = $kernel->arg_name ($idx)
1975
1976Calls C<clGetKernelArgInfo> with C<OpenCL::KERNEL_ARG_NAME> and returns the result.
1977
1978=for gengetinfo end kernel_arg
1930 1979
1931=item $kernel->setf ($format, ...) 1980=item $kernel->setf ($format, ...)
1932 1981
1933Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic 1982Sets the arguments of a kernel. Since OpenCL 1.1 doesn't have a generic
1934way to set arguments (and with OpenCL 1.2 it might be rather slow), you 1983way to set arguments (and with OpenCL 1.2 it might be rather slow), you

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines