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

Comparing OpenCL/OpenCL.pm (file contents):
Revision 1.41 by root, Fri Apr 20 08:57:09 2012 UTC vs.
Revision 1.50 by root, Tue Apr 24 13:30:49 2012 UTC

160 '; 160 ';
161 161
162 my $prog = $ctx->program_with_source ($src); 162 my $prog = $ctx->program_with_source ($src);
163 163
164 # build croaks on compile errors, so catch it and print the compile errors 164 # build croaks on compile errors, so catch it and print the compile errors
165 eval { $prog->build ($dev); 1 } 165 eval { $prog->build ($dev, "-cl-fast-relaxed-math"); 1 }
166 or die $prog->build_log; 166 or die $prog->build_log;
167 167
168 my $kernel = $prog->kernel ("squareit"); 168 my $kernel = $prog->kernel ("squareit");
169 169
170=head2 Create some input and output float buffers, then call the 170=head2 Create some input and output float buffers, then call the
336=item * Structures are often specified by flattening out their components 336=item * Structures are often specified by flattening out their components
337as with short vectors, and returned as arrayrefs. 337as with short vectors, and returned as arrayrefs.
338 338
339=item * When enqueuing commands, the wait list is specified by adding 339=item * When enqueuing commands, the wait list is specified by adding
340extra arguments to the function - anywhere a C<$wait_events...> argument 340extra arguments to the function - anywhere a C<$wait_events...> argument
341is documented this can be any number of event objects. 341is documented this can be any number of event objects. As an extsnion
342implemented by this module, C<undef> values will be ignored in the event
343list.
342 344
343=item * When enqueuing commands, if the enqueue method is called in void 345=item * When enqueuing commands, if the enqueue method is called in void
344context, no event is created. In all other contexts an event is returned 346context, no event is created. In all other contexts an event is returned
345by the method. 347by the method.
346 348
454It's best to avoid this method and use one of the following convenience 456It's best to avoid this method and use one of the following convenience
455wrappers. 457wrappers.
456 458
457L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformInfo.html> 459L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetPlatformInfo.html>
458 460
461=item $platform->unload_compiler
462
463Attempts to unload the compiler for this platform, for endless
464profit. Does nothing on OpenCL 1.1.
465
466L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clUnloadPlatformCompiler.html>
467
459=for gengetinfo begin platform 468=for gengetinfo begin platform
460 469
461=item $string = $platform->profile 470=item $string = $platform->profile
462 471
463Calls C<clGetPlatformInfo> with C<CL_PLATFORM_PROFILE> and returns the result. 472Calls C<clGetPlatformInfo> with C<CL_PLATFORM_PROFILE> and returns the result.
748 757
749=item @device_partition_property_exts = $device->affinity_domains_ext 758=item @device_partition_property_exts = $device->affinity_domains_ext
750 759
751Calls C<clGetDeviceInfo> with C<CL_DEVICE_AFFINITY_DOMAINS_EXT> and returns the result. 760Calls C<clGetDeviceInfo> with C<CL_DEVICE_AFFINITY_DOMAINS_EXT> and returns the result.
752 761
753=item $uint = $device->reference_count_ext 762=item $uint = $device->reference_count_ext
754 763
755Calls C<clGetDeviceInfo> with C<CL_DEVICE_REFERENCE_COUNT_EXT > and returns the result. 764Calls C<clGetDeviceInfo> with C<CL_DEVICE_REFERENCE_COUNT_EXT> and returns the result.
756 765
757=item @device_partition_property_exts = $device->partition_style_ext 766=item @device_partition_property_exts = $device->partition_style_ext
758 767
759Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_STYLE_EXT> and returns the result. 768Calls C<clGetDeviceInfo> with C<CL_DEVICE_PARTITION_STYLE_EXT> and returns the result.
760 769
769=item $queue = $ctx->queue ($device, $properties) 778=item $queue = $ctx->queue ($device, $properties)
770 779
771Create a new OpenCL::Queue object from the context and the given device. 780Create a new OpenCL::Queue object from the context and the given device.
772 781
773L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateCommandQueue.html> 782L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateCommandQueue.html>
783
784Example: create an out-of-order queue.
785
786 $queue = $ctx->queue ($device, OpenCL::QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE);
774 787
775=item $ev = $ctx->user_event 788=item $ev = $ctx->user_event
776 789
777Creates a new OpenCL::UserEvent object. 790Creates a new OpenCL::UserEvent object.
778 791
788=item $buf = $ctx->buffer_sv ($flags, $data) 801=item $buf = $ctx->buffer_sv ($flags, $data)
789 802
790Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object and 803Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object and
791initialise it with the given data values. 804initialise it with the given data values.
792 805
806=item $img = $ctx->image ($self, $flags, $channel_order, $channel_type, $type, $width, $height, $depth, $array_size = 0, $row_pitch = 0, $slice_pitch = 0, $num_mip_level = 0, $num_samples = 0, $*data = &PL_sv_undef)
807
808Creates a new OpenCL::Image object and optionally initialises it with
809the given data values.
810
811L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateImage.html>
812
793=item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef) 813=item $img = $ctx->image2d ($flags, $channel_order, $channel_type, $width, $height, $row_pitch = 0, $data = undef)
794 814
795Creates a new OpenCL::Image2D object and optionally initialises it with 815Creates a new OpenCL::Image2D object and optionally initialises it with
796the given data values. 816the given data values.
797 817
809Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object that refers to the given 829Creates a new OpenCL::Buffer (actually OpenCL::BufferObj) object that refers to the given
810OpenGL buffer object. 830OpenGL buffer object.
811 831
812http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLBuffer.html 832http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLBuffer.html
813 833
834=item $img = $ctx->gl_texture ($flags, $target, $miplevel, $texture)
835
836Creates a new OpenCL::Image object that refers to the given OpenGL
837texture object or buffer.
838
839http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLTexture.html
840
814=item $ctx->gl_texture2d ($flags, $target, $miplevel, $texture) 841=item $img = $ctx->gl_texture2d ($flags, $target, $miplevel, $texture)
815 842
816Creates a new OpenCL::Image2D object that refers to the given OpenGL 843Creates a new OpenCL::Image2D object that refers to the given OpenGL
8172D texture object. 8442D texture object.
818 845
819http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLTexture2D.html 846http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLTexture2D.html
820 847
821=item $ctx->gl_texture3d ($flags, $target, $miplevel, $texture) 848=item $img = $ctx->gl_texture3d ($flags, $target, $miplevel, $texture)
822 849
823Creates a new OpenCL::Image3D object that refers to the given OpenGL 850Creates a new OpenCL::Image3D object that refers to the given OpenGL
8243D texture object. 8513D texture object.
825 852
826http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLTexture3D.html 853http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateFromGLTexture3D.html
889for completion, unless the method is called in void context, in which case 916for completion, unless the method is called in void context, in which case
890no event object is created. 917no event object is created.
891 918
892They also allow you to specify any number of other event objects that this 919They also allow you to specify any number of other event objects that this
893request has to wait for before it starts executing, by simply passing the 920request has to wait for before it starts executing, by simply passing the
894event objects as extra parameters to the enqueue methods. 921event objects as extra parameters to the enqueue methods. To simplify
922program design, this module ignores any C<undef> values in the list of
923events. This makes it possible to code operations such as this, without
924having to put a valid event object into C<$event> first:
925
926 $event = $queue->enqueue_xxx (..., $event);
895 927
896Queues execute in-order by default, without any parallelism, so in most 928Queues execute in-order by default, without any parallelism, so in most
897cases (i.e. you use only one queue) it's not necessary to wait for or 929cases (i.e. you use only one queue) it's not necessary to wait for or
898create event objects. 930create event objects, althoguh an our of order queue is often a bit
931faster.
899 932
900=over 4 933=over 4
901 934
902=item $ev = $queue->enqueue_read_buffer ($buffer, $blocking, $offset, $len, $data, $wait_events...) 935=item $ev = $queue->enqueue_read_buffer ($buffer, $blocking, $offset, $len, $data, $wait_events...)
903 936
969reference to an array of local work sizes, with the same number of 1002reference to an array of local work sizes, with the same number of
970elements as @$global_work_size. 1003elements as @$global_work_size.
971 1004
972L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html> 1005L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueNDRangeKernel.html>
973 1006
974=item $ev = $queue->enqueue_marker ($wait_events...)
975
976L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueMarker.html>
977
978=item $ev = $queue->enqueue_acquire_gl_objects ([object, ...], $wait_events...) 1007=item $ev = $queue->enqueue_acquire_gl_objects ([object, ...], $wait_events...)
979 1008
980Enqueues a list (an array-ref of OpenCL::Memory objects) to be acquired 1009Enqueues a list (an array-ref of OpenCL::Memory objects) to be acquired
981for subsequent OpenCL usage. 1010for subsequent OpenCL usage.
982 1011
991 1020
992=item $ev = $queue->enqueue_wait_for_events ($wait_events...) 1021=item $ev = $queue->enqueue_wait_for_events ($wait_events...)
993 1022
994L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWaitForEvents.html> 1023L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueWaitForEvents.html>
995 1024
996=item $queue->enqueue_barrier 1025=item $ev = $queue->enqueue_marker ($wait_events...)
997 1026
1027L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueMarkerWithWaitList.html>
1028
1029=item $ev = $queue->enqueue_barrier ($wait_events...)
1030
998L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clEnqueueBarrier.html> 1031L<http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clEnqueueBarrierWithWaitList.html>
999 1032
1000=item $queue->flush 1033=item $queue->flush
1001 1034
1002L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFlush.html> 1035L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clFlush.html>
1003 1036
1118 1151
1119=back 1152=back
1120 1153
1121=head2 THE OpenCL::Image CLASS 1154=head2 THE OpenCL::Image CLASS
1122 1155
1123This is the superclass of all image objects - OpenCL::Image2D and OpenCL::Image3D. 1156This is the superclass of all image objects - OpenCL::Image1D,
1157OpenCL::Image1DArray, OpenCL::Image1DBuffer, OpenCL::Image2D,
1158OpenCL::Image2DArray and OpenCL::Image3D.
1124 1159
1125=over 4 1160=over 4
1126 1161
1127=item $packed_value = $ev->image_info ($name) 1162=item $packed_value = $ev->image_info ($name)
1128 1163
1232 1267
1233Creates an OpenCL::Kernel object out of the named C<__kernel> function in 1268Creates an OpenCL::Kernel object out of the named C<__kernel> function in
1234the program. 1269the program.
1235 1270
1236L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateKernel.html> 1271L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateKernel.html>
1272
1273=item @kernels = $program->kernels_in_program
1274
1275Returns all kernels successfully compiled for all devices in program.
1276
1277http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clCreateKernelsInProgram.html
1237 1278
1238=for gengetinfo begin program_build 1279=for gengetinfo begin program_build
1239 1280
1240=item $build_status = $program->build_status ($device) 1281=item $build_status = $program->build_status ($device)
1241 1282
1377float and double as floating point values, memory/buffer/image2d/image3d 1418float and double as floating point values, memory/buffer/image2d/image3d
1378must be an object of that type or C<undef>, local-memory arguments are 1419must be an object of that type or C<undef>, local-memory arguments are
1379set by specifying the size, and sampler and event must be objects of that 1420set by specifying the size, and sampler and event must be objects of that
1380type. 1421type.
1381 1422
1423Setting an argument for a kernel does NOT keep a reference to the object -
1424for example, if you set an argument to some image object, free the image,
1425and call the kernel, you will run into undefined behaviour.
1426
1382L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetKernelArg.html> 1427L<http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clSetKernelArg.html>
1383 1428
1384=back 1429=back
1385 1430
1386=head2 THE OpenCL::Event CLASS 1431=head2 THE OpenCL::Event CLASS
1474package OpenCL; 1519package OpenCL;
1475 1520
1476use common::sense; 1521use common::sense;
1477 1522
1478BEGIN { 1523BEGIN {
1479 our $VERSION = '0.95'; 1524 our $VERSION = '0.96';
1480 1525
1481 require XSLoader; 1526 require XSLoader;
1482 XSLoader::load (__PACKAGE__, $VERSION); 1527 XSLoader::load (__PACKAGE__, $VERSION);
1483 1528
1484 @OpenCL::Buffer::ISA = 1529 @OpenCL::Buffer::ISA =
1485 @OpenCL::Image::ISA = OpenCL::Memory::; 1530 @OpenCL::Image::ISA = OpenCL::Memory::;
1486 1531
1487 @OpenCL::BufferObj::ISA = OpenCL::Buffer::; 1532 @OpenCL::BufferObj::ISA = OpenCL::Buffer::;
1488 1533
1489 @OpenCL::Image2D::ISA = 1534 @OpenCL::Image2D::ISA =
1535 @OpenCL::Image3D::ISA =
1536 @OpenCL::Image2DArray::ISA =
1537 @OpenCL::Image1D::ISA =
1538 @OpenCL::Image1DArray::ISA =
1490 @OpenCL::Image3D::ISA = OpenCL::Image::; 1539 @OpenCL::Image1DBuffer::ISA = OpenCL::Image::;
1491 1540
1492 @OpenCL::UserEvent::ISA = OpenCL::Event::; 1541 @OpenCL::UserEvent::ISA = OpenCL::Event::;
1493} 1542}
1494 1543
14951; 15441;
1496 1545
1497=head1 AUTHOR 1546=head1 AUTHOR

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines