Непонятное падение производительности

Всем привет!

Пишу на CUDA процедуру поиска элемента в массиве, код исполняемый на видеокарте может выглядеть примерно так (я его сильно упросил, но суть проблемы от этого не меняется):

....
int y=0;
int x=0;
for (int k=0; k< size; k++)
{
double temp3=matrV[l*size+k];
if ((temp3>y)&&(not_vis2(p_buff, k,iter,idx,size)))
{
x=k;
y=matrV[l*size+k];
}
}
...

в переменную x записывается номер искомого элемента. После этого я записываю x в другой массив, который вообще больше нигде не используется, он находится в глобальной памяти:
....
buffV[idx*size+iter]=x;
....
и получаю одно время выполнения. А если я меняю это строчку на две следующие:

int z=5;
buffV[idx*size+iter]=z;

то время уменьшается в 3-4 раза. Я никак не могу понять, почему при использовании разных переменных лежащих в одной и той же области памяти, я получаю такой заметный проигрыш в скорости.

Может кто-нибудь знает, в чем тут может быть проблема?

Forums: 

Это примерно то, над чем я

Это примерно то, над чем я голову ломал)
Если написать
int z=5;
buffV[idx*size+iter]=z;
то компилятор видит, что x вычислялся по сути зря и радостно выкидывает вычисления нафиг.
В таком варианте количество используемых регистров уменьшилось же?

Да, уменьшилось

Да, уменьшилось.

Спасибо большое, я все понял!