2015-09-25 27 views
1

在我的CUDA程序中,我看到通信時間內不同運行(高達50%)之間的巨大差異,其中包括主機到設備和設備,以便通過PCI Express爲固定內存託管數據傳輸時間。我怎樣才能解釋這種變化?當PCI控制器和內存控制器忙於執行其他PCIe傳輸時會發生這種情況嗎?任何見解/參考非常感謝。 GPU是Tesla K20c,主機是AMD Opteron 6168,12個內核運行Linux操作系統。 PCI Express版本是2.0。如何解釋PCIe總線上的性能差異?

+0

你使用的是什麼操作系統,它的GPU是顯示器還是計算專用設備? – talonmies

+0

操作系統是Linux,主機系統是AMD Opteron 6168.GPU是計算專用設備。我還用這些信息更新了這篇文章。 – Tania

+0

多少個處理器?只有一個? – talonmies

回答

2

您正在執行此操作的系統是一個NUMA系統,這意味着您的主機中的兩個分立CPU(Opteron 6168在一個包中有兩個6核CPU)中的每一個都有自己的內存控制器,每個CPU內存與託管CUDA設備的PCI-e控制器之間的HyperTransport跳數不同。

這意味着,根據CPU關聯性,運行帶寬測試的線程對主機內存和GPU可能有不同的延遲。這可以解釋你看到的時間差異

+0

感謝您的洞察力。 – Tania

+0

這解釋了我在同一個程序的200組計時值中看到的2-3組不同的計時數。在每組中,定時值相差小於1%。據我瞭解,這些組由於HyperTransport跳數的不同而有所不同,這取決於哪個核心正在運行主機代碼。 – Tania

+2

你會想用'numactl'來設置CPU和內存的親和力,這樣應用程序的性能是一致的並且是最大化的。 – njuffa