логический сдвиг в CUDA - PullRequest
0 голосов
/ 26 мая 2011
rshift = ((J[i]-1)*((2*net)-J[i]) >> -1);

L[i] = rshift + K[i]-J[i];

когда я компилирую это, я получаю «error: выражение должно иметь целочисленный тип или тип enum», соответствующий первой строке. кроме 'i' все имеют двойную точность.

это не работает ни для левого, ни для правого сдвига. Я использую Fedora 12 и у меня есть nvcc 3.2, V0.2.1221. для c ++ (компилятор g ++) работает отлично.

но когда я попробовал это для

rshift = ((J[i]-1)*((2*net)-J[i]) >>= -1);

L[i] = rshift + K[i]-J[i];

это было «ошибка: выражение должно быть изменяемым lvalue», я много пробовал и не мог это исправить. есть идеи?

1 Ответ

1 голос
/ 27 мая 2011

Чтобы ответить на вопрос - в CUDA C (ни C, ни C ++) не существует такого понятия, как сдвиг битов типов с плавающей запятой.И из вопросов, размещенных в комментариях, может показаться, что источником путаницы была неправильная попытка перевести какой-то унаследованный код на Фортране, где также отсутствует поддержка сдвига битов с плавающей запятой.

...