opencl_ruby_ffi 1.3.7 → 1.3.12
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.rb +1 -0
- data/lib/opencl_ruby_ffi/Buffer.rb +7 -1
- data/lib/opencl_ruby_ffi/CommandQueue.rb +10 -4
- data/lib/opencl_ruby_ffi/Context.rb +82 -20
- data/lib/opencl_ruby_ffi/Device.rb +90 -11
- data/lib/opencl_ruby_ffi/Event.rb +17 -17
- data/lib/opencl_ruby_ffi/Image.rb +7 -1
- data/lib/opencl_ruby_ffi/Kernel.rb +68 -58
- data/lib/opencl_ruby_ffi/Mem.rb +13 -7
- data/lib/opencl_ruby_ffi/Pipe.rb +8 -0
- data/lib/opencl_ruby_ffi/Platform.rb +36 -11
- data/lib/opencl_ruby_ffi/Program.rb +21 -17
- data/lib/opencl_ruby_ffi/SVM.rb +1 -1
- data/lib/opencl_ruby_ffi/Sampler.rb +7 -6
- data/lib/opencl_ruby_ffi/ext.rb +1 -0
- data/lib/opencl_ruby_ffi/intel/unified_shared_memory_preview.rb +67 -40
- data/lib/opencl_ruby_ffi/khr/device_uuid.rb +119 -0
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base.rb +292 -98
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base_gen.rb +83 -173
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_library.rb +181 -0
- data/lib/opencl_ruby_ffi/opencl_types.rb +4 -0
- data/opencl_ruby_ffi.gemspec +2 -2
- metadata +6 -4
data/lib/opencl_ruby_ffi/Mem.rb
CHANGED
@@ -46,17 +46,17 @@ module OpenCL
|
|
46
46
|
|
47
47
|
# Returns the Context associated to the Mem
|
48
48
|
def context
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
@_context ||= begin
|
50
|
+
ptr = MemoryPointer::new( Context )
|
51
|
+
error = OpenCL.clGetMemObjectInfo(self, CONTEXT, Context.size, ptr, nil)
|
52
|
+
error_check(error)
|
53
|
+
Context::new( ptr.read_pointer )
|
54
|
+
end
|
54
55
|
end
|
55
56
|
|
56
57
|
# Returns the Platform associated to the Mem
|
57
58
|
def platform
|
58
|
-
|
59
|
-
@_platform = self.context.platform
|
59
|
+
@_platform ||= self.context.platform
|
60
60
|
end
|
61
61
|
|
62
62
|
# Returns the texture_target argument specified in create_from_GL_texture for Mem
|
@@ -130,11 +130,17 @@ module OpenCL
|
|
130
130
|
extend InnerGenerator
|
131
131
|
|
132
132
|
get_info("Mem", :cl_bool, "uses_svm_pointer", true)
|
133
|
+
end
|
134
|
+
|
135
|
+
module OpenCL30
|
136
|
+
extend InnerGenerator
|
133
137
|
|
138
|
+
get_info_array("Mem", :cl_mem_properties, "properties")
|
134
139
|
end
|
135
140
|
|
136
141
|
register_extension( :v11, OpenCL11, "platform.version_number >= 1.1" )
|
137
142
|
register_extension( :v20, OpenCL20, "platform.version_number >= 2.0" )
|
143
|
+
register_extension( :v30, OpenCL30, "platform.version_number >= 3.0" )
|
138
144
|
|
139
145
|
end
|
140
146
|
|
data/lib/opencl_ruby_ffi/Pipe.rb
CHANGED
@@ -34,6 +34,14 @@ module OpenCL
|
|
34
34
|
get_info("Pipe", :cl_uint, "packet_size")
|
35
35
|
get_info("Pipe", :cl_uint, "max_packets")
|
36
36
|
|
37
|
+
module OpenCL30
|
38
|
+
extend InnerGenerator
|
39
|
+
|
40
|
+
get_info_array("Pipe", :cl_pipe_properties, "properties")
|
41
|
+
end
|
42
|
+
|
43
|
+
register_extension( :v30, Pipe::OpenCL30, "platform.version_number >= 3.0" )
|
44
|
+
|
37
45
|
end
|
38
46
|
|
39
47
|
end
|
@@ -63,18 +63,18 @@ module OpenCL
|
|
63
63
|
|
64
64
|
# Returns an Array of Platform containing the available OpenCL platforms
|
65
65
|
def self.get_platforms
|
66
|
-
|
67
|
-
|
66
|
+
@_platforms ||= begin
|
67
|
+
ptr1 = MemoryPointer::new(:cl_uint , 1)
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
69
|
+
error = clGetPlatformIDs(0, nil, ptr1)
|
70
|
+
error_check(error)
|
71
|
+
ptr2 = MemoryPointer::new(:pointer, ptr1.read_uint)
|
72
|
+
error = clGetPlatformIDs(ptr1.read_uint(), ptr2, nil)
|
73
|
+
error_check(error)
|
74
|
+
ptr2.get_array_of_pointer(0,ptr1.read_uint()).collect { |platform_ptr|
|
75
|
+
Platform::new(platform_ptr, false)
|
76
|
+
}
|
77
|
+
end
|
78
78
|
end
|
79
79
|
|
80
80
|
class << self
|
@@ -181,8 +181,33 @@ module OpenCL
|
|
181
181
|
|
182
182
|
end
|
183
183
|
|
184
|
+
module OpenCL30
|
185
|
+
extend InnerGenerator
|
186
|
+
|
187
|
+
def numeric_version
|
188
|
+
ptr = MemoryPointer::new( :cl_version )
|
189
|
+
error = OpenCL.clGetPlatformInfo( self, NUMERIC_VERSION, 4, ptr, nil)
|
190
|
+
error_check(error)
|
191
|
+
return Version::from_int(ptr.read_cl_version)
|
192
|
+
end
|
193
|
+
|
194
|
+
def extensions_with_version
|
195
|
+
sz = MemoryPointer::new( :size_t )
|
196
|
+
error = OpenCL.clGetPlatformInfo( self, EXTENSIONS_WITH_VERSION, 0, nil, sz)
|
197
|
+
error_check(error)
|
198
|
+
sz = sz.read_size_t
|
199
|
+
ptr = MemoryPointer::new( sz )
|
200
|
+
error = OpenCL.clGetPlatformInfo( self, EXTENSIONS_WITH_VERSION, sz, ptr, nil)
|
201
|
+
error_check(error)
|
202
|
+
nvsz = NameVersion.size
|
203
|
+
return (sz/nvsz).times.collect { |i| NameVersion::new(ptr + i*nvsz) }
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
|
184
208
|
register_extension( :v12, OpenCL12, "version_number >= 1.2" )
|
185
209
|
register_extension( :v21, OpenCL21, "version_number >= 2.1" )
|
210
|
+
register_extension( :v30, OpenCL30, "version_number >= 3.0" )
|
186
211
|
|
187
212
|
end
|
188
213
|
|
@@ -280,7 +280,11 @@ module OpenCL
|
|
280
280
|
build_status.each { |d,s|
|
281
281
|
success |= true if s.to_i == BuildStatus::SUCCESS
|
282
282
|
}
|
283
|
-
|
283
|
+
begin
|
284
|
+
return "#<#{self.class.name}: #{success ? kernel_names : ""}>"
|
285
|
+
rescue
|
286
|
+
return "#<#{self.class.name}: >"
|
287
|
+
end
|
284
288
|
end
|
285
289
|
|
286
290
|
alias_method :orig_method_missing, :method_missing
|
@@ -304,17 +308,17 @@ module OpenCL
|
|
304
308
|
|
305
309
|
# Returns the Platform associated with the Program
|
306
310
|
def platform
|
307
|
-
|
308
|
-
@_platform = self.context.platform
|
311
|
+
@_platform ||= self.context.platform
|
309
312
|
end
|
310
313
|
|
311
314
|
# Returns the Context the Program is associated to
|
312
315
|
def context
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
316
|
+
@_context ||= begin
|
317
|
+
ptr = MemoryPointer::new( Context )
|
318
|
+
error = OpenCL.clGetProgramInfo(self, CONTEXT, Context.size, ptr, nil)
|
319
|
+
error_check(error)
|
320
|
+
Context::new( ptr.read_pointer )
|
321
|
+
end
|
318
322
|
end
|
319
323
|
|
320
324
|
get_info("Program", :cl_uint, "num_devices", true)
|
@@ -322,15 +326,15 @@ module OpenCL
|
|
322
326
|
|
323
327
|
# Returns the Array of Device the Program is associated with
|
324
328
|
def devices
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
329
|
+
@_devices ||= begin
|
330
|
+
n = self.num_devices
|
331
|
+
ptr2 = MemoryPointer::new( Device, n )
|
332
|
+
error = OpenCL.clGetProgramInfo(self, DEVICES, Device.size*n, ptr2, nil)
|
333
|
+
error_check(error)
|
334
|
+
ptr2.get_array_of_pointer(0, n).collect { |device_ptr|
|
335
|
+
Device::new(device_ptr)
|
336
|
+
}
|
337
|
+
end
|
334
338
|
end
|
335
339
|
|
336
340
|
get_info("Program", :string, "source")
|
data/lib/opencl_ruby_ffi/SVM.rb
CHANGED
@@ -158,7 +158,7 @@ module OpenCL
|
|
158
158
|
# ==== Returns
|
159
159
|
#
|
160
160
|
# the Event associated with the command
|
161
|
-
def self.enqueue_svm_memfill(command_queue, svm_ptr, pattern,
|
161
|
+
def self.enqueue_svm_memfill(command_queue, svm_ptr, pattern, options = {})
|
162
162
|
error_check(INVALID_OPERATION) if command_queue.context.platform.version_number < 2.0
|
163
163
|
num_events, events = get_event_wait_list( options )
|
164
164
|
pattern_size = pattern.size
|
@@ -30,7 +30,7 @@ module OpenCL
|
|
30
30
|
prop_size += 2 if options[:mip_filter_mode]
|
31
31
|
prop_size += 2 if options[:lod_min]
|
32
32
|
prop_size += 2 if options[:lod_max]
|
33
|
-
properties = MemoryPointer::new( :
|
33
|
+
properties = MemoryPointer::new( :cl_sampler_properties, prop_size )
|
34
34
|
properties[0].write_cl_sampler_info( Sampler::NORMALIZED_COORDS )
|
35
35
|
properties[1].write_cl_bool( normalized_coords )
|
36
36
|
properties[2].write_cl_sampler_info( Sampler::ADDRESSING_MODE )
|
@@ -71,11 +71,12 @@ module OpenCL
|
|
71
71
|
|
72
72
|
# Returns the context associated with the Sampler
|
73
73
|
def context
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
@_context ||= begin
|
75
|
+
ptr = MemoryPointer::new( Context )
|
76
|
+
error = OpenCL.clGetSamplerInfo(self, CONTEXT, Context.size, ptr, nil)
|
77
|
+
error_check(error)
|
78
|
+
Context::new( ptr.read_pointer )
|
79
|
+
end
|
79
80
|
end
|
80
81
|
|
81
82
|
get_info("Sampler", :cl_uint, "reference_count")
|
data/lib/opencl_ruby_ffi/ext.rb
CHANGED
@@ -228,6 +228,23 @@ module OpenCL
|
|
228
228
|
get_info("Device", :cl_unified_shared_memory_capabilities_intel, "device_shared_mem_capabilities_intel")
|
229
229
|
get_info("Device", :cl_unified_shared_memory_capabilities_intel, "cross_device_mem_capabilities_intel")
|
230
230
|
get_info("Device", :cl_unified_shared_memory_capabilities_intel, "shared_system_mem_capabilities_intel")
|
231
|
+
|
232
|
+
def clGetDeviceGlobalVariablePointerINTEL
|
233
|
+
@_clGetDeviceGlobalVariablePointerINTEL ||= begin
|
234
|
+
p = platform.get_extension_function("clGetDeviceGlobalVariablePointerINTEL", :cl_int, [Device, Program, :string, :pointer, :pointer])
|
235
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
236
|
+
p
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def get_global_variable_pointer_intel(program, name)
|
241
|
+
pSize = MemoryPointer::new(:size_t)
|
242
|
+
pAddr = MemoryPointer::new(:pointer)
|
243
|
+
error = clGetDeviceGlobalVariablePointerINTEL.call(self, program, name, pSize, pAddr)
|
244
|
+
error_check(error)
|
245
|
+
return USMPointer::new(pAddr.read_pointer.slice(0, pSize.read_size_t), self)
|
246
|
+
end
|
247
|
+
|
231
248
|
end
|
232
249
|
register_extension( :cl_intel_unified_shared_memory_preview, UnifiedSharedMemoryPreviewINTEL, "extensions.include?(\"cl_intel_unified_shared_memory_preview\")" )
|
233
250
|
end
|
@@ -282,38 +299,43 @@ module OpenCL
|
|
282
299
|
extend InnerGenerator
|
283
300
|
|
284
301
|
def clGetMemAllocInfoINTEL
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
302
|
+
@_clGetMemAllocInfoINTEL ||= begin
|
303
|
+
p = platform.get_extension_function("clGetMemAllocInfoINTEL", :cl_int, [Context, :pointer, :cl_mem_info_intel, :size_t, :pointer, :pointer])
|
304
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
305
|
+
p
|
306
|
+
end
|
289
307
|
end
|
290
308
|
|
291
309
|
def clHostMemAllocINTEL
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
310
|
+
@_clHostMemAllocINTEL ||= begin
|
311
|
+
p = platform.get_extension_function("clHostMemAllocINTEL", :pointer, [Context, :pointer, :size_t, :cl_uint, :pointer])
|
312
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
313
|
+
p
|
314
|
+
end
|
296
315
|
end
|
297
316
|
|
298
317
|
def clDeviceMemAllocINTEL
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
318
|
+
@_clDeviceMemAllocINTEL ||= begin
|
319
|
+
p = platform.get_extension_function("clDeviceMemAllocINTEL", :pointer, [Context, Device, :pointer, :size_t, :cl_uint, :pointer])
|
320
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
321
|
+
p
|
322
|
+
end
|
303
323
|
end
|
304
324
|
|
305
325
|
def clSharedMemAllocINTEL
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
326
|
+
@_clSharedMemAllocINTEL ||= begin
|
327
|
+
p = platform.get_extension_function("clSharedMemAllocINTEL", :pointer, [Context, Device, :pointer, :size_t, :cl_uint, :pointer])
|
328
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
329
|
+
p
|
330
|
+
end
|
310
331
|
end
|
311
332
|
|
312
333
|
def clMemFreeINTEL
|
313
|
-
return @_clMemFreeINTEL
|
314
|
-
|
315
|
-
|
316
|
-
|
334
|
+
return @_clMemFreeINTEL ||= begin
|
335
|
+
p = platform.get_extension_function("clMemFreeINTEL", :cl_int, [Context, :pointer])
|
336
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
337
|
+
p
|
338
|
+
end
|
317
339
|
end
|
318
340
|
|
319
341
|
def get_mem_properties_intel(properties)
|
@@ -414,10 +436,11 @@ module OpenCL
|
|
414
436
|
extend InnerGenerator
|
415
437
|
|
416
438
|
def clSetKernelArgMemPointerINTEL
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
439
|
+
@_clSetKernelArgMemPointerINTEL ||= begin
|
440
|
+
p = context.platform.get_extension_function("clSetKernelArgMemPointerINTEL", :cl_int, Kernel, :cl_uint, :pointer)
|
441
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
442
|
+
p
|
443
|
+
end
|
421
444
|
end
|
422
445
|
|
423
446
|
def set_arg_mem_pointer_intel(index, usm_pointer)
|
@@ -508,31 +531,35 @@ module OpenCL
|
|
508
531
|
extend InnerGenerator
|
509
532
|
|
510
533
|
def clEnqueueMemFillINTEL
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
534
|
+
@_clEnqueueMemFillINTEL ||= begin
|
535
|
+
p = platform.get_extension_function("clEnqueueMemFillINTEL", :cl_int, [CommandQueue, :pointer, :pointer, :size_t, :size_t, :cl_uint, :pointer, :pointer])
|
536
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
537
|
+
p
|
538
|
+
end
|
515
539
|
end
|
516
540
|
|
517
541
|
def clEnqueueMemcpyINTEL
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
542
|
+
@_clEnqueueMemcpyINTEL ||= begin
|
543
|
+
p = platform.get_extension_function("clEnqueueMemcpyINTEL", :cl_int, [CommandQueue, :cl_bool, :pointer, :pointer, :size_t, :cl_uint, :pointer, :pointer])
|
544
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
545
|
+
p
|
546
|
+
end
|
522
547
|
end
|
523
548
|
|
524
549
|
def clEnqueueMigrateMemINTEL
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
550
|
+
@_clEnqueueMigrateMemINTEL ||= begin
|
551
|
+
p = platform.get_extension_function("clEnqueueMigrateMemINTEL", :cl_int, [CommandQueue, :pointer, :size_t, :cl_mem_migration_flags_intel, :cl_uint, :pointer, :pointer])
|
552
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
553
|
+
p
|
554
|
+
end
|
529
555
|
end
|
530
556
|
|
531
557
|
def clEnqueueMemAdviseINTEL
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
558
|
+
@_clEnqueueMemAdviseINTEL ||= begin
|
559
|
+
p = platform.get_extension_function("clEnqueueMemAdviseINTEL", :cl_int, [CommandQueue, :pointer, :size_t, :cl_mem_advice_intel, :cl_uint, :pointer, :pointer])
|
560
|
+
error_check(OpenCL::INVALID_OPERATION) unless p
|
561
|
+
p
|
562
|
+
end
|
536
563
|
end
|
537
564
|
|
538
565
|
def enqueue_mem_fill_intel(usm_ptr, pattern, options = {})
|
@@ -0,0 +1,119 @@
|
|
1
|
+
using OpenCLRefinements if RUBY_VERSION.scan(/\d+/).collect(&:to_i).first >= 2
|
2
|
+
|
3
|
+
module OpenCL
|
4
|
+
|
5
|
+
UUID_SIZE_KHR = 16
|
6
|
+
LUID_SIZE_KHR = 8
|
7
|
+
|
8
|
+
DEVICE_UUID_KHR = 0x106A
|
9
|
+
DRIVER_UUID_KHR = 0x106B
|
10
|
+
DEVICE_LUID_VALID_KHR = 0x106C
|
11
|
+
DEVICE_LUID_KHR = 0x106D
|
12
|
+
DEVICE_NODE_MASK_KHR = 0x106E
|
13
|
+
|
14
|
+
class UUID < Struct
|
15
|
+
layout :id, [ OpenCL.find_type(:cl_uchar), UUID_SIZE_KHR ]
|
16
|
+
def to_s
|
17
|
+
a = self[:id].to_a
|
18
|
+
s = ""
|
19
|
+
s << "%02x" % a[15]
|
20
|
+
s << "%02x" % a[14]
|
21
|
+
s << "%02x" % a[13]
|
22
|
+
s << "%02x" % a[12]
|
23
|
+
s << "-"
|
24
|
+
s << "%02x" % a[11]
|
25
|
+
s << "%02x" % a[10]
|
26
|
+
s << "-"
|
27
|
+
s << "%02x" % a[9]
|
28
|
+
s << "%02x" % a[8]
|
29
|
+
s << "-"
|
30
|
+
s << "%02x" % a[7]
|
31
|
+
s << "%02x" % a[6]
|
32
|
+
s << "-"
|
33
|
+
s << "%02x" % a[5]
|
34
|
+
s << "%02x" % a[4]
|
35
|
+
s << "%02x" % a[3]
|
36
|
+
s << "%02x" % a[2]
|
37
|
+
s << "%02x" % a[1]
|
38
|
+
s << "%02x" % a[0]
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.from_string(uuid)
|
42
|
+
new.from_string(uuid)
|
43
|
+
end
|
44
|
+
|
45
|
+
def from_string(uuid)
|
46
|
+
m = uuid.match(/(\h\h)(\h\h)(\h\h)(\h\h)-(\h\h)(\h\h)-(\h\h)(\h\h)-(\h\h)(\h\h)-(\h\h)(\h\h)(\h\h)(\h\h)(\h\h)(\h\h)/)
|
47
|
+
raise "invalid format" unless m
|
48
|
+
UUID_SIZE_KHR.times { |i|
|
49
|
+
self[:id][UUID_SIZE_KHR-1-i] = m[i+1].to_i(16)
|
50
|
+
}
|
51
|
+
self
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class LUID < Struct
|
56
|
+
layout :id, [ OpenCL.find_type(:cl_uchar), LUID_SIZE_KHR ]
|
57
|
+
def to_s
|
58
|
+
a = self[:id].to_a
|
59
|
+
s = ""
|
60
|
+
s << "%02x" % a[7]
|
61
|
+
s << "%02x" % a[6]
|
62
|
+
s << "%02x" % a[5]
|
63
|
+
s << "%02x" % a[4]
|
64
|
+
s << "%02x" % a[3]
|
65
|
+
s << "%02x" % a[2]
|
66
|
+
s << "%02x" % a[1]
|
67
|
+
s << "%02x" % a[0]
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.from_string(uuid)
|
71
|
+
new.from_string(uuid)
|
72
|
+
end
|
73
|
+
|
74
|
+
def from_string(uuid)
|
75
|
+
m = uuid.match(/(\h\h)(\h\h)(\h\h)(\h\h)(\h\h)(\h\h)(\h\h)(\h\h)/)
|
76
|
+
raise "invalid format" unless m
|
77
|
+
LUID_SIZE_KHR.times { |i|
|
78
|
+
self[:id][LUID_SIZE_KHR-1-i] = m[i+1].to_i(16)
|
79
|
+
}
|
80
|
+
self
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class Device
|
85
|
+
UUID_KHR = 0x106A
|
86
|
+
LUID_VALID_KHR = 0x106C
|
87
|
+
LUID_KHR = 0x106D
|
88
|
+
NODE_MASK_KHR = 0x106E
|
89
|
+
|
90
|
+
module KHRDeviceUUID
|
91
|
+
extend InnerGenerator
|
92
|
+
get_info("Device", :cl_bool, "luid_valid_khr")
|
93
|
+
get_info("Device", :cl_uint, "node_mask_khr")
|
94
|
+
|
95
|
+
def uuid_khr
|
96
|
+
id = UUID.new
|
97
|
+
error = OpenCL.clGetDeviceInfo( self, UUID_KHR, UUID_SIZE_KHR, id, nil)
|
98
|
+
error_check(error)
|
99
|
+
return id
|
100
|
+
end
|
101
|
+
|
102
|
+
def driver_uuid_khr
|
103
|
+
id = UUID.new
|
104
|
+
error = OpenCL.clGetDeviceInfo( self, DRIVER_UUID_KHR, UUID_SIZE_KHR, id, nil)
|
105
|
+
error_check(error)
|
106
|
+
return id
|
107
|
+
end
|
108
|
+
|
109
|
+
def luid_khr
|
110
|
+
id = LUID.new
|
111
|
+
error = OpenCL.clGetDeviceInfo( self, LUID_KHR, LUID_SIZE_KHR, id, nil)
|
112
|
+
error_check(error)
|
113
|
+
return id
|
114
|
+
end
|
115
|
+
end
|
116
|
+
register_extension( :cl_khr_device_uuid, KHRDeviceUUID, "extensions.include?(\"cl_khr_device_uuid\")" )
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|