- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Can you say more about your environment? What OS are you on, and what driver version are you using?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page