【发布时间】:2015-01-03 12:23:51
【问题描述】:
我正在尝试编写一个 OpenCL 概念验证应用程序,该应用程序在特定 CPU 上执行内核(因此将来可以扩展为支持 NUMA 并为相应 NUMA 上的内核执行分配内存-节点,正如in the Intel Dev forums 指出的那样。
不幸的是,Windows 调度程序并不关心我想要什么,因为它似乎将我的内核循环通过所有可用的 CPU 内核(因此远离本地内存)。
我现在正在使用CL_DEVICE_PARTITION_BY_COUNTS 属性创建一个只有一个执行单元的子设备,然后我在这个子设备上执行内核。尽管如此,当我查看 Windows 的 CPU 使用率时,并不是单个内核很忙,而是多个内核的工作负载出现峰值(除非我使用任务管理器手动将进程固定到一个内核 - 然后我得到结果我一直期待)。
这是我用来创建子设备的属性的完整定义(如果我查询子设备的执行单元数,它会正确地给我“1”):
cl_device_partition_property props[4];
props[0] = CL_DEVICE_PARTITION_BY_COUNTS;
props[1] = 1;
props[2] = CL_DEVICE_PARTITION_BY_COUNTS_LIST_END;
props[3] = 0;
我正在使用带有两个 Intel Xeon 处理器的 Windows 机器(顺便说一下,Intel OpenCL 实现将它们识别为一个具有 24 个执行单元的执行设备)并且还尝试使用 CL_DEVICE_PARTITION_BY_NAMES_INTEL,但它没有也可以解决)。
我做错了什么(或理解错误的方式)?
感谢您的帮助。
【问题讨论】:
标签: c windows opencl partition numa