--- OpenCL/OpenCL.pm 2011/11/15 20:38:07 1.3 +++ OpenCL/OpenCL.pm 2011/11/15 21:16:19 1.4 @@ -82,6 +82,28 @@ my $kernel = $prog->kernel ("squareit"); +Create some input and output float buffers, then call squareit on them: + + my $input = $ctx->buffer_sv (OpenCL::MEM_COPY_HOST_PTR, pack "f*", 1, 2, 3, 4.5); + my $output = $ctx->buffer (0, OpenCL::SIZEOF_FLOAT * 5); + + # set buffer + $kernel->set_buffer (0, $input); + $kernel->set_buffer (1, $output); + + # execute it for all 4 numbers + $queue->enqueue_nd_range_kernel ($kernel, undef, [4], undef); + + # enqueue a barrier ot ensure in-order execution (not really needed in this case) + $queue->enqueue_barrier; + + # enqueue an async read (could easily be blocking here though), then wait for it: + my $ev = $queue->enqueue_read_buffer ($output, 0, 0, OpenCL::SIZEOF_FLOAT * 4, my $data); + $ev->wait; + + # print the results: + say join ", ", unpack "f*", $data; + =over 4 =cut @@ -91,7 +113,7 @@ use common::sense; BEGIN { - our $VERSION = '0.01'; + our $VERSION = '0.02'; require XSLoader; XSLoader::load (__PACKAGE__, $VERSION);