2012-05-07 69 views
3

我們可以在OpenCl中強加處理器親和性嗎?例如線程#1在處理器#5上執行,
線程#2在處理器#6上執行,線程#3在處理器#7上執行,依此類推?OpenCL中的處理器親和性

感謝

回答

7

你不能在這個低水平的OpenCL指定親和力據我所知。但是,從OpenCL 1.2開始,通過使用clCreateSubDevices(可能在每個子設備中使用一個處理器,使用CL_DEVICE_PARTITION_BY_COUNTS, 1)分區到子設備中,並在每個子設備上運行單獨的內核執行,可以控制關​​聯。

除了基於CPU的OpenCL實現之外,這很可能運行得很糟糕,我不得不質疑爲什麼要這樣做。如果要限制OpenCL-CPU實施的CPU使用率,則可以使用clCreateSubDevices來分配部分計算資源。

描述來自英特爾的「設備分裂」的PDF是here,它有關於如何有效使用設備分區和clCreateSubDevices的大量信息。

+6

能夠在OpenCL中指定線程關聯並不像看起來那麼無用。在NUMA系統(例如Nehalem或AMD系統)上,從一個NUMA節點到另一個NUMA節點的線程遷移幾乎肯定會導致非本地內存訪問,這會損害性能。它應該由一個良好的CPU OpenCL運行時來處理核心關聯。 –