opencl_ruby_ffi 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/opencl_ruby_ffi/CommandQueue.rb +30 -3
- data/lib/opencl_ruby_ffi/Context.rb +20 -0
- data/lib/opencl_ruby_ffi/Device.rb +34 -5
- data/lib/opencl_ruby_ffi/Kernel.rb +109 -0
- data/lib/opencl_ruby_ffi/Platform.rb +6 -1
- data/lib/opencl_ruby_ffi/Program.rb +29 -0
- data/lib/opencl_ruby_ffi/SVM.rb +37 -0
- data/lib/opencl_ruby_ffi/opencl_ruby_ffi_base_gen.rb +79 -14
- data/opencl_ruby_ffi.gemspec +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: dd555efd1a1de7fe705c6569cc5d16fce21eb6c4
         | 
| 4 | 
            +
              data.tar.gz: d505cc68ce876b9edcd04cd1734b834e6e8f4083
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 79de2103fa41ccd3bb3fa067a5aebbd3dd2e6b58c9abacfa457a9134bd0e0f8e9bd0f61d89bd36101b24f30206b3166192371236d11be9915e48417921f20991
         | 
| 7 | 
            +
              data.tar.gz: 9f057c582f34c69e177f14f9d42ecfb03c3e883e0f00a5b58982f04f13ff31d163ccd63d20a8e5433db4dee98c34fba3bdcbe1907a15a49ed11746f1d1b44b74
         | 
| @@ -257,7 +257,7 @@ module OpenCL | |
| 257 257 |  | 
| 258 258 | 
             
                r = FFI::MemoryPointer::new( :size_t, 3 )
         | 
| 259 259 | 
             
                (0..2).each { |i| r[i].write_size_t(0) }
         | 
| 260 | 
            -
                region[0.. | 
| 260 | 
            +
                region[0..2].each_with_index { |e, i|
         | 
| 261 261 | 
             
                  r[i].write_size_t(e)
         | 
| 262 262 | 
             
                }
         | 
| 263 263 |  | 
| @@ -334,7 +334,7 @@ module OpenCL | |
| 334 334 |  | 
| 335 335 | 
             
                r = FFI::MemoryPointer::new( :size_t, 3 )
         | 
| 336 336 | 
             
                (0..2).each { |i| r[i].write_size_t(0) }
         | 
| 337 | 
            -
                region[0.. | 
| 337 | 
            +
                region[0..2].each_with_index { |e, i|
         | 
| 338 338 | 
             
                  r[i].write_size_t(e)
         | 
| 339 339 | 
             
                }
         | 
| 340 340 |  | 
| @@ -405,7 +405,7 @@ module OpenCL | |
| 405 405 |  | 
| 406 406 | 
             
                r = FFI::MemoryPointer::new( :size_t, 3 )
         | 
| 407 407 | 
             
                (0..2).each { |i| r[i].write_size_t(0) }
         | 
| 408 | 
            -
                region[0.. | 
| 408 | 
            +
                region[0..2].each_with_index { |e, i|
         | 
| 409 409 | 
             
                  r[i].write_size_t(e)
         | 
| 410 410 | 
             
                }
         | 
| 411 411 |  | 
| @@ -1071,6 +1071,14 @@ module OpenCL | |
| 1071 1071 | 
             
                  return Device::new( ptr.read_pointer )
         | 
| 1072 1072 | 
             
                end
         | 
| 1073 1073 |  | 
| 1074 | 
            +
                # Return the default CommandQueue for the underlying Device
         | 
| 1075 | 
            +
                def device_default
         | 
| 1076 | 
            +
                  ptr = FFI::MemoryPointer::new( CommandQueue )
         | 
| 1077 | 
            +
                  error = OpenCL.clGetCommandQueueInfo(self, DEVICE_DEFAULT, CommandQueue.size, ptr, nil)
         | 
| 1078 | 
            +
                  error_check(error)
         | 
| 1079 | 
            +
                  return CommandQueue::new( ptr.read_pointer )
         | 
| 1080 | 
            +
                end
         | 
| 1081 | 
            +
             | 
| 1074 1082 | 
             
                ##
         | 
| 1075 1083 | 
             
                # :method: reference_count
         | 
| 1076 1084 | 
             
                # Returns the reference count of the CommandQueue
         | 
| @@ -1734,6 +1742,25 @@ module OpenCL | |
| 1734 1742 | 
             
                  return OpenCL.enqueue_svm_unmap( self, svm_ptr, options )
         | 
| 1735 1743 | 
             
                end
         | 
| 1736 1744 |  | 
| 1745 | 
            +
                # Enqueues a command to migrate SVM memory area
         | 
| 1746 | 
            +
                # ==== Attributes
         | 
| 1747 | 
            +
                #
         | 
| 1748 | 
            +
                # * +svm_ptrs+ - a single or an Array of SVM memory area to migrate
         | 
| 1749 | 
            +
                # * +options+ - a hash containing named options
         | 
| 1750 | 
            +
                #
         | 
| 1751 | 
            +
                # ==== Options
         | 
| 1752 | 
            +
                #
         | 
| 1753 | 
            +
                # * +:sizes+ - a single or an Array of sizes to transfer
         | 
| 1754 | 
            +
                # * +:flags+ - a single or an Array of :cl_mem_migration flags
         | 
| 1755 | 
            +
                # * +:event_wait_list+ - if provided, a list of Event to wait upon before executing the command
         | 
| 1756 | 
            +
                #
         | 
| 1757 | 
            +
                # ==== Returns
         | 
| 1758 | 
            +
                #
         | 
| 1759 | 
            +
                # the Event associated with the command
         | 
| 1760 | 
            +
                def enqueue_svm_migrate_mem( svn_ptrs, options = {} )
         | 
| 1761 | 
            +
                  return OpenCL.enqueue_svm_migrate_mem( self, svn_ptrs, options = {} )
         | 
| 1762 | 
            +
                end
         | 
| 1763 | 
            +
             | 
| 1737 1764 | 
             
              end
         | 
| 1738 1765 |  | 
| 1739 1766 | 
             
            end
         | 
| @@ -47,6 +47,13 @@ module OpenCL | |
| 47 47 | 
             
                return Context::new(ptr, false)
         | 
| 48 48 | 
             
              end
         | 
| 49 49 |  | 
| 50 | 
            +
              def self.set_default_device_command_queue( context, device, command_queue )
         | 
| 51 | 
            +
                error_check(INVALID_OPERATION) if context.platform.version_number < 2.1
         | 
| 52 | 
            +
                error = clSetDefaultDeviceCommandQueue( context, device, command_queue )
         | 
| 53 | 
            +
                error_check(error)
         | 
| 54 | 
            +
                return context
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 50 57 | 
             
              #Maps the cl_context object of OpenCL
         | 
| 51 58 | 
             
              class Context
         | 
| 52 59 | 
             
                include InnerInterface
         | 
| @@ -361,6 +368,15 @@ module OpenCL | |
| 361 368 | 
             
                  return OpenCL.create_program_with_source(self, strings)
         | 
| 362 369 | 
             
                end
         | 
| 363 370 |  | 
| 371 | 
            +
                # Create a Program from an intermediate level representation in the Context
         | 
| 372 | 
            +
                #
         | 
| 373 | 
            +
                # ==== Attributes
         | 
| 374 | 
            +
                #
         | 
| 375 | 
            +
                # * +il+ - a binary string containing the intermediate level representation of the program
         | 
| 376 | 
            +
                def create_program_with_il(il)
         | 
| 377 | 
            +
                  return OpenCL.create_program_with_il(self, il)
         | 
| 378 | 
            +
                end
         | 
| 379 | 
            +
             | 
| 364 380 | 
             
                # Creates a Sampler in the Context
         | 
| 365 381 | 
             
                #
         | 
| 366 382 | 
             
                # ==== Options
         | 
| @@ -412,6 +428,10 @@ module OpenCL | |
| 412 428 | 
             
                  return OpenCL.svm_free(self, svm_pointer)
         | 
| 413 429 | 
             
                end
         | 
| 414 430 |  | 
| 431 | 
            +
                def set_default_device_command_queue( device, command_queue )
         | 
| 432 | 
            +
                  return OpenCL.set_default_device_command_queue( self, device, command_queue )
         | 
| 433 | 
            +
                end
         | 
| 434 | 
            +
             | 
| 415 435 | 
             
              end
         | 
| 416 436 |  | 
| 417 437 | 
             
            end
         | 
| @@ -29,6 +29,23 @@ module OpenCL | |
| 29 29 | 
             
                }
         | 
| 30 30 | 
             
              end
         | 
| 31 31 |  | 
| 32 | 
            +
              def self.get_device_and_host_timer( device )
         | 
| 33 | 
            +
                error_check(INVALID_OPERATION) if device.platform.version_number < 2.1
         | 
| 34 | 
            +
                device_timestamp_p = FFI::MemoryPointer::new( :cl_ulong )
         | 
| 35 | 
            +
                host_timestamp_p = FFI::MemoryPointer::new( :cl_ulong )
         | 
| 36 | 
            +
                error = clGetDeviceAndHostTimer( device, device_timestamp_p, host_timestamp_p)
         | 
| 37 | 
            +
                error_check(error)
         | 
| 38 | 
            +
                return [ device_timestamp_p.read_cl_ulong, host_timestamp_p.read_cl_ulong ]
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              def self.get_device_and_host_timer( device )
         | 
| 42 | 
            +
                error_check(INVALID_OPERATION) if device.platform.version_number < 2.1
         | 
| 43 | 
            +
                host_timestamp_p = FFI::MemoryPointer::new( :cl_ulong )
         | 
| 44 | 
            +
                error = clGetHostTimer( device, host_timestamp_p)
         | 
| 45 | 
            +
                error_check(error)
         | 
| 46 | 
            +
                return host_timestamp_p.read_cl_ulong
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 32 49 | 
             
              # Maps the cl_device_id object of OpenCL
         | 
| 33 50 | 
             
              class Device
         | 
| 34 51 | 
             
                include InnerInterface
         | 
| @@ -82,7 +99,11 @@ module OpenCL | |
| 82 99 | 
             
                  return vers_strings.collect { |s| s.scan(/(\d+\.\d+)/).first.first.to_f }
         | 
| 83 100 | 
             
                end
         | 
| 84 101 |  | 
| 85 | 
            -
                 | 
| 102 | 
            +
                def il_version_number
         | 
| 103 | 
            +
                  return il_version.scan(/(\d+\.\d+)/).first.first.to_f
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                %w( BUILT_IN_KERNELS DRIVER_VERSION VERSION VENDOR PROFILE OPENCL_C_VERSION NAME IL_VERSION ).each { |prop|
         | 
| 86 107 | 
             
                  eval get_info("Device", :string, prop)
         | 
| 87 108 | 
             
                }
         | 
| 88 109 |  | 
| @@ -104,15 +125,15 @@ module OpenCL | |
| 104 125 | 
             
                  eval get_info("Device", :cl_ulong, prop)
         | 
| 105 126 | 
             
                }
         | 
| 106 127 |  | 
| 107 | 
            -
                %w( IMAGE_PITCH_ALIGNMENT IMAGE_BASE_ADDRESS_ALIGNMENT REFERENCE_COUNT PARTITION_MAX_SUB_DEVICES VENDOR_ID PREFERRED_VECTOR_WIDTH_HALF PREFERRED_VECTOR_WIDTH_CHAR PREFERRED_VECTOR_WIDTH_SHORT PREFERRED_VECTOR_WIDTH_INT PREFERRED_VECTOR_WIDTH_LONG PREFERRED_VECTOR_WIDTH_FLOAT PREFERRED_VECTOR_WIDTH_DOUBLE NATIVE_VECTOR_WIDTH_CHAR NATIVE_VECTOR_WIDTH_SHORT NATIVE_VECTOR_WIDTH_INT NATIVE_VECTOR_WIDTH_LONG NATIVE_VECTOR_WIDTH_FLOAT NATIVE_VECTOR_WIDTH_DOUBLE NATIVE_VECTOR_WIDTH_HALF MIN_DATA_TYPE_ALIGN_SIZE MEM_BASE_ADDR_ALIGN MAX_WRITE_IMAGE_ARGS MAX_READ_WRITE_IMAGE_ARGS MAX_WORK_ITEM_DIMENSIONS MAX_SAMPLERS MAX_READ_IMAGE_ARGS MAX_CONSTANT_ARGS MAX_COMPUTE_UNITS MAX_CLOCK_FREQUENCY ADDRESS_BITS GLOBAL_MEM_CACHELINE_SIZE QUEUE_ON_DEVICE_PREFERRED_SIZE QUEUE_ON_DEVICE_MAX_SIZE MAX_ON_DEVICE_QUEUES MAX_ON_DEVICE_EVENTS MAX_PIPE_ARGS PIPE_MAX_ACTIVE_RESERVATIONS PIPE_MAX_PACKET_SIZE PREFERRED_PLATFORM_ATOMIC_ALIGNMENT PREFERRED_GLOBAL_ATOMIC_ALIGNMENT PREFERRED_LOCAL_ATOMIC_ALIGNMENT).each { |prop|
         | 
| 128 | 
            +
                %w( IMAGE_PITCH_ALIGNMENT IMAGE_BASE_ADDRESS_ALIGNMENT REFERENCE_COUNT PARTITION_MAX_SUB_DEVICES VENDOR_ID PREFERRED_VECTOR_WIDTH_HALF PREFERRED_VECTOR_WIDTH_CHAR PREFERRED_VECTOR_WIDTH_SHORT PREFERRED_VECTOR_WIDTH_INT PREFERRED_VECTOR_WIDTH_LONG PREFERRED_VECTOR_WIDTH_FLOAT PREFERRED_VECTOR_WIDTH_DOUBLE NATIVE_VECTOR_WIDTH_CHAR NATIVE_VECTOR_WIDTH_SHORT NATIVE_VECTOR_WIDTH_INT NATIVE_VECTOR_WIDTH_LONG NATIVE_VECTOR_WIDTH_FLOAT NATIVE_VECTOR_WIDTH_DOUBLE NATIVE_VECTOR_WIDTH_HALF MIN_DATA_TYPE_ALIGN_SIZE MEM_BASE_ADDR_ALIGN MAX_WRITE_IMAGE_ARGS MAX_READ_WRITE_IMAGE_ARGS MAX_WORK_ITEM_DIMENSIONS MAX_SAMPLERS MAX_READ_IMAGE_ARGS MAX_CONSTANT_ARGS MAX_COMPUTE_UNITS MAX_CLOCK_FREQUENCY ADDRESS_BITS GLOBAL_MEM_CACHELINE_SIZE QUEUE_ON_DEVICE_PREFERRED_SIZE QUEUE_ON_DEVICE_MAX_SIZE MAX_ON_DEVICE_QUEUES MAX_ON_DEVICE_EVENTS MAX_PIPE_ARGS PIPE_MAX_ACTIVE_RESERVATIONS PIPE_MAX_PACKET_SIZE PREFERRED_PLATFORM_ATOMIC_ALIGNMENT PREFERRED_GLOBAL_ATOMIC_ALIGNMENT PREFERRED_LOCAL_ATOMIC_ALIGNMENT MAX_NUM_SUB_GROUPS ).each { |prop|
         | 
| 108 129 | 
             
                  eval get_info("Device", :cl_uint, prop)
         | 
| 109 130 | 
             
                }
         | 
| 110 131 |  | 
| 111 | 
            -
                %w( PRINTF_BUFFER_SIZE IMAGE_MAX_BUFFER_SIZE IMAGE_MAX_ARRAY_SIZE PROFILING_TIMER_RESOLUTION MAX_WORK_GROUP_SIZE MAX_PARAMETER_SIZE IMAGE2D_MAX_WIDTH IMAGE2D_MAX_HEIGHT IMAGE3D_MAX_WIDTH IMAGE3D_MAX_HEIGHT IMAGE3D_MAX_DEPTH MAX_GLOBAL_VARIABLE_SIZE GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE).each { |prop|
         | 
| 132 | 
            +
                %w( PRINTF_BUFFER_SIZE IMAGE_MAX_BUFFER_SIZE IMAGE_MAX_ARRAY_SIZE PROFILING_TIMER_RESOLUTION MAX_WORK_GROUP_SIZE MAX_PARAMETER_SIZE IMAGE2D_MAX_WIDTH IMAGE2D_MAX_HEIGHT IMAGE3D_MAX_WIDTH IMAGE3D_MAX_HEIGHT IMAGE3D_MAX_DEPTH MAX_GLOBAL_VARIABLE_SIZE GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE ).each { |prop|
         | 
| 112 133 | 
             
                  eval get_info("Device", :size_t, prop)
         | 
| 113 134 | 
             
                }
         | 
| 114 135 |  | 
| 115 | 
            -
                %w( PREFERRED_INTEROP_USER_SYNC LINKER_AVAILABLE IMAGE_SUPPORT HOST_UNIFIED_MEMORY COMPILER_AVAILABLE AVAILABLE ENDIAN_LITTLE ERROR_CORRECTION_SUPPORT ).each { |prop|
         | 
| 136 | 
            +
                %w( PREFERRED_INTEROP_USER_SYNC LINKER_AVAILABLE IMAGE_SUPPORT HOST_UNIFIED_MEMORY COMPILER_AVAILABLE AVAILABLE ENDIAN_LITTLE ERROR_CORRECTION_SUPPORT SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS ).each { |prop|
         | 
| 116 137 | 
             
                  eval get_info("Device", :cl_bool, prop)
         | 
| 117 138 | 
             
                }
         | 
| 118 139 |  | 
| @@ -189,7 +210,7 @@ module OpenCL | |
| 189 210 | 
             
                # Returns a list of :cl_device_partition_property used to create the Device
         | 
| 190 211 | 
             
                eval get_info_array("Device", :cl_device_partition_property, "PARTITION_TYPE")
         | 
| 191 212 |  | 
| 192 | 
            -
                # Returns the  | 
| 213 | 
            +
                # Returns the Platform the Device belongs to
         | 
| 193 214 | 
             
                def platform
         | 
| 194 215 | 
             
                  ptr = FFI::MemoryPointer::new( OpenCL::Platform )
         | 
| 195 216 | 
             
                  error = OpenCL.clGetDeviceInfo(self, PLATFORM, OpenCL::Platform.size, ptr, nil)
         | 
| @@ -258,6 +279,14 @@ module OpenCL | |
| 258 279 | 
             
                  return OpenCL.create_sub_devices( self,  [ PARTITION_BY_COUNTS] + compute_unit_number_list + [ PARTITION_BY_COUNTS_LIST_END ] )
         | 
| 259 280 | 
             
                end
         | 
| 260 281 |  | 
| 282 | 
            +
                def get_device_and_host_timer
         | 
| 283 | 
            +
                  return OpenCL.get_device_and_host_timer( self )
         | 
| 284 | 
            +
                end
         | 
| 285 | 
            +
             | 
| 286 | 
            +
                def get_host_timer
         | 
| 287 | 
            +
                  return OpenCL.get_host_timer( self )
         | 
| 288 | 
            +
                end
         | 
| 289 | 
            +
             | 
| 261 290 | 
             
              end
         | 
| 262 291 |  | 
| 263 292 | 
             
            end
         | 
| @@ -35,6 +35,14 @@ module OpenCL | |
| 35 35 | 
             
                error_check(error)
         | 
| 36 36 | 
             
              end
         | 
| 37 37 |  | 
| 38 | 
            +
              def self.clone_kernel( kernel )
         | 
| 39 | 
            +
                error_check(INVALID_OPERATION) if kernel.context.platform.version_number < 2.1
         | 
| 40 | 
            +
                error = FFI::MemoryPointer::new( :cl_int )
         | 
| 41 | 
            +
                kernel_ptr = clCloneKernel( kernel, error )
         | 
| 42 | 
            +
                error_check(error.read_cl_int)
         | 
| 43 | 
            +
                return Kernel::new( kernel_ptr, false )
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 38 46 | 
             
              # Maps the cl_kernel object
         | 
| 39 47 | 
             
              class Kernel
         | 
| 40 48 | 
             
                include InnerInterface
         | 
| @@ -196,6 +204,103 @@ module OpenCL | |
| 196 204 | 
             
                  return Program::new(ptr.read_pointer)
         | 
| 197 205 | 
             
                end
         | 
| 198 206 |  | 
| 207 | 
            +
                def work_group_size(device = program.devices.first)
         | 
| 208 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 209 | 
            +
                  error = OpenCL.clGetKernelWorkGroupInfo(self, device, WORK_GROUP_SIZE, ptr.size, ptr, nil)
         | 
| 210 | 
            +
                  error_check(error)
         | 
| 211 | 
            +
                  return ptr.read_size_t
         | 
| 212 | 
            +
                end
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                def compile_work_group_size(device = program.devices.first)
         | 
| 215 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t, 3 )
         | 
| 216 | 
            +
                  error = OpenCL.clGetKernelWorkGroupInfo(self, device, COMPILE_WORK_GROUP_SIZE, ptr.size, ptr, nil)
         | 
| 217 | 
            +
                  error_check(error)
         | 
| 218 | 
            +
                  return ptr.get_array_of_size_t(0,3)
         | 
| 219 | 
            +
                end
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                def local_mem_size(device = program.devices.first)
         | 
| 222 | 
            +
                  ptr = FFI::MemoryPointer::new( :cl_ulong )
         | 
| 223 | 
            +
                  error = OpenCL.clGetKernelWorkGroupInfo(self, device, LOCAL_MEM_SIZE, ptr.size, ptr, nil)
         | 
| 224 | 
            +
                  error_check(error)
         | 
| 225 | 
            +
                  return ptr.read_cl_ulong
         | 
| 226 | 
            +
                end
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                def preferred_work_group_size_multiple(device = program.devices.first)
         | 
| 229 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 230 | 
            +
                  error = OpenCL.clGetKernelWorkGroupInfo(self, device, PREFERRED_WORK_GROUP_SIZE_MULTIPLE, ptr.size, ptr, nil)
         | 
| 231 | 
            +
                  error_check(error)
         | 
| 232 | 
            +
                  return ptr.read_size_t
         | 
| 233 | 
            +
                end
         | 
| 234 | 
            +
             | 
| 235 | 
            +
                def private_mem_size(device = program.devices.first)
         | 
| 236 | 
            +
                  ptr = FFI::MemoryPointer::new( :cl_ulong )
         | 
| 237 | 
            +
                  error = OpenCL.clGetKernelWorkGroupInfo(self, device, PRIVATE_MEM_SIZE, ptr.size, ptr, nil)
         | 
| 238 | 
            +
                  error_check(error)
         | 
| 239 | 
            +
                  return ptr.read_cl_ulong
         | 
| 240 | 
            +
                end
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                def global_work_size(device = program.devices.first)
         | 
| 243 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t, 3 )
         | 
| 244 | 
            +
                  error = OpenCL.clGetKernelWorkGroupInfo(self, device, GLOBAL_WORK_SIZE, ptr.size, ptr, nil)
         | 
| 245 | 
            +
                  error_check(error)
         | 
| 246 | 
            +
                  return ptr.get_array_of_size_t(0,3)
         | 
| 247 | 
            +
                end
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                def max_num_sub_groups(device = program.devices.first)
         | 
| 250 | 
            +
                  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.1
         | 
| 251 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 252 | 
            +
                  error = OpenCL.clGetKernelSubGroupInfo(self, device, MAX_NUM_SUB_GROUPS, 0, nil, ptr.size, ptr, nil)
         | 
| 253 | 
            +
                  error_check(error)
         | 
| 254 | 
            +
                  return ptr.read_size_t
         | 
| 255 | 
            +
                end
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                def compile_num_sub_groups(device = program.devices.first)
         | 
| 258 | 
            +
                  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.1
         | 
| 259 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 260 | 
            +
                  error = OpenCL.clGetKernelSubGroupInfo(self, device, COMPILE_NUM_SUB_GROUPS, 0, nil, ptr.size, ptr, nil)
         | 
| 261 | 
            +
                  error_check(error)
         | 
| 262 | 
            +
                  return ptr.read_size_t
         | 
| 263 | 
            +
                end
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                def max_sub_group_size_for_ndrange(local_work_size, device = program.devices.first)
         | 
| 266 | 
            +
                  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.1
         | 
| 267 | 
            +
                  local_work_size = [local_work_size].flatten
         | 
| 268 | 
            +
                  lws_p = FFI::MemoryPointer::new( :size_t, local_work_size.length )
         | 
| 269 | 
            +
                  local_work_size.each_with_index { |e,i|
         | 
| 270 | 
            +
                    lws_p[i].write_size_t( e )
         | 
| 271 | 
            +
                  }
         | 
| 272 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 273 | 
            +
                  error = OpenCL.clGetKernelSubGroupInfo(self, device, MAX_SUB_GROUP_SIZE_FOR_NDRANGE, lws_p.size, lws_p, ptr.size, ptr, nil)
         | 
| 274 | 
            +
                  error_check(error)
         | 
| 275 | 
            +
                  return ptr.read_size_t
         | 
| 276 | 
            +
                end
         | 
| 277 | 
            +
             | 
| 278 | 
            +
                def sub_groups_count_for_ndrange(local_work_size, device = program.devices.first)
         | 
| 279 | 
            +
                  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.1
         | 
| 280 | 
            +
                  local_work_size = [local_work_size].flatten
         | 
| 281 | 
            +
                  lws_p = FFI::MemoryPointer::new( :size_t, local_work_size.length )
         | 
| 282 | 
            +
                  local_work_size.each_with_index { |e,i|
         | 
| 283 | 
            +
                    lws_p[i].write_size_t( e )
         | 
| 284 | 
            +
                  }
         | 
| 285 | 
            +
                  ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 286 | 
            +
                  error = OpenCL.clGetKernelSubGroupInfo(self, device, SUB_GROUP_COUNT_FOR_NDRANGE, lws_p.size, lws_p, ptr.size, ptr, nil)
         | 
| 287 | 
            +
                  error_check(error)
         | 
| 288 | 
            +
                  return ptr.read_size_t
         | 
| 289 | 
            +
                end
         | 
| 290 | 
            +
             | 
| 291 | 
            +
                def local_size_for_sub_group_count(sub_group_number, device = program.devices.first)
         | 
| 292 | 
            +
                  error_check(INVALID_OPERATION) if self.context.platform.version_number < 2.1
         | 
| 293 | 
            +
                  sgp_p = FFI::MemoryPointer::new( :size_t )
         | 
| 294 | 
            +
                  sgp_p.write_size_t(sub_group_number)
         | 
| 295 | 
            +
                  size_ptr = FFI::MemoryPointer::new( :size_t )
         | 
| 296 | 
            +
                  error = OpenCL.clGetKernelSubGroupInfo(self, device, LOCAL_SIZE_FOR_SUB_GROUP_COUNT, sgp_p.size, sgp_p, 0, nil, size_ptr)
         | 
| 297 | 
            +
                  error_check(error)
         | 
| 298 | 
            +
                  lws_p = FFI::MemoryPointer::new( size_ptr.read_size_t )
         | 
| 299 | 
            +
                  error = OpenCL.clGetKernelSubGroupInfo(self, device, LOCAL_SIZE_FOR_SUB_GROUP_COUNT, sgp_p.size, sgp_p, lws_p.size, lws_p, nil)
         | 
| 300 | 
            +
                  error_check(error)
         | 
| 301 | 
            +
                  return lws_p.get_array_of_size_t(0, lws_p.size/size_ptr.size)
         | 
| 302 | 
            +
                end
         | 
| 303 | 
            +
             | 
| 199 304 | 
             
                # Set the index th argument of the Kernel to value. The size of value can be specified.
         | 
| 200 305 | 
             
                def set_arg(index, value, size = nil)
         | 
| 201 306 | 
             
                  OpenCL.set_kernel_arg(self, index, value, size)
         | 
| @@ -226,6 +331,10 @@ module OpenCL | |
| 226 331 | 
             
                  command_queue.enqueue_ndrange_kernel(self, global_work_size, options)
         | 
| 227 332 | 
             
                end
         | 
| 228 333 |  | 
| 334 | 
            +
                def clone
         | 
| 335 | 
            +
                  return OpenCL.clone_kernel( self )
         | 
| 336 | 
            +
                end
         | 
| 337 | 
            +
             | 
| 229 338 | 
             
              end
         | 
| 230 339 |  | 
| 231 340 | 
             
            end
         | 
| @@ -94,12 +94,17 @@ module OpenCL | |
| 94 94 | 
             
                # Returns a String containing the Platform name
         | 
| 95 95 |  | 
| 96 96 | 
             
                ##
         | 
| 97 | 
            -
                # : | 
| 97 | 
            +
                # :method: vendor()
         | 
| 98 98 | 
             
                # Returns a String identifying the Platform vendor
         | 
| 99 99 | 
             
                %w(PROFILE VERSION NAME VENDOR ICD_SUFFIX_KHR).each { |prop|
         | 
| 100 100 | 
             
                  eval get_info("Platform", :string, prop)
         | 
| 101 101 | 
             
                }
         | 
| 102 102 |  | 
| 103 | 
            +
                ##
         | 
| 104 | 
            +
                # :method: host_timer_resolution()
         | 
| 105 | 
            +
                # returns the host timer resulution in nanoseconds
         | 
| 106 | 
            +
                eval get_info("Platform", :cl_ulong, "HOST_TIMER_RESOLUTION")
         | 
| 107 | 
            +
             | 
| 103 108 | 
             
                # Returns an Array of string corresponding to the Platform extensions
         | 
| 104 109 | 
             
                def extensions
         | 
| 105 110 | 
             
                  extensions_size = FFI::MemoryPointer::new( :size_t )
         | 
| @@ -186,6 +186,22 @@ module OpenCL | |
| 186 186 | 
             
                return Program::new( program_ptr, false )
         | 
| 187 187 | 
             
              end
         | 
| 188 188 |  | 
| 189 | 
            +
              # Create a Program from an intermediate level representation
         | 
| 190 | 
            +
              #
         | 
| 191 | 
            +
              # ==== Attributes
         | 
| 192 | 
            +
              #
         | 
| 193 | 
            +
              # * +context+ - Context the created Program will be associated to
         | 
| 194 | 
            +
              # * +il+ - a binary string containing the intermediate level representation of the program
         | 
| 195 | 
            +
              def self.create_program_with_il(context, il)
         | 
| 196 | 
            +
                length = il.bytesize
         | 
| 197 | 
            +
                il_p = FFI::MemoryPointer::new( length )
         | 
| 198 | 
            +
                error = FFI::MemoryPointer::new( :cl_int )
         | 
| 199 | 
            +
                il_p.write_bytes(il)
         | 
| 200 | 
            +
                program_ptr = clCreateProgramWithIL(context, il_p, length, error)
         | 
| 201 | 
            +
                error_check(error.read_cl_int)
         | 
| 202 | 
            +
                return Program::new( program_ptr, false )
         | 
| 203 | 
            +
              end
         | 
| 204 | 
            +
             | 
| 189 205 | 
             
              # Maps the cl_program object of OpenCL
         | 
| 190 206 | 
             
              class Program
         | 
| 191 207 | 
             
                include InnerInterface
         | 
| @@ -319,6 +335,19 @@ module OpenCL | |
| 319 335 | 
             
                  return bins
         | 
| 320 336 | 
             
                end
         | 
| 321 337 |  | 
| 338 | 
            +
                # Return the intermediate level representation of the program if any, nil otherwise
         | 
| 339 | 
            +
                def il
         | 
| 340 | 
            +
                  il_size = FFI::MemoryPointer::new( :size_t )
         | 
| 341 | 
            +
                  error = OpenCL.clGetProgramInfo(self, IL, 0, nil, il_size)
         | 
| 342 | 
            +
                  error_check(error)
         | 
| 343 | 
            +
                  return nil if il_size == 0
         | 
| 344 | 
            +
                  length = il_size.read_size_t
         | 
| 345 | 
            +
                  il_p = FFI::MemoryPointer::new( length )
         | 
| 346 | 
            +
                  error = OpenCL.clGetProgramInfo(self, IL, length, il_p, nil)
         | 
| 347 | 
            +
                  error_check(error)
         | 
| 348 | 
            +
                  return il_p.read_bytes(length)
         | 
| 349 | 
            +
                end
         | 
| 350 | 
            +
             | 
| 322 351 | 
             
                # Builds (compile and link) the Program created from sources or binary
         | 
| 323 352 | 
             
                #
         | 
| 324 353 | 
             
                # ==== Attributes
         | 
    
        data/lib/opencl_ruby_ffi/SVM.rb
    CHANGED
    
    | @@ -209,4 +209,41 @@ module OpenCL | |
| 209 209 | 
             
                return Event::new( event.read_ptr, false )
         | 
| 210 210 | 
             
              end
         | 
| 211 211 |  | 
| 212 | 
            +
              # Enqueues a command to migrate SVM memory area
         | 
| 213 | 
            +
              # ==== Attributes
         | 
| 214 | 
            +
              #
         | 
| 215 | 
            +
              # * +command_queue+ - CommandQueue used to execute the unmap command
         | 
| 216 | 
            +
              # * +svm_ptrs+ - a single or an Array of SVM memory area to migrate
         | 
| 217 | 
            +
              # * +options+ - a hash containing named options
         | 
| 218 | 
            +
              #
         | 
| 219 | 
            +
              # ==== Options
         | 
| 220 | 
            +
              #
         | 
| 221 | 
            +
              # * +:sizes+ - a single or an Array of sizes to transfer
         | 
| 222 | 
            +
              # * +:flags+ - a single or an Array of :cl_mem_migration flags
         | 
| 223 | 
            +
              # * +:event_wait_list+ - if provided, a list of Event to wait upon before executing the command
         | 
| 224 | 
            +
              #
         | 
| 225 | 
            +
              # ==== Returns
         | 
| 226 | 
            +
              #
         | 
| 227 | 
            +
              # the Event associated with the command
         | 
| 228 | 
            +
              def self.enqueue_svm_migrate_mem( command_queue, svn_ptrs, options = {} )
         | 
| 229 | 
            +
                svn_ptrs = [svn_ptrs].flatten
         | 
| 230 | 
            +
                num_svm_pointers = svn_ptrs.length
         | 
| 231 | 
            +
                num_events, events = get_event_wait_list( options )
         | 
| 232 | 
            +
                flags = get_flags( options )
         | 
| 233 | 
            +
                sizes = [0]*num_svm_pointers
         | 
| 234 | 
            +
                sizes = options[:sizes] if options[:sizes]
         | 
| 235 | 
            +
                svn_ptrs_p = FFI::MemoryPointer::new( :pointer, num_svm_pointers)
         | 
| 236 | 
            +
                svn_ptrs.each_with_index { |e, i|
         | 
| 237 | 
            +
                  svn_ptrs_p[i].write_pointer(e)
         | 
| 238 | 
            +
                }
         | 
| 239 | 
            +
                sizes_p = FFI::MemoryPointer::new( :size_t, num_svm_pointers)
         | 
| 240 | 
            +
                num_svm_pointers.times { |i|
         | 
| 241 | 
            +
                  sizes_p[i].write_size_t(sizes[i])
         | 
| 242 | 
            +
                }
         | 
| 243 | 
            +
                event = FFI::MemoryPointer::new( Event )
         | 
| 244 | 
            +
                error =  clEnqueueSVMMigrateMem( command_queue, num_svm_pointers, svn_ptrs_p, sizes_p, flags, num_events, events, event )
         | 
| 245 | 
            +
                error_check( error )
         | 
| 246 | 
            +
                return Event::new( event.read_ptr, false )
         | 
| 247 | 
            +
              end
         | 
| 248 | 
            +
             | 
| 212 249 | 
             
            end
         | 
| @@ -95,6 +95,7 @@ module OpenCL | |
| 95 95 | 
             
              PLATFORM_NAME = 0x0902
         | 
| 96 96 | 
             
              PLATFORM_VENDOR = 0x0903
         | 
| 97 97 | 
             
              PLATFORM_EXTENSIONS = 0x0904
         | 
| 98 | 
            +
              PLATFORM_HOST_TIMER_RESOLUTION = 0x0905
         | 
| 98 99 | 
             
              DEVICE_TYPE_DEFAULT = (1 << 0)
         | 
| 99 100 | 
             
              DEVICE_TYPE_CPU = (1 << 1)
         | 
| 100 101 | 
             
              DEVICE_TYPE_GPU = (1 << 2)
         | 
| @@ -192,6 +193,9 @@ module OpenCL | |
| 192 193 | 
             
              DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT = 0x1058
         | 
| 193 194 | 
             
              DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT = 0x1059
         | 
| 194 195 | 
             
              DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT = 0x105A
         | 
| 196 | 
            +
              DEVICE_IL_VERSION = 0x105B
         | 
| 197 | 
            +
              DEVICE_MAX_NUM_SUB_GROUPS = 0x105C
         | 
| 198 | 
            +
              DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS = 0x105D
         | 
| 195 199 | 
             
              FP_DENORM = (1 << 0)
         | 
| 196 200 | 
             
              FP_INF_NAN = (1 << 1)
         | 
| 197 201 | 
             
              FP_ROUND_TO_NEAREST = (1 << 2)
         | 
| @@ -236,6 +240,7 @@ module OpenCL | |
| 236 240 | 
             
              QUEUE_REFERENCE_COUNT = 0x1092
         | 
| 237 241 | 
             
              QUEUE_PROPERTIES = 0x1093
         | 
| 238 242 | 
             
              QUEUE_SIZE = 0x1094
         | 
| 243 | 
            +
              QUEUE_DEVICE_DEFAULT = 0x1095
         | 
| 239 244 | 
             
              MEM_READ_WRITE = (1 << 0)
         | 
| 240 245 | 
             
              MEM_WRITE_ONLY = (1 << 1)
         | 
| 241 246 | 
             
              MEM_READ_ONLY = (1 << 2)
         | 
| @@ -264,10 +269,18 @@ module OpenCL | |
| 264 269 | 
             
              RGBx = 0x10BC
         | 
| 265 270 | 
             
              DEPTH = 0x10BD
         | 
| 266 271 | 
             
              DEPTH_STENCIL = 0x10BE
         | 
| 267 | 
            -
              sRGB | 
| 268 | 
            -
             | 
| 269 | 
            -
               | 
| 270 | 
            -
               | 
| 272 | 
            +
              def self.sRGB
         | 
| 273 | 
            +
                return 0x10BF
         | 
| 274 | 
            +
              end
         | 
| 275 | 
            +
              def self.sRGBx
         | 
| 276 | 
            +
                return 0x10C0
         | 
| 277 | 
            +
              end
         | 
| 278 | 
            +
              def self.sRGBA
         | 
| 279 | 
            +
                return 0x10C1
         | 
| 280 | 
            +
              end
         | 
| 281 | 
            +
              def self.sBGRA
         | 
| 282 | 
            +
                return 0x10C2
         | 
| 283 | 
            +
              end
         | 
| 271 284 | 
             
              ABGR = 0x10C3
         | 
| 272 285 | 
             
              SNORM_INT8 = 0x10D0
         | 
| 273 286 | 
             
              SNORM_INT16 = 0x10D1
         | 
| @@ -285,6 +298,7 @@ module OpenCL | |
| 285 298 | 
             
              HALF_FLOAT = 0x10DD
         | 
| 286 299 | 
             
              FLOAT = 0x10DE
         | 
| 287 300 | 
             
              UNORM_INT24 = 0x10DF
         | 
| 301 | 
            +
              UNORM_INT_101010_2 = 0x10E0
         | 
| 288 302 | 
             
              MEM_OBJECT_BUFFER = 0x10F0
         | 
| 289 303 | 
             
              MEM_OBJECT_IMAGE2D = 0x10F1
         | 
| 290 304 | 
             
              MEM_OBJECT_IMAGE3D = 0x10F2
         | 
| @@ -343,6 +357,7 @@ module OpenCL | |
| 343 357 | 
             
              PROGRAM_BINARIES = 0x1166
         | 
| 344 358 | 
             
              PROGRAM_NUM_KERNELS = 0x1167
         | 
| 345 359 | 
             
              PROGRAM_KERNEL_NAMES = 0x1168
         | 
| 360 | 
            +
              PROGRAM_IL = 0x1169
         | 
| 346 361 | 
             
              PROGRAM_BUILD_STATUS = 0x1181
         | 
| 347 362 | 
             
              PROGRAM_BUILD_OPTIONS = 0x1182
         | 
| 348 363 | 
             
              PROGRAM_BUILD_LOG = 0x1183
         | 
| @@ -386,6 +401,11 @@ module OpenCL | |
| 386 401 | 
             
              KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 0x11B3
         | 
| 387 402 | 
             
              KERNEL_PRIVATE_MEM_SIZE = 0x11B4
         | 
| 388 403 | 
             
              KERNEL_GLOBAL_WORK_SIZE = 0x11B5
         | 
| 404 | 
            +
              KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE = 0x2033
         | 
| 405 | 
            +
              KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE = 0x2034
         | 
| 406 | 
            +
              KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT = 0x11B8
         | 
| 407 | 
            +
              KERNEL_MAX_NUM_SUB_GROUPS = 0x11B9
         | 
| 408 | 
            +
              KERNEL_COMPILE_NUM_SUB_GROUPS = 0x11BA
         | 
| 389 409 | 
             
              KERNEL_EXEC_INFO_SVM_PTRS = 0x11B6
         | 
| 390 410 | 
             
              KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM = 0x11B7
         | 
| 391 411 | 
             
              EVENT_COMMAND_QUEUE = 0x11D0
         | 
| @@ -444,7 +464,6 @@ module OpenCL | |
| 444 464 | 
             
              GL_TEXTURE_TARGET = 0x2004
         | 
| 445 465 | 
             
              GL_MIPMAP_LEVEL = 0x2005
         | 
| 446 466 | 
             
              GL_NUM_SAMPLES = 0x2012
         | 
| 447 | 
            -
              cl_khr_gl_sharing = 1
         | 
| 448 467 | 
             
              INVALID_GL_SHAREGROUP_REFERENCE_KHR = -1000
         | 
| 449 468 | 
             
              CURRENT_DEVICE_FOR_GL_CONTEXT_KHR = 0x2006
         | 
| 450 469 | 
             
              DEVICES_FOR_GL_CONTEXT_KHR = 0x2007
         | 
| @@ -454,15 +473,11 @@ module OpenCL | |
| 454 473 | 
             
              WGL_HDC_KHR = 0x200B
         | 
| 455 474 | 
             
              CGL_SHAREGROUP_KHR = 0x200C
         | 
| 456 475 | 
             
              DEVICE_HALF_FP_CONFIG = 0x1033
         | 
| 457 | 
            -
              cl_APPLE_SetMemObjectDestructor = 1
         | 
| 458 | 
            -
              cl_APPLE_ContextLoggingFunctions = 1
         | 
| 459 | 
            -
              cl_khr_icd = 1
         | 
| 460 476 | 
             
              PLATFORM_ICD_SUFFIX_KHR = 0x0920
         | 
| 461 477 | 
             
              PLATFORM_NOT_FOUND_KHR = -1001
         | 
| 462 478 | 
             
              CONTEXT_MEMORY_INITIALIZE_KHR = 0x200E
         | 
| 463 479 | 
             
              DEVICE_TERMINATE_CAPABILITY_KHR = 0x200F
         | 
| 464 480 | 
             
              CONTEXT_TERMINATE_KHR = 0x2010
         | 
| 465 | 
            -
              cl_khr_terminate_context = 1
         | 
| 466 481 | 
             
              DEVICE_SPIR_VERSIONS = 0x40E0
         | 
| 467 482 | 
             
              PROGRAM_BINARY_TYPE_INTERMEDIATE = 0x40E1
         | 
| 468 483 | 
             
              DEVICE_COMPUTE_CAPABILITY_MAJOR_NV = 0x4000
         | 
| @@ -483,6 +498,16 @@ module OpenCL | |
| 483 498 | 
             
              MEM_HOST_WRITETHROUGH_QCOM = 0x40A6
         | 
| 484 499 | 
             
              MEM_HOST_WRITE_COMBINING_QCOM = 0x40A7
         | 
| 485 500 | 
             
              MEM_ION_HOST_PTR_QCOM = 0x40A8
         | 
| 501 | 
            +
              KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR = 0x2033
         | 
| 502 | 
            +
              KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR = 0x2034
         | 
| 503 | 
            +
              QUEUE_PRIORITY_KHR = 0x1096
         | 
| 504 | 
            +
              QUEUE_PRIORITY_HIGH_KHR = (1<<0)
         | 
| 505 | 
            +
              QUEUE_PRIORITY_MED_KHR = (1<<1)
         | 
| 506 | 
            +
              QUEUE_PRIORITY_LOW_KHR = (1<<2)
         | 
| 507 | 
            +
              QUEUE_THROTTLE_KHR = 0x1097
         | 
| 508 | 
            +
              QUEUE_THROTTLE_HIGH_KHR = (1<<0)
         | 
| 509 | 
            +
              QUEUE_THROTTLE_MED_KHR = (1<<1)
         | 
| 510 | 
            +
              QUEUE_THROTTLE_LOW_KHR = (1<<2)
         | 
| 486 511 | 
             
              #:startdoc:
         | 
| 487 512 | 
             
              # Parent claas to map OpenCL errors, and is used to raise unknown errors
         | 
| 488 513 | 
             
              class Error < StandardError
         | 
| @@ -2310,6 +2335,7 @@ module OpenCL | |
| 2310 2335 | 
             
              FFI.typedef :cl_uint, :cl_kernel_arg_access_qualifier
         | 
| 2311 2336 | 
             
              FFI.typedef :cl_bitfield, :cl_kernel_arg_type_qualifier
         | 
| 2312 2337 | 
             
              FFI.typedef :cl_uint, :cl_kernel_work_group_info
         | 
| 2338 | 
            +
              FFI.typedef :cl_uint, :cl_kernel_sub_group_info
         | 
| 2313 2339 | 
             
              FFI.typedef :cl_uint, :cl_event_info
         | 
| 2314 2340 | 
             
              FFI.typedef :cl_uint, :cl_command_type
         | 
| 2315 2341 | 
             
              FFI.typedef :cl_uint, :cl_profiling_info
         | 
| @@ -2481,6 +2507,7 @@ module OpenCL | |
| 2481 2507 | 
             
                NAME = 0x0902
         | 
| 2482 2508 | 
             
                VENDOR = 0x0903
         | 
| 2483 2509 | 
             
                EXTENSIONS = 0x0904
         | 
| 2510 | 
            +
                HOST_TIMER_RESOLUTION = 0x0905
         | 
| 2484 2511 | 
             
                ICD_SUFFIX_KHR = 0x0920
         | 
| 2485 2512 |  | 
| 2486 2513 | 
             
                # Creates a new Platform and retains it if specified and aplicable
         | 
| @@ -2603,6 +2630,9 @@ module OpenCL | |
| 2603 2630 | 
             
                PREFERRED_PLATFORM_ATOMIC_ALIGNMENT = 0x1058
         | 
| 2604 2631 | 
             
                PREFERRED_GLOBAL_ATOMIC_ALIGNMENT = 0x1059
         | 
| 2605 2632 | 
             
                PREFERRED_LOCAL_ATOMIC_ALIGNMENT = 0x105A
         | 
| 2633 | 
            +
                IL_VERSION = 0x105B
         | 
| 2634 | 
            +
                MAX_NUM_SUB_GROUPS = 0x105C
         | 
| 2635 | 
            +
                SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS = 0x105D
         | 
| 2606 2636 | 
             
                PARTITION_EQUALLY = 0x1086
         | 
| 2607 2637 | 
             
                PARTITION_BY_COUNTS = 0x1087
         | 
| 2608 2638 | 
             
                PARTITION_BY_COUNTS_LIST_END = 0x0
         | 
| @@ -2832,7 +2862,15 @@ module OpenCL | |
| 2832 2862 | 
             
                REFERENCE_COUNT = 0x1092
         | 
| 2833 2863 | 
             
                PROPERTIES = 0x1093
         | 
| 2834 2864 | 
             
                SIZE = 0x1094
         | 
| 2835 | 
            -
             | 
| 2865 | 
            +
                DEVICE_DEFAULT = 0x1095
         | 
| 2866 | 
            +
                PRIORITY_KHR = 0x1096
         | 
| 2867 | 
            +
                PRIORITY_HIGH_KHR = (1<<0)
         | 
| 2868 | 
            +
                PRIORITY_MED_KHR = (1<<1)
         | 
| 2869 | 
            +
                PRIORITY_LOW_KHR = (1<<2)
         | 
| 2870 | 
            +
                THROTTLE_KHR = 0x1097
         | 
| 2871 | 
            +
                THROTTLE_HIGH_KHR = (1<<0)
         | 
| 2872 | 
            +
                THROTTLE_MED_KHR = (1<<1)
         | 
| 2873 | 
            +
                THROTTLE_LOW_KHR = (1<<2) 
         | 
| 2836 2874 | 
             
                # Creates a new CommandQueue and retains it if specified and aplicable
         | 
| 2837 2875 | 
             
                def initialize(ptr, retain = true)
         | 
| 2838 2876 | 
             
                  super(ptr)
         | 
| @@ -3036,6 +3074,7 @@ module OpenCL | |
| 3036 3074 | 
             
                BINARIES = 0x1166
         | 
| 3037 3075 | 
             
                NUM_KERNELS = 0x1167
         | 
| 3038 3076 | 
             
                KERNEL_NAMES = 0x1168
         | 
| 3077 | 
            +
                IL = 0x1169
         | 
| 3039 3078 | 
             
                BUILD_STATUS = 0x1181
         | 
| 3040 3079 | 
             
                BUILD_OPTIONS = 0x1182
         | 
| 3041 3080 | 
             
                BUILD_LOG = 0x1183
         | 
| @@ -3129,6 +3168,11 @@ module OpenCL | |
| 3129 3168 | 
             
                PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 0x11B3
         | 
| 3130 3169 | 
             
                PRIVATE_MEM_SIZE = 0x11B4
         | 
| 3131 3170 | 
             
                GLOBAL_WORK_SIZE = 0x11B5
         | 
| 3171 | 
            +
                MAX_SUB_GROUP_SIZE_FOR_NDRANGE = 0x2033
         | 
| 3172 | 
            +
                SUB_GROUP_COUNT_FOR_NDRANGE = 0x2034
         | 
| 3173 | 
            +
                LOCAL_SIZE_FOR_SUB_GROUP_COUNT = 0x11B8
         | 
| 3174 | 
            +
                MAX_NUM_SUB_GROUPS = 0x11B9
         | 
| 3175 | 
            +
                COMPILE_NUM_SUB_GROUPS = 0x11BA
         | 
| 3132 3176 | 
             
                EXEC_INFO_SVM_PTRS = 0x11B6
         | 
| 3133 3177 | 
             
                EXEC_INFO_SVM_FINE_GRAIN_SYSTEM = 0x11B7
         | 
| 3134 3178 |  | 
| @@ -3380,10 +3424,18 @@ module OpenCL | |
| 3380 3424 | 
             
                RGBx = 0x10BC
         | 
| 3381 3425 | 
             
                DEPTH = 0x10BD
         | 
| 3382 3426 | 
             
                DEPTH_STENCIL = 0x10BE
         | 
| 3383 | 
            -
                sRGB | 
| 3384 | 
            -
             | 
| 3385 | 
            -
                 | 
| 3386 | 
            -
                 | 
| 3427 | 
            +
                def self.sRGB
         | 
| 3428 | 
            +
                  return 0x10BF
         | 
| 3429 | 
            +
                end
         | 
| 3430 | 
            +
                def self.sRGBx
         | 
| 3431 | 
            +
                  return 0x10C0
         | 
| 3432 | 
            +
                end
         | 
| 3433 | 
            +
                def self.sRGBA
         | 
| 3434 | 
            +
                  return 0x10C1
         | 
| 3435 | 
            +
                end
         | 
| 3436 | 
            +
                def self.sBGRA
         | 
| 3437 | 
            +
                  return 0x10C2
         | 
| 3438 | 
            +
                end
         | 
| 3387 3439 | 
             
                ABGR = 0x10C3
         | 
| 3388 3440 | 
             
                @@codes[0x10B0] = 'R'
         | 
| 3389 3441 | 
             
                @@codes[0x10B1] = 'A'
         | 
| @@ -3429,6 +3481,7 @@ module OpenCL | |
| 3429 3481 | 
             
                HALF_FLOAT = 0x10DD
         | 
| 3430 3482 | 
             
                FLOAT = 0x10DE
         | 
| 3431 3483 | 
             
                UNORM_INT24 = 0x10DF
         | 
| 3484 | 
            +
                UNORM_INT_101010_2 = 0x10E0
         | 
| 3432 3485 | 
             
                @@codes[0x10D0] = 'SNORM_INT8'
         | 
| 3433 3486 | 
             
                @@codes[0x10D1] = 'SNORM_INT16'
         | 
| 3434 3487 | 
             
                @@codes[0x10D2] = 'UNORM_INT8'
         | 
| @@ -3445,6 +3498,7 @@ module OpenCL | |
| 3445 3498 | 
             
                @@codes[0x10DD] = 'HALF_FLOAT'
         | 
| 3446 3499 | 
             
                @@codes[0x10DE] = 'FLOAT'
         | 
| 3447 3500 | 
             
                @@codes[0x10DF] = 'UNORM_INT24'
         | 
| 3501 | 
            +
                @@codes[0x10E0] = 'UNORM_INT_101010_2'
         | 
| 3448 3502 | 
             
                # Returns a String representing the Enum value name
         | 
| 3449 3503 | 
             
                def name
         | 
| 3450 3504 | 
             
                  return @@codes[@val]
         | 
| @@ -3768,6 +3822,17 @@ module OpenCL | |
| 3768 3822 | 
             
                  attach_function :clEnqueueSVMMemFill, [CommandQueue,:pointer,:pointer,:size_t,:size_t,:cl_uint,:pointer,:pointer], :cl_int
         | 
| 3769 3823 | 
             
                  attach_function :clEnqueueSVMMap, [CommandQueue,:cl_bool,:cl_map_flags,:pointer,:size_t,:cl_uint,:pointer,:pointer], :cl_int
         | 
| 3770 3824 | 
             
                  attach_function :clEnqueueSVMUnmap, [CommandQueue,:pointer,:cl_uint,:pointer,:pointer], :cl_int
         | 
| 3825 | 
            +
                  begin
         | 
| 3826 | 
            +
                    attach_function :clSetDefaultDeviceCommandQueue, [Context,Device,CommandQueue], :cl_int
         | 
| 3827 | 
            +
                    attach_function :clGetDeviceAndHostTimer, [Device,:pointer,:pointer], :cl_int
         | 
| 3828 | 
            +
                    attach_function :clGetHostTimer, [Device,:pointer], :cl_int
         | 
| 3829 | 
            +
                    attach_function :clCreateProgramWithIL, [Context,:pointer,:size_t,:pointer], Program
         | 
| 3830 | 
            +
                    attach_function :clCloneKernel, [Kernel,:pointer], Kernel
         | 
| 3831 | 
            +
                    attach_function :clGetKernelSubGroupInfo, [Kernel,Device,:cl_kernel_sub_group_info,:size_t,:pointer,:size_t,:pointer,:pointer], :cl_int
         | 
| 3832 | 
            +
                    attach_function :clEnqueueSVMMigrateMem, [CommandQueue,:cl_uint,:pointer,:pointer,:cl_mem_migration_flags,:cl_uint,:pointer,:pointer], :cl_int
         | 
| 3833 | 
            +
                  rescue FFI::NotFoundError => e
         | 
| 3834 | 
            +
                    warn "Warning OpenCL 2.0 loader detected!"
         | 
| 3835 | 
            +
                  end
         | 
| 3771 3836 | 
             
                rescue FFI::NotFoundError => e
         | 
| 3772 3837 | 
             
                  warn "Warning OpenCL 1.2 loader detected!"
         | 
| 3773 3838 | 
             
                end
         | 
    
        data/opencl_ruby_ffi.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: opencl_ruby_ffi
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Brice Videau
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-11-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: narray
         |