opencl_ruby_ffi 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/opencl_ruby_ffi/Buffer.rb +4 -3
- data/lib/opencl_ruby_ffi/CommandQueue.rb +57 -56
- data/lib/opencl_ruby_ffi/Context.rb +18 -17
- data/lib/opencl_ruby_ffi/Device.rb +22 -21
- data/lib/opencl_ruby_ffi/Event.rb +12 -11
- data/lib/opencl_ruby_ffi/GLExt.rb +9 -8
- data/lib/opencl_ruby_ffi/Image.rb +11 -10
- data/lib/opencl_ruby_ffi/Kernel.rb +32 -31
- data/lib/opencl_ruby_ffi/Mem.rb +9 -8
- data/lib/opencl_ruby_ffi/Pipe.rb +2 -1
- data/lib/opencl_ruby_ffi/Platform.rb +20 -19
- data/lib/opencl_ruby_ffi/Program.rb +46 -45
- data/lib/opencl_ruby_ffi/SVM.rb +12 -11
- data/lib/opencl_ruby_ffi/Sampler.rb +4 -3
- data/lib/opencl_ruby_ffi/Stream.rb +127 -0
- data/lib/opencl_ruby_ffi/{Arithmetic_gen.rb → opencl_arithmetic_gen.rb} +737 -836
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base.rb +49 -69
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base_gen.rb +30 -99
- data/lib/opencl_ruby_ffi/opencl_types.rb +114 -0
- data/lib/opencl_ruby_ffi.rb +2 -1
- data/opencl_ruby_ffi.gemspec +2 -2
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 193e78c54b6d29e4f591b8dbdce9ff66c425347c
|
4
|
+
data.tar.gz: b8d6469deb531b4834b4a27f67347ea710ab6a05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0df6dfd8dd9487ef052ea835e528f76ec920dd405a5f4541e41072993162e2af293d4e2556555dfa13d240b580a52dd7e3fc75a622aef4ca3989b0c50f0d5464
|
7
|
+
data.tar.gz: bcb6a82188d07f0f45e6d92af2af06eb1c007386ee180c86577ce85cf070d47330791ff70cc5cda41f110be2750f6621e26e0f72cfb53ceed344b5e2844fe42b
|
@@ -1,3 +1,4 @@
|
|
1
|
+
using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
|
1
2
|
module OpenCL
|
2
3
|
|
3
4
|
# Creates a Buffer
|
@@ -15,7 +16,7 @@ module OpenCL
|
|
15
16
|
def self.create_buffer( context, size, options = {} )
|
16
17
|
flags = get_flags( options )
|
17
18
|
host_ptr = options[:host_ptr]
|
18
|
-
error =
|
19
|
+
error = MemoryPointer::new( :cl_int )
|
19
20
|
buff = clCreateBuffer(context, flags, size, host_ptr, error)
|
20
21
|
error_check(error.read_cl_int)
|
21
22
|
return Buffer::new( buff, false )
|
@@ -36,7 +37,7 @@ module OpenCL
|
|
36
37
|
def self.create_sub_buffer( buffer, type, info, options = {} )
|
37
38
|
error_check(INVALID_OPERATION) if buffer.platform.version_number < 1.1
|
38
39
|
flags = get_flags( options )
|
39
|
-
error =
|
40
|
+
error = MemoryPointer::new( :cl_int )
|
40
41
|
buff = clCreateSubBuffer( buffer, flags, type, info, error)
|
41
42
|
error_check(error.read_cl_int)
|
42
43
|
return Buffer::new( buff, false )
|
@@ -55,7 +56,7 @@ module OpenCL
|
|
55
56
|
# * +:flags+ - a single or an Array of :cl_mem_flags specifying the flags to be used when creating the Image
|
56
57
|
def self.create_from_gl_buffer( context, bufobj, options = {} )
|
57
58
|
flags = get_flags( options )
|
58
|
-
error =
|
59
|
+
error = MemoryPointer::new( :cl_int )
|
59
60
|
buff = clCreateFromGLBuffer( context, flags, bufobj, error )
|
60
61
|
error_check(error.read_cl_int)
|
61
62
|
return Buffer::new( buff, false )
|
@@ -1,3 +1,4 @@
|
|
1
|
+
using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
|
1
2
|
module OpenCL
|
2
3
|
|
3
4
|
# Blocks until all the commands in the queue have completed
|
@@ -37,7 +38,7 @@ module OpenCL
|
|
37
38
|
def self.create_command_queue( context, device, options = {} )
|
38
39
|
properties = get_command_queue_properties( options )
|
39
40
|
size = options[:size]
|
40
|
-
error =
|
41
|
+
error = MemoryPointer::new( :cl_int )
|
41
42
|
if context.platform.version_number < 2.0 then
|
42
43
|
cmd = clCreateCommandQueue( context, device, properties, error )
|
43
44
|
else
|
@@ -47,7 +48,7 @@ module OpenCL
|
|
47
48
|
props_size += 2 if properties.to_i != 0
|
48
49
|
props_size += 2 if size
|
49
50
|
props_size += 1 if props_size > 0
|
50
|
-
props =
|
51
|
+
props = MemoryPointer::new( :cl_queue_properties, props_size )
|
51
52
|
i=0
|
52
53
|
if properties.to_i != 0 then
|
53
54
|
props[i].write_cl_queue_properties( CommandQueue::PROPERTIES )
|
@@ -88,14 +89,14 @@ module OpenCL
|
|
88
89
|
num_mem_objects = [mem_objects].flatten.length
|
89
90
|
mem_list = nil
|
90
91
|
if num_mem_objects > 0 then
|
91
|
-
mem_list =
|
92
|
+
mem_list = MemoryPointer::new( Mem, num_mem_objects )
|
92
93
|
[mem_objects].flatten.each_with_index { |e, i|
|
93
94
|
mem_list[i].write_pointer(e)
|
94
95
|
}
|
95
96
|
end
|
96
97
|
flags = get_flags( options )
|
97
98
|
num_events, events = get_event_wait_list( options )
|
98
|
-
event =
|
99
|
+
event = MemoryPointer::new( Event )
|
99
100
|
error = clEnqueueMigrateMemObjects( command_queue, num_mem_objects, mem_list, flags, num_events, events, event )
|
100
101
|
error_check( error )
|
101
102
|
return Event::new( event.read_ptr, false )
|
@@ -133,10 +134,10 @@ module OpenCL
|
|
133
134
|
origin, region = get_origin_region( image, options, :origin, :region )
|
134
135
|
|
135
136
|
num_events, events = get_event_wait_list( options )
|
136
|
-
image_row_pitch =
|
137
|
-
image_slice_pitch =
|
138
|
-
event =
|
139
|
-
error =
|
137
|
+
image_row_pitch = MemoryPointer::new( :size_t )
|
138
|
+
image_slice_pitch = MemoryPointer::new( :size_t )
|
139
|
+
event = MemoryPointer::new( Event )
|
140
|
+
error = MemoryPointer::new( :cl_int )
|
140
141
|
ptr = clEnqueueMapImage( command_queue, image, blocking, flags, origin, region, image_row_pitch, image_slice_pitch, num_events, events, event, error )
|
141
142
|
error_check( error.read_cl_int )
|
142
143
|
ev = Event::new( event.read_ptr, false )
|
@@ -175,8 +176,8 @@ module OpenCL
|
|
175
176
|
size = buffer.size - offset
|
176
177
|
size = options[:size] - offset if options[:size]
|
177
178
|
num_events, events = get_event_wait_list( options )
|
178
|
-
event =
|
179
|
-
error =
|
179
|
+
event = MemoryPointer::new( Event )
|
180
|
+
error = MemoryPointer::new( :cl_int )
|
180
181
|
ptr = clEnqueueMapBuffer( command_queue, buffer, blocking, flags, offset, size, num_events, events, event, error )
|
181
182
|
error_check( error.read_cl_int )
|
182
183
|
ev = Event::new( event.read_ptr, false )
|
@@ -201,7 +202,7 @@ module OpenCL
|
|
201
202
|
# the Event associated with the command
|
202
203
|
def self.enqueue_unmap_mem_object( command_queue, mem_obj, mapped_ptr, options = {} )
|
203
204
|
num_events, events = get_event_wait_list( options )
|
204
|
-
event =
|
205
|
+
event = MemoryPointer::new( Event )
|
205
206
|
error = clEnqueueUnmapMemObject( command_queue, mem_obj, mapped_ptr, num_events, events, event )
|
206
207
|
error_check( error )
|
207
208
|
return Event::new( event.read_ptr, false )
|
@@ -237,7 +238,7 @@ module OpenCL
|
|
237
238
|
blocking = FALSE
|
238
239
|
blocking = TRUE if options[:blocking] or options[:blocking_read]
|
239
240
|
|
240
|
-
buffer_origin =
|
241
|
+
buffer_origin = MemoryPointer::new( :size_t, 3 )
|
241
242
|
(0..2).each { |i| buffer_origin[i].write_size_t(0) }
|
242
243
|
bo = options[:src_origin] ? options[:src_origin] : options[:buffer_origin]
|
243
244
|
if bo then
|
@@ -246,7 +247,7 @@ module OpenCL
|
|
246
247
|
}
|
247
248
|
end
|
248
249
|
|
249
|
-
host_origin =
|
250
|
+
host_origin = MemoryPointer::new( :size_t, 3 )
|
250
251
|
(0..2).each { |i| host_origin[i].write_size_t(0) }
|
251
252
|
ho = options[:dst_origin] ? options[:dst_origin] : options[:host_origin]
|
252
253
|
if ho then
|
@@ -255,7 +256,7 @@ module OpenCL
|
|
255
256
|
}
|
256
257
|
end
|
257
258
|
|
258
|
-
r =
|
259
|
+
r = MemoryPointer::new( :size_t, 3 )
|
259
260
|
(0..2).each { |i| r[i].write_size_t(0) }
|
260
261
|
region[0..2].each_with_index { |e, i|
|
261
262
|
r[i].write_size_t(e)
|
@@ -278,7 +279,7 @@ module OpenCL
|
|
278
279
|
host_slice_pitch = 0
|
279
280
|
end
|
280
281
|
num_events, events = get_event_wait_list( options )
|
281
|
-
event =
|
282
|
+
event = MemoryPointer::new( Event )
|
282
283
|
error = clEnqueueReadBufferRect(command_queue, buffer, blocking, buffer_origin, host_origin, r, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events, events, event)
|
283
284
|
error_check(error)
|
284
285
|
return Event::new(event.read_pointer, false)
|
@@ -314,7 +315,7 @@ module OpenCL
|
|
314
315
|
blocking = FALSE
|
315
316
|
blocking = TRUE if options[:blocking] or options[:blocking_write]
|
316
317
|
|
317
|
-
buffer_origin =
|
318
|
+
buffer_origin = MemoryPointer::new( :size_t, 3 )
|
318
319
|
(0..2).each { |i| buffer_origin[i].write_size_t(0) }
|
319
320
|
bo = options[:dst_origin] ? options[:dst_origin] : options[:buffer_origin]
|
320
321
|
if bo then
|
@@ -323,7 +324,7 @@ module OpenCL
|
|
323
324
|
}
|
324
325
|
end
|
325
326
|
|
326
|
-
host_origin =
|
327
|
+
host_origin = MemoryPointer::new( :size_t, 3 )
|
327
328
|
(0..2).each { |i| host_origin[i].write_size_t(0) }
|
328
329
|
ho = options[:src_origin] ? options[:src_origin] : options[:host_origin]
|
329
330
|
if ho then
|
@@ -332,7 +333,7 @@ module OpenCL
|
|
332
333
|
}
|
333
334
|
end
|
334
335
|
|
335
|
-
r =
|
336
|
+
r = MemoryPointer::new( :size_t, 3 )
|
336
337
|
(0..2).each { |i| r[i].write_size_t(0) }
|
337
338
|
region[0..2].each_with_index { |e, i|
|
338
339
|
r[i].write_size_t(e)
|
@@ -355,7 +356,7 @@ module OpenCL
|
|
355
356
|
host_slice_pitch = 0
|
356
357
|
end
|
357
358
|
num_events, events = get_event_wait_list( options )
|
358
|
-
event =
|
359
|
+
event = MemoryPointer::new( Event )
|
359
360
|
error = clEnqueueWriteBufferRect(command_queue, buffer, blocking, buffer_origin, host_origin, r, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events, events, event)
|
360
361
|
error_check(error)
|
361
362
|
return Event::new(event.read_pointer, false)
|
@@ -387,7 +388,7 @@ module OpenCL
|
|
387
388
|
def self.enqueue_copy_buffer_rect(command_queue, src_buffer, dst_buffer, region, options = {})
|
388
389
|
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
389
390
|
|
390
|
-
src_origin =
|
391
|
+
src_origin = MemoryPointer::new( :size_t, 3 )
|
391
392
|
(0..2).each { |i| src_origin[i].write_size_t(0) }
|
392
393
|
if options[:src_origin] then
|
393
394
|
options[:src_origin].each_with_index { |e, i|
|
@@ -395,7 +396,7 @@ module OpenCL
|
|
395
396
|
}
|
396
397
|
end
|
397
398
|
|
398
|
-
dst_origin =
|
399
|
+
dst_origin = MemoryPointer::new( :size_t, 3 )
|
399
400
|
(0..2).each { |i| dst_origin[i].write_size_t(0) }
|
400
401
|
if options[:dst_origin] then
|
401
402
|
options[:dst_origin].each_with_index { |e, i|
|
@@ -403,7 +404,7 @@ module OpenCL
|
|
403
404
|
}
|
404
405
|
end
|
405
406
|
|
406
|
-
r =
|
407
|
+
r = MemoryPointer::new( :size_t, 3 )
|
407
408
|
(0..2).each { |i| r[i].write_size_t(0) }
|
408
409
|
region[0..2].each_with_index { |e, i|
|
409
410
|
r[i].write_size_t(e)
|
@@ -426,7 +427,7 @@ module OpenCL
|
|
426
427
|
dst_slice_pitch = 0
|
427
428
|
end
|
428
429
|
num_events, events = get_event_wait_list( options )
|
429
|
-
event =
|
430
|
+
event = MemoryPointer::new( Event )
|
430
431
|
error = clEnqueueCopyBufferRect(command_queue, src_buffer, dst_buffer, src_origin, dst_origin, r, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, num_events, events, event)
|
431
432
|
error_check(error)
|
432
433
|
return Event::new(event.read_pointer, false)
|
@@ -459,7 +460,7 @@ module OpenCL
|
|
459
460
|
size = [ src_buffer.size - src_offset, dst_buffer.size - dst_offset ].min
|
460
461
|
size = options[:size] if options[:size]
|
461
462
|
num_events, events = get_event_wait_list( options )
|
462
|
-
event =
|
463
|
+
event = MemoryPointer::new( Event )
|
463
464
|
error = clEnqueueCopyBuffer(command_queue, src_buffer, dst_buffer, src_offset, dst_offset, size, num_events, events, event)
|
464
465
|
error_check(error)
|
465
466
|
return Event::new(event.read_pointer, false)
|
@@ -494,7 +495,7 @@ module OpenCL
|
|
494
495
|
size = buffer.size - offset
|
495
496
|
size = options[:size] if options[:size]
|
496
497
|
num_events, events = get_event_wait_list( options )
|
497
|
-
event =
|
498
|
+
event = MemoryPointer::new( Event )
|
498
499
|
error = clEnqueueWriteBuffer(command_queue, buffer, blocking, offset, size, ptr, num_events, events, event)
|
499
500
|
error_check(error)
|
500
501
|
return Event::new(event.read_pointer, false)
|
@@ -528,7 +529,7 @@ module OpenCL
|
|
528
529
|
size = buffer.size - offset
|
529
530
|
size = options[:size] if options[:size]
|
530
531
|
num_events, events = get_event_wait_list( options )
|
531
|
-
event =
|
532
|
+
event = MemoryPointer::new( Event )
|
532
533
|
error = clEnqueueReadBuffer(command_queue, buffer, blocking, offset, size, ptr, num_events, events, event)
|
533
534
|
error_check(error)
|
534
535
|
return Event::new(event.read_pointer, false)
|
@@ -553,13 +554,13 @@ module OpenCL
|
|
553
554
|
num_objs = [mem_objects].flatten.length
|
554
555
|
objs = nil
|
555
556
|
if num_objs > 0 then
|
556
|
-
objs =
|
557
|
+
objs = MemoryPointer::new( Mem, num_objs )
|
557
558
|
[mem_objects].flatten.each_with_index { |o, i|
|
558
559
|
objs[i].write_pointer(e)
|
559
560
|
}
|
560
561
|
end
|
561
562
|
num_events, events = get_event_wait_list( options )
|
562
|
-
event =
|
563
|
+
event = MemoryPointer::new( Event )
|
563
564
|
error = clEnqueueAcquireGLObjects( command_queue, num_objs, objs, num_events, events, event )
|
564
565
|
error_check(error)
|
565
566
|
return Event::new(event.read_pointer, false)
|
@@ -587,13 +588,13 @@ module OpenCL
|
|
587
588
|
num_objs = [mem_objects].flatten.length
|
588
589
|
objs = nil
|
589
590
|
if num_objs > 0 then
|
590
|
-
objs =
|
591
|
+
objs = MemoryPointer::new( Mem, num_objs )
|
591
592
|
[mem_objects].flatten.each_with_index { |o, i|
|
592
593
|
objs[i].write_pointer(e)
|
593
594
|
}
|
594
595
|
end
|
595
596
|
num_events, events = get_event_wait_list( options )
|
596
|
-
event =
|
597
|
+
event = MemoryPointer::new( Event )
|
597
598
|
error = clEnqueueReleaseGLObjects( command_queue, num_objs, objs, num_events, events, event )
|
598
599
|
error_check(error)
|
599
600
|
return Event::new(event.read_pointer, false)
|
@@ -630,7 +631,7 @@ module OpenCL
|
|
630
631
|
size = (buffer.size - offset) % pattern_size
|
631
632
|
size = options[:size] if options[:size]
|
632
633
|
num_events, events = get_event_wait_list( options )
|
633
|
-
event =
|
634
|
+
event = MemoryPointer::new( Event )
|
634
635
|
error = clEnqueueFillBuffer( command_queue, buffer, pattern, pattern_size, offset, size, num_events, events, event )
|
635
636
|
error_check(error)
|
636
637
|
return Event::new(event.read_pointer, false)
|
@@ -658,7 +659,7 @@ module OpenCL
|
|
658
659
|
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 1.1
|
659
660
|
origin, region = get_origin_region( image, options, :origin, :region )
|
660
661
|
num_events, events = get_event_wait_list( options )
|
661
|
-
event =
|
662
|
+
event = MemoryPointer::new( Event )
|
662
663
|
error = clEnqueueFillImage( command_queue, image, fill_color, origin, region, num_events, events, event )
|
663
664
|
error_check(error)
|
664
665
|
return Event::new(event.read_pointer, false)
|
@@ -688,7 +689,7 @@ module OpenCL
|
|
688
689
|
dst_offset = 0
|
689
690
|
dst_offset = options[:dst_offset] if options[:dst_offset]
|
690
691
|
num_events, events = get_event_wait_list( options )
|
691
|
-
event =
|
692
|
+
event = MemoryPointer::new( Event )
|
692
693
|
error = clEnqueueCopyImageToBuffer( command_queue, src_image, dst_buffer, src_origin, region, dst_offset, num_events, events, event )
|
693
694
|
error_check(error)
|
694
695
|
return Event::new(event.read_pointer, false)
|
@@ -718,7 +719,7 @@ module OpenCL
|
|
718
719
|
src_offset = 0
|
719
720
|
src_offset = options[:src_offset] if options[:src_offset]
|
720
721
|
num_events, events = get_event_wait_list( options )
|
721
|
-
event =
|
722
|
+
event = MemoryPointer::new( Event )
|
722
723
|
error = clEnqueueCopyBufferToImage( command_queue, src_buffer, dst_image, src_offset, dst_origin, region, num_events, events, event )
|
723
724
|
error_check(error)
|
724
725
|
return Event::new(event.read_pointer, false)
|
@@ -757,7 +758,7 @@ module OpenCL
|
|
757
758
|
input_slice_pitch = 0
|
758
759
|
input_slice_pitch = options[:input_slice_pitch] if options[:input_slice_pitch]
|
759
760
|
num_events, events = get_event_wait_list( options )
|
760
|
-
event =
|
761
|
+
event = MemoryPointer::new( Event )
|
761
762
|
error = clEnqueueWriteImage( command_queue, image, blocking, origin, region, input_row_pitch, input_slice_pitch, ptr, num_events, events, event )
|
762
763
|
error_check(error)
|
763
764
|
return Event::new(event.read_pointer, false)
|
@@ -785,12 +786,12 @@ module OpenCL
|
|
785
786
|
def self.enqueue_copy_image( command_queue, src_image, dst_image, options = {} )
|
786
787
|
src_origin, src_region = get_origin_region( src_image, options, :src_origin, :region )
|
787
788
|
dst_origin, dst_region = get_origin_region( dst_image, options, :dst_origin, :region )
|
788
|
-
region =
|
789
|
+
region = MemoryPointer::new( :size_t, 3 )
|
789
790
|
(0..2).each { |i|
|
790
791
|
region[i].write_size_t( [src_region[i].read_size_t, dst_region[i].read_size_t].min )
|
791
792
|
}
|
792
793
|
num_events, events = get_event_wait_list( options )
|
793
|
-
event =
|
794
|
+
event = MemoryPointer::new( Event )
|
794
795
|
error = clEnqueueCopyImage( command_queue, src_image, dst_image, src_origin, dst_origin, region, num_events, events, event )
|
795
796
|
error_check(error)
|
796
797
|
return Event::new(event.read_pointer, false)
|
@@ -828,7 +829,7 @@ module OpenCL
|
|
828
829
|
slice_pitch = 0
|
829
830
|
slice_pitch = options[:slice_pitch] if options[:slice_pitch]
|
830
831
|
num_events, events = get_event_wait_list( options )
|
831
|
-
event =
|
832
|
+
event = MemoryPointer::new( Event )
|
832
833
|
error = clEnqueueReadImage( command_queue, image, blocking, origin, region, row_pitch, slice_pitch, ptr, num_events, events, event )
|
833
834
|
error_check(error)
|
834
835
|
return Event::new(event.read_pointer, false)
|
@@ -861,7 +862,7 @@ module OpenCL
|
|
861
862
|
arg_offset.push(arg_size)
|
862
863
|
args_size += e.size
|
863
864
|
}
|
864
|
-
args =
|
865
|
+
args = MemoryPointer::new(args_size)
|
865
866
|
[arguments].flatten.each_with_index { |e, i|
|
866
867
|
args.put_bytes(arg_offset[i], e.to_ptr.read_bytes(e.size))
|
867
868
|
}
|
@@ -871,8 +872,8 @@ module OpenCL
|
|
871
872
|
if options[:mem_list] then
|
872
873
|
num_mem_objects = options[:mem_list].length
|
873
874
|
if num_mem_objects > 0 then
|
874
|
-
mem_list =
|
875
|
-
mem_loc =
|
875
|
+
mem_list = MemoryPointer::new( Mem, num_mem_objects )
|
876
|
+
mem_loc = MemoryPointer::new( :pointer, num_mem_objects )
|
876
877
|
i = 0
|
877
878
|
options[:mem_list].each { |key, value|
|
878
879
|
mem_list[i].write_pointer(key)
|
@@ -882,7 +883,7 @@ module OpenCL
|
|
882
883
|
end
|
883
884
|
end
|
884
885
|
num_events, events = get_event_wait_list( options )
|
885
|
-
event =
|
886
|
+
event = MemoryPointer::new( Event )
|
886
887
|
error = clEnqueueNativeKernel( command_queue, func, args, args_size, num_mem_objects, mem_list, mem_loc, num_events, events, event )
|
887
888
|
error_check(error)
|
888
889
|
return Event::new(event.read_pointer, false)
|
@@ -906,7 +907,7 @@ module OpenCL
|
|
906
907
|
def self.enqueue_task( command_queue, kernel, options = {} )
|
907
908
|
if queue.context.platform.version_number < 2.0 then
|
908
909
|
num_events, events = get_event_wait_list( options )
|
909
|
-
event =
|
910
|
+
event = MemoryPointer::new( Event )
|
910
911
|
error = clEnqueueTask( command_queue, kernel, num_events, events, event )
|
911
912
|
error_check(error)
|
912
913
|
return Event::new(event.read_pointer, false)
|
@@ -936,26 +937,26 @@ module OpenCL
|
|
936
937
|
#
|
937
938
|
# the Event associated with the command
|
938
939
|
def self.enqueue_ndrange_kernel( command_queue, kernel, global_work_size, options={} )
|
939
|
-
gws =
|
940
|
+
gws = MemoryPointer::new( :size_t, global_work_size.length )
|
940
941
|
global_work_size.each_with_index { |g, i|
|
941
942
|
gws[i].write_size_t(g)
|
942
943
|
}
|
943
944
|
lws = nil
|
944
945
|
if options[:local_work_size] then
|
945
|
-
lws =
|
946
|
+
lws = MemoryPointer::new( :size_t, global_work_size.length )
|
946
947
|
global_work_size.each_index { |i|
|
947
948
|
lws[i].write_size_t(options[:local_work_size][i])
|
948
949
|
}
|
949
950
|
end
|
950
951
|
gwo = nil
|
951
952
|
if options[:global_work_offset] then
|
952
|
-
gwo =
|
953
|
+
gwo = MemoryPointer::new( :size_t, global_work_size.length )
|
953
954
|
global_work_size.each_index { |i|
|
954
955
|
gwo[i].write_size_t(options[:global_work_offset][i])
|
955
956
|
}
|
956
957
|
end
|
957
958
|
num_events, events = get_event_wait_list( options )
|
958
|
-
event =
|
959
|
+
event = MemoryPointer::new( Event )
|
959
960
|
error = clEnqueueNDRangeKernel(command_queue, kernel, global_work_size.length, gwo, gws, lws, num_events, events, event)
|
960
961
|
error_check(error)
|
961
962
|
return Event::new(event.read_pointer, false)
|
@@ -992,7 +993,7 @@ module OpenCL
|
|
992
993
|
if command_queue.context.platform.version_number < 1.2 then
|
993
994
|
num_events = [events].flatten.length
|
994
995
|
if num_events > 0 then
|
995
|
-
evts =
|
996
|
+
evts = MemoryPointer::new( Event, num_events )
|
996
997
|
[events].flatten.each_with_index { |e, i|
|
997
998
|
evts[i].write_pointer(e)
|
998
999
|
}
|
@@ -1006,12 +1007,12 @@ module OpenCL
|
|
1006
1007
|
num_events = [events].flatten.length
|
1007
1008
|
evts = nil
|
1008
1009
|
if num_events > 0 then
|
1009
|
-
evts =
|
1010
|
+
evts = MemoryPointer::new( Event, num_events )
|
1010
1011
|
[events].flatten.each_with_index { |e, i|
|
1011
1012
|
evts[i].write_pointer(e)
|
1012
1013
|
}
|
1013
1014
|
end
|
1014
|
-
event =
|
1015
|
+
event = MemoryPointer::new( Event )
|
1015
1016
|
error = clEnqueueBarrierWithWaitList( command_queue, num_events, evts, event )
|
1016
1017
|
error_check(error)
|
1017
1018
|
return Event::new(event.read_pointer, false)
|
@@ -1029,14 +1030,14 @@ module OpenCL
|
|
1029
1030
|
#
|
1030
1031
|
# an Event
|
1031
1032
|
def self.enqueue_marker( command_queue, events = [] )
|
1032
|
-
event =
|
1033
|
+
event = MemoryPointer::new( Event )
|
1033
1034
|
if command_queue.context.platform.version_number < 1.2 then
|
1034
1035
|
error = clEnqueueMarker( command_queue, event )
|
1035
1036
|
else
|
1036
1037
|
num_events = [events].flatten.length
|
1037
1038
|
evts = nil
|
1038
1039
|
if num_events > 0 then
|
1039
|
-
evts =
|
1040
|
+
evts = MemoryPointer::new( Event, num_events )
|
1040
1041
|
[events].flatten.each_with_index { |e, i|
|
1041
1042
|
evts[i].write_pointer(e)
|
1042
1043
|
}
|
@@ -1062,7 +1063,7 @@ module OpenCL
|
|
1062
1063
|
|
1063
1064
|
# Returns the Context associated to the CommandQueue
|
1064
1065
|
def context
|
1065
|
-
ptr =
|
1066
|
+
ptr = MemoryPointer::new( Context )
|
1066
1067
|
error = OpenCL.clGetCommandQueueInfo(self, CONTEXT, Context.size, ptr, nil)
|
1067
1068
|
error_check(error)
|
1068
1069
|
return Context::new( ptr.read_pointer )
|
@@ -1070,7 +1071,7 @@ module OpenCL
|
|
1070
1071
|
|
1071
1072
|
# Returns the Device associated to the CommandQueue
|
1072
1073
|
def device
|
1073
|
-
ptr =
|
1074
|
+
ptr = MemoryPointer::new( Device )
|
1074
1075
|
error = OpenCL.clGetCommandQueueInfo(self, DEVICE, Device.size, ptr, nil)
|
1075
1076
|
error_check(error)
|
1076
1077
|
return Device::new( ptr.read_pointer )
|
@@ -1078,7 +1079,7 @@ module OpenCL
|
|
1078
1079
|
|
1079
1080
|
# Return the default CommandQueue for the underlying Device
|
1080
1081
|
def device_default
|
1081
|
-
ptr =
|
1082
|
+
ptr = MemoryPointer::new( CommandQueue )
|
1082
1083
|
error = OpenCL.clGetCommandQueueInfo(self, DEVICE_DEFAULT, CommandQueue.size, ptr, nil)
|
1083
1084
|
error_check(error)
|
1084
1085
|
return CommandQueue::new( ptr.read_pointer )
|
@@ -1683,7 +1684,7 @@ module OpenCL
|
|
1683
1684
|
#
|
1684
1685
|
# * +svm_pointer+ - a single or an Array of SVMPointer (or Pointer)
|
1685
1686
|
# * +options+ - a hash containing named options
|
1686
|
-
# * +block+ - if provided, a callback invoked to free the pointers. Signature of the callback is { |CommandQueue, num_pointers,
|
1687
|
+
# * +block+ - if provided, a callback invoked to free the pointers. Signature of the callback is { |CommandQueue, num_pointers, Pointer to an array of num_pointers Pointers, Pointer to user_data| ... }
|
1687
1688
|
#
|
1688
1689
|
# ==== Options
|
1689
1690
|
#
|
@@ -1,3 +1,4 @@
|
|
1
|
+
using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
|
1
2
|
module OpenCL
|
2
3
|
|
3
4
|
# Creates an Context using the specified devices
|
@@ -6,20 +7,20 @@ module OpenCL
|
|
6
7
|
#
|
7
8
|
# * +devices+ - array of Device or a single Device
|
8
9
|
# * +options+ - a hash containing named options
|
9
|
-
# * +block+ - if provided, a callback invoked when error arise in the context. Signature of the callback is { |
|
10
|
+
# * +block+ - if provided, a callback invoked when error arise in the context. Signature of the callback is { |Pointer to null terminated c string, Pointer to binary data, :size_t number of bytes of binary data, Pointer to user_data| ... }
|
10
11
|
#
|
11
12
|
# ==== Options
|
12
13
|
#
|
13
14
|
# * +:properties+ - a list of :cl_context_properties
|
14
|
-
# * +:user_data+ - an
|
15
|
+
# * +:user_data+ - an Pointer or an object that can be converted into one using to_ptr. The pointer is passed to the callback.
|
15
16
|
def self.create_context(devices, options = {}, &block)
|
16
17
|
@@callbacks.push( block ) if block
|
17
18
|
devs = [devices].flatten
|
18
|
-
pointer =
|
19
|
+
pointer = MemoryPointer::new( Device, devs.size)
|
19
20
|
pointer.write_array_of_pointer(devs)
|
20
21
|
properties = get_context_properties( options )
|
21
22
|
user_data = options[:user_data]
|
22
|
-
error =
|
23
|
+
error = MemoryPointer::new( :cl_int )
|
23
24
|
ptr = clCreateContext(properties, devs.size, pointer, block, user_data, error)
|
24
25
|
error_check(error.read_cl_int)
|
25
26
|
return Context::new(ptr, false)
|
@@ -31,17 +32,17 @@ module OpenCL
|
|
31
32
|
#
|
32
33
|
# * +type+ - a Device::Type
|
33
34
|
# * +options+ - a hash containing named options
|
34
|
-
# * +block+ - if provided, a callback invoked when error arise in the context. Signature of the callback is { |
|
35
|
+
# * +block+ - if provided, a callback invoked when error arise in the context. Signature of the callback is { |Pointer to null terminated c string, Pointer to binary data, :size_t number of bytes of binary data, Pointer to user_data| ... }
|
35
36
|
#
|
36
37
|
# ==== Options
|
37
38
|
#
|
38
39
|
# * +:properties+ - a list of :cl_context_properties
|
39
|
-
# * +:user_data+ - an
|
40
|
+
# * +:user_data+ - an Pointer or an object that can be converted into one using to_ptr. The pointer is passed to the callback.
|
40
41
|
def self.create_context_from_type(type, options = {}, &block)
|
41
42
|
@@callbacks.push( block ) if block
|
42
43
|
properties = get_context_properties( options )
|
43
44
|
user_data = options[:user_data]
|
44
|
-
error =
|
45
|
+
error = MemoryPointer::new( :cl_int )
|
45
46
|
ptr = clCreateContextFromType(properties, type, block, user_data, error)
|
46
47
|
error_check(error.read_cl_int)
|
47
48
|
return Context::new(ptr, false)
|
@@ -77,14 +78,14 @@ module OpenCL
|
|
77
78
|
# :method: properties
|
78
79
|
# the Array of :cl_context_properties used to create the Context
|
79
80
|
def properties
|
80
|
-
ptr1 =
|
81
|
+
ptr1 = MemoryPointer::new( :size_t, 1)
|
81
82
|
error = OpenCL.clGetContextInfo(self, PROPERTIES, 0, nil, ptr1)
|
82
83
|
error_check(error)
|
83
84
|
return [] if ptr1.read_size_t == 0
|
84
|
-
ptr2 =
|
85
|
+
ptr2 = MemoryPointer::new( ptr1.read_size_t )
|
85
86
|
error = OpenCL.clGetContextInfo(self, PROPERTIES, ptr1.read_size_t, ptr2, nil)
|
86
87
|
error_check(error)
|
87
|
-
arr = ptr2.get_array_of_cl_context_properties(0, ptr1.read_size_t/
|
88
|
+
arr = ptr2.get_array_of_cl_context_properties(0, ptr1.read_size_t/ OpenCL.find_type(:cl_context_properties).size)
|
88
89
|
return arr if arr.length == 1 and arr[0].to_i == 0
|
89
90
|
arr_2 = []
|
90
91
|
while arr.length > 2 do
|
@@ -110,12 +111,12 @@ module OpenCL
|
|
110
111
|
# Returns the number of devices associated to the Context
|
111
112
|
def num_devices
|
112
113
|
d_n = 0
|
113
|
-
ptr =
|
114
|
+
ptr = MemoryPointer::new( :size_t )
|
114
115
|
error = OpenCL.clGetContextInfo(self, DEVICES, 0, nil, ptr)
|
115
116
|
error_check(error)
|
116
117
|
d_n = ptr.read_size_t / Platform.size
|
117
118
|
# else
|
118
|
-
# ptr =
|
119
|
+
# ptr = MemoryPointer::new( :cl_uint )
|
119
120
|
# error = OpenCL.clGetContextInfo(self, OpenCL::Context::NUM_DEVICES, ptr.size, ptr, nil)
|
120
121
|
# OpenCL.error_check(error)
|
121
122
|
# d_n = ptr.read_cl_uint
|
@@ -126,7 +127,7 @@ module OpenCL
|
|
126
127
|
# Returns an Array of Device associated to the Context
|
127
128
|
def devices
|
128
129
|
n = self.num_devices
|
129
|
-
ptr2 =
|
130
|
+
ptr2 = MemoryPointer::new( Device, n )
|
130
131
|
error = OpenCL.clGetContextInfo(self, DEVICES, Device.size*n, ptr2, nil)
|
131
132
|
error_check(error)
|
132
133
|
return ptr2.get_array_of_pointer(0, n).collect { |device_ptr|
|
@@ -146,15 +147,15 @@ module OpenCL
|
|
146
147
|
def supported_image_formats( image_type, options = {} )
|
147
148
|
flags = get_flags( options )
|
148
149
|
flags = Mem::Flags::READ_WRITE if flags.to_i == 0 #ensure default READ_WRITE, Intel bug.
|
149
|
-
num_image_formats =
|
150
|
+
num_image_formats = MemoryPointer::new( :cl_uint )
|
150
151
|
error = OpenCL.clGetSupportedImageFormats( self, flags, image_type, 0, nil, num_image_formats )
|
151
152
|
error_check(error)
|
152
153
|
num_entries = num_image_formats.read_cl_uint
|
153
|
-
image_formats =
|
154
|
+
image_formats = MemoryPointer::new( ImageFormat, num_entries )
|
154
155
|
error = OpenCL.clGetSupportedImageFormats( self, flags, image_type, num_entries, image_formats, nil )
|
155
156
|
error_check(error)
|
156
157
|
return num_entries.times.collect { |i|
|
157
|
-
ImageFormat::
|
158
|
+
ImageFormat::new( image_formats + i * ImageFormat.size )
|
158
159
|
}
|
159
160
|
end
|
160
161
|
|
@@ -357,7 +358,7 @@ module OpenCL
|
|
357
358
|
#
|
358
359
|
# * +input_programs+ - a single or an Array of Program
|
359
360
|
# * +options+ - a Hash containing named options
|
360
|
-
# * +block+ - if provided, a callback invoked when the Program is built. Signature of the callback is { |Program,
|
361
|
+
# * +block+ - if provided, a callback invoked when the Program is built. Signature of the callback is { |Program, Pointer to user_data| ... }
|
361
362
|
#
|
362
363
|
# ==== Options
|
363
364
|
#
|