2011-09-20 63 views
1

預測/計算CUDA內核性能的程度如何?您能預測CUDA內核的運行時間嗎?

在CUDA上工作了一番之後,這似乎並不重要。

但是我的一位不在CUDA工作的同事告訴我,如果您擁有內存帶寬,處理器數量和速度,這不是一件難事嗎?

他說的話似乎與我讀的不一致。這是我能想象得到的。你怎麼看?

Memory processed 
------------------ = runtime for memory bound kernels ? 
Memory bandwidth 

Flops 
------------ = runtime for computation bound kernels? 
Max GFlops 

回答

1

我認爲你可以預測最好的情況有一些工作。就像你說的,與指令計數,內存帶寬,輸入大小等

然而,預測實際最壞情況是非常棘手。

首先,有像內存訪問模式的因素。例如:對於具有較早CUDA功能的卡,您必須注意分配全局內存訪問權限,以便它們不會爭用一個內存組。 (較新的CUDA卡在邏輯和物理地址之間使用散列來解決此問題)。其次,存在非確定性因素:PCI總線有多忙?主機內核有多忙?等

我懷疑最容易接近實際運行時間基本上是運行內核輸入的子集,看看它實際需要多長時間。

+0

同意,理論最高性能的百分比是你可以做的最好的。 – ArchaeaSoftware

2

這樣的計算幾乎不會給出好的預測。有許多因素會影響表現。而這些因素以非常複雜的方式相互作用。因此,您的計算會給出性能的上限,這與實際性能(大部分情況下)相差甚遠。

例如,對於內存綁定的內核,具有很多緩存未命中的那些將與具有這些命中的內核不同。或那些有分歧,那些有障礙...

我建議你看這篇文章,這可能會給你更多關於這個問題的想法:"An Analytical Model for a GPU Architecture with Memory-level and Thread-level Parallelism Awareness"

希望它有幫助。