Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Intel/AMD OpenCL CPU运行时不支持CL\U设备\u分区\u按\u亲和性\u域_Multithreading_Opencl_Intel_Amd Processor_Numa - Fatal编程技术网

Multithreading Intel/AMD OpenCL CPU运行时不支持CL\U设备\u分区\u按\u亲和性\u域

Multithreading Intel/AMD OpenCL CPU运行时不支持CL\U设备\u分区\u按\u亲和性\u域,multithreading,opencl,intel,amd-processor,numa,Multithreading,Opencl,Intel,Amd Processor,Numa,条件: 我安装了AMD OpenCL版本AMD-APP-SDK-v2.8-lnx64和英特尔OpenCL版本*用于ocl_应用程序的英特尔_SDK_xe_2013_r2_SDK_3.1.1.11385_x64*(版本标识再复杂不过了),这是在带有双套接字的HPC服务器上描述的,64GB主机内存和Red Hat Enterprise Server 6.4 问题描述: 我想与OpenCL一起进行设备裂变来回避NUMA问题。不幸的是,设备(Intel CPU)或Linux内核似乎不支持按\u亲和性\u

条件:

我安装了AMD OpenCL版本AMD-APP-SDK-v2.8-lnx64和英特尔OpenCL版本*用于ocl_应用程序的英特尔_SDK_xe_2013_r2_SDK_3.1.1.11385_x64*(版本标识再复杂不过了),这是在带有双套接字的HPC服务器上描述的,64GB主机内存和Red Hat Enterprise Server 6.4

问题描述:

我想与OpenCL一起进行设备裂变来回避NUMA问题。不幸的是,设备(Intel CPU)或Linux内核似乎不支持按\u亲和性\u域划分的CL\u设备。我试过英特尔OpenCL和AMD OpenCL。虽然AMD OpenCL device query表示它支持affinity domain选项,但实际上它不支持:当我尝试运行带有CL_device_PARTITION_BY_affinity_domain的代码时,clCreateSubDevices()函数返回-30错误代码。我猜这是一个错误,在当前的英特尔OpenCL驱动程序,根据一份报告

潜在解决方案:

我想,如果我能选择前16个并行计算核心(8个核心+8个超线程)(总共32个并行计算核心中的一个),那么这些将映射到第一个套接字。不幸的是,Intel OpenCL将16个并行计算内核随机分布在32个内核上。另一方面,AMD OpenCL选择了前16个并行计算内核,但是OpenCL编译器在我运行的内核上做得很差。因此,不免费午餐定理也适用于这里

问题:

  • 有没有办法指定OpenCL应该使用哪些并行计算核进行计算
  • 有什么方法可以克服OpenCL的NUMA问题吗
  • 欢迎对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"
    

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

    您可以先将其分成32个部分,然后通过用户界面选择16个部分,询问“前16个核心%100中是否有一个是活动的?”然后添加到列表中。等等,您是否仅对16个工作项使用OpenCL???很明显,性能会很差,但不是因为NUMA问题。huseyin:是的,所有16个CPU核心都在100%运行。不幸的是,我看不到任何通过UI挑选核心的方法——我认为这是不可能的。暗零:是16个CPU核(使用OpenCL术语:并行计算核/单元)。我很担心NUMA的问题。我对帖子做了更精确的修改。好的,如果你知道每个numa节点的物理地址,那么在每个节点中准备一些数组,然后使用这些数据进行计算。分别为每个核心/线程执行基准测试。然后在单次裂变中加入类似的点,另一部分作为另一次裂变。示例:一半线程将有1200个点,另一半线程将有70个点,因此您可以对它们进行分组。@Huseyintugrulbuyukik AFAIK在OpenCL中没有索引核心的方法。你所能做的就是告诉我:“我想要16个核”,你也可以指定如何选择它们:“选择在普通L3缓存或NUMA套接字上的核。”