2013-09-26 3 views
0

Я использую компьютерное зрение, используя CUDA. Следующий код занимает около 20 секунд.Почему этот оператор в ядре CUDA медленный?

__global__ void nlmcuda_kernel(float* fpOMul,/*other input args*/){ 

float fpODenoised[75]; 

/*Do awesome stuff to compute fpODenoised*/ 

//inside nested loops:(This is the statement that is the bottleneck in the code.) 
     fpOMul[ii * iwl * iwxh + iindex * iwxh + il] = fpODenoised[ii * iwl +iindex]; 

} 

, если я заменю это заявление с

fpOMul[ii * iwl * iwxh + iindex * iwxh + il] = 2.0f; 

код вряд ли занимает несколько секунд, чтобы закончить.

Почему заданный показатель замедляется и как я могу заставить его работать быстро?

ответ

3

Когда вы делаете изменение кода, компилятор может видеть, что весь ваш замечательный fpdenoised код больше не нужен и может его оптимизировать. Фактическое заявление, которое вы изменили, не является прямой причиной разницы в совершенстве. Вы можете проверить это, просмотрев код ptx или sass в каждом случае.

Смежные вопросы