Community
cancel
Showing results for 
Search instead for 
Did you mean: 
dgerz
Beginner
97 Views

OpenCL SVM Functionality on Core-i7-6700

Hello,

I am using OpenCL 2.0 on a 6700 processor, and I am wondering why it does not support SVM Fine Grain Buffer, it says it only works with Course grain. Mainly I am looking for a way to have cross-device atomics which according to this article is not supported https://software.intel.com/en-us/articles/opencl-20-shared-virtual-memory-overview

Are there current devices that support Fine Grain Buffer and/or cross device atomics? Any suggestions on how to implement this?

 

Thanks,

 

Dan

0 Kudos
10 Replies
Ben_A_Intel
Employee
97 Views

Can you say more about your environment?  What OS are you on, and what driver version are you using?

dgerz
Beginner
97 Views

Sure, 

I'm running Ubuntu 16.04

The driver is Beignet 1.3.1

Would using the Intel SDK driver (rather than open source Beignet) be any help? When I installed the SDK it said that 16.04 was not supported, and I don't see the OpenCL 2.0 version of the library- only the 1.2 version.

SKost
Valued Contributor II
97 Views

>>...I don't see the OpenCL 2.0 version of the library- only the 1.2 version... The same happens on Windows platforms for another OpenCL vendors, like NVIDIA. Even if I have OpenCL dlls ( 32-bit and 64-bit ) version 2.0.4 when I check versions at run-time 1.2 is displayed: ... CL_DEVICE_VENDOR: NVIDIA Corporation CL_DRIVER_VERSION: 378.66 CL_DEVICE_VERSION: OpenCL 1.2 CUDA CL_DEVICE_OPENCL_C_VERSION: OpenCL C 1.2 CL_DEVICE_TYPE: CL_DEVICE_TYPE_GPU ... I think this is because 2.0 is still beta and not finalized yet.
Ben_A_Intel
Employee
97 Views

Can you try the latest SRB4.1 Linux driver package from here?

https://software.intel.com/en-us/articles/opencl-drivers

This package supports OpenCL 2.0 and should report the fine grain SVM capability, including SVM atomics.

dgerz
Beginner
97 Views

@Sergey: When you create the context, are you setting the platform, device, and compiler versions to 2.0? (See below, OPENCL_VERSION_2_0 is 2.0f)

platformVersion(OPENCL_VERSION_2_0),

deviceVersion(OPENCL_VERSION_2_0),

compilerVersion(OPENCL_VERSION_2_0),

@Ben

I just installed it and tried. Ran ldd on my binary to make sure it was using the right library (it was). It successfully shows me I m using OCL2.0 but still no fine grain buffer. I'm thinking it is a HW limitation, perhaps the gfx on this chip just doesn't support fine grain sharing? Any other tricks you can think of to enable it?

Thanks,

Dan Gerzhoy

 

 

Ben_A_Intel
Employee
97 Views

daniel gerzhoy wrote:

Any other tricks you can think of to enable it?

Strange.  Would it be possible to attach run and attach the output from "clinfo"?  Or at the very least, could you please send what you're seeing for CL_DEVICE_NAME, CL_DEVICE_VENDOR, CL_DEVICE_VERSION, and CL_DRIVER_VERSION when the device is only reporting coarse grain system SVM?

dgerz
Beginner
97 Views

Sorry for the delay. Here is the output of my Device info function. The SVM stuff is at the very bottom. I print out the map itself, as well as the values of each of the different definitions, then the result itself. (The map & the definition)

Here is the code just in case:

info = CL_DEVICE_SVM_CAPABILITIES;

	err = clGetDeviceInfo(device, info, sizeof(ret_svm_cap), &ret_svm_cap, NULL);

	CHECK_ERRORS(err);
		printf("map :%X\n",ret_svm_cap);
		printf("Course :%X\n",CL_DEVICE_SVM_COARSE_GRAIN_BUFFER);
		printf("FINE :%X\n",CL_DEVICE_SVM_FINE_GRAIN_BUFFER);
		printf("SYS :%X\n",CL_DEVICE_SVM_FINE_GRAIN_SYSTEM);
		printf("ATOM :%X\n",CL_DEVICE_SVM_ATOMICS);
		if(ret_svm_cap & CL_DEVICE_SVM_COARSE_GRAIN_BUFFER){
			ret_CharP = "CL_DEVICE_SVM_COARSE_GRAIN_BUFFER";
			LogInfo("\t CL_DEVICE_SVM_CAPABILITIES returns: %s\n", ret_CharP);
		}
		if(ret_svm_cap & CL_DEVICE_SVM_FINE_GRAIN_BUFFER){
			ret_CharP = "CL_DEVICE_SVM_FINE_GRAIN_BUFFER";
			LogInfo("\t CL_DEVICE_SVM_CAPABILITIES returns: %s\n", ret_CharP);
		}
		if(ret_svm_cap & CL_DEVICE_SVM_FINE_GRAIN_SYSTEM){
			ret_CharP = "CL_DEVICE_SVM_FINE_GRAIN_SYSTEM";
			LogInfo("\t CL_DEVICE_SVM_CAPABILITIES returns: %s\n", ret_CharP);
		}
		if(ret_svm_cap & CL_DEVICE_SVM_ATOMICS){
			ret_CharP = "CL_DEVICE_SVM_ATOMICS";
			LogInfo("\t CL_DEVICE_SVM_CAPABILITIES returns: %s\n", ret_CharP);
		} 

 

 

Printing Device info-------------------
     CL_DEVICE_ADDRESS_BITS returns: 32
     CL_DEVICE_MAX_COMPUTE_UNITS returns: 24
     CL_DEVICE_MAX_WORK_GROUP_SIZE returns: 512
     CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS returns: 3
     CL_DEVICE_MAX_WORK_ITEM_SIZES 0 returns: 512
     CL_DEVICE_MAX_WORK_ITEM_SIZES 1 returns: 512
     CL_DEVICE_MAX_WORK_ITEM_SIZES 2 returns: 512
     CL_DEVICE_DOUBLE_FP_CONFIG returns: 0l
     CL_DEVICE_EXTENSIONS returns: cl_khr_global_int32_base_atomics
cl_khr_global_int32_extended_atomics
cl_khr_local_int32_base_atomics
cl_khr_local_int32_extended_atomics
cl_khr_byte_addressable_store
cl_khr_3d_image_writes
cl_khr_image2d_from_buffer
cl_khr_depth_images
cl_khr_spir
cl_khr_icd
cl_intel_accelerator
cl_intel_subgroups
cl_intel_subgroups_short
cl_khr_fp16
     CL_DEVICE_MAX_CONSTANT_ARGS returns: 8
     CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE returns: 134217728
     CL_DEVICE_GLOBAL_MEM_CACHE_SIZE returns: 8192
     CL_DEVICE_GLOBAL_MEM_SIZE returns: 4294967296
     CL_DEVICE_MAX_ON_DEVICE_QUEUES returns: 1
     CL_DEVICE_MAX_ON_DEVICE_EVENTS returns: 1024
     CL_DEVICE_QUEUE_ON_HOST_PROPERTIES  returns: 
        CL_QUEUE_PROFILING_ENABLE
     CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES returns: 
         CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE 
         CL_QUEUE_PROFILING_ENABLE 
     CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE returns: 262144
     CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE returns: 16384
     CL_DEVICE_VERSION returns: OpenCL 2.0 beignet 1.3
     CL_DRIVER_VERSION returns: 1.3
     CL_DEVICE_OPENCL_C_VERSION returns: OpenCL C 2.0 beignet 1.3

map :1
Course :1
FINE :2
SYS :4
ATOM :8
     CL_DEVICE_SVM_CAPABILITIES returns: CL_DEVICE_SVM_COARSE_GRAIN_BUFFER

 

Ben_A_Intel
Employee
97 Views

Got it - this is the key:

CL_DEVICE_VERSION returns: OpenCL 2.0 beignet 1.3

Looks like you're still finding the Beignet implementation, not the SRB4.1 implementation.

Do you have both implementations installed?  If so, do you see that both Intel platforms are enumerating, and are you sure you're picking the right one?

You may find it helpful to temporarily disable Beignet by editing the contents of /etc/OpenCL/vendors while debugging - just remember to re-enable it when you're done!

minjun_w_
Beginner
97 Views

Ops, I have a similar question about OpenCL SVM support... I am currently using i7-6700 core (with coarse-grain SVM). I want to know what kinds of device support fine-grain and the system SVM. I am looking for the device supporting system SVM. 

Thanks, 

dgerz
Beginner
97 Views

Ben,

I looked and it was using the first Platform it was seeing "Intel Gen OCL Driver" which presumably is beignet.

However, when I make it use the other available Platform "Intel(R) OpenCL" I get CL_DEVICE_NOT_FOUND when i run a clGetDeviceIDs() on this platform.

If i switch the device type to CPU however, it works. But I need to be running on the GPU.

As for editing the /etc/OpenCL/vendors folder. How is that done exactly? I basically just renamed the intel-beignet.icd and intel-beignet-x86_64-linux-gnu.icd files to <their_name>.icd.bak

Seemed to work, only one platform showed up when I ran my program, but this method seems a little unclean.

According to Intel_SDK_for_OpenCL_2016_r3_release_notes.pdf (Page 11) The target application Platform for my 6th gen device is Ubuntu 14.04 GPU (w/ generic drive)

(I am using 16.04, if that makes any difference). But it seems to imply the regular version of the driver does not work.)

Page 12 specifies that I need to have an OpenCL graphics driver, but I was under the impression that I do have that driver. I will look into this further.

Thanks,

Dan