Intel / AMD OpenCL CPU运行时不支持CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN

时间:2013-11-01 18:47:12

标签: multithreading opencl intel amd-processor numa

条件:

我安装了AMD OpenCL版本 AMD-APP-SDK-v2.8-lnx64 和Intel OpenCL版本* intel_sdk_for_ocl_applications_xe_2013_r2_sdk_3.1.1.11385_x64 *(版本标识不能更复杂)具有双插槽 Xeon E5-2650,Xeon Phi协处理器,64GB主机内存和Red Hat Enterprise Server 6.4的HPC服务器上的说明。

问题描述:

我想用 OpenCL 进行设备分裂以解决 NUMA 问题。不幸的是,设备(Intel CPU)或Linux内核似乎不支持 CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN 。我尝试过Intel OpenCL和AMD OpenCL。虽然AMD OpenCL设备查询说它支持affinity域选项,但实际上它不会:当我尝试使用CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN运行代码时,clCreateSubDevices()函数返回-30错误代码。根据{{​​3}},我猜这是当前英特尔OpenCL驱动程序中的一个错误。

潜在解决方案:

我认为如果我可以选择前16个并行计算核心(8个核心+ 8个超线程)(在32个并行计算核心中),那么这些核心将映射到第一个插槽。不幸的是,英特尔OpenCL在32个核心上随机分配了16个并行计算核心。另一方面,AMD OpenCL选择了前16个并行计算核心,但OpenCL编译器在我正在运行的内核上做得不好。所以这里也没有免费午餐定理。

问题:

  1. 有没有办法指定OpenCL应该用于计算的并行计算核心?
  2. 有没有办法克服OpenCL的这个NUMA问题?
  3. 欢迎任何有关NUMA亲和力体验的评论。

    谢谢!


    更新

    部分解决方法,仅适用于单插槽测试:

    (在Linux中)禁用NUMA节点中的所有核心,因此OpenCL ICD只能从其他NUMA节点的硬件线程中进行选择。例如。在2插槽32 HTT系统上:

    sudo sh -c "echo 0 > /sys/devices/system/cpu/cpu31/online"
    ....
    sudo sh -c "echo 0 > /sys/devices/system/cpu/cpu16/online"
    

    我不确定这种黑客攻击是否没有副作用,但到目前为止它似乎有用(至少测试)。

0 个答案:

没有答案