Как обрабатывать 64-битные слова на устройстве CUDA? - PullRequest
1 голос
/ 16 июня 2010

Я бы хотел обрабатывать напрямую 64-битные слова на платформе CUDA (например, uint64_t vars).

Однако я понимаю, что адресное пространство, регистры и архитектура SP основаны на 32-битной архитектуре.

Я действительно обнаружил, что это работает правильно (на моей карте CUDA cc1.1):

__global__ void test64Kernel( uint64_t *word )
{
    (*word) <<= 56;
}

но я не знаю, например, как это влияет на использование регистров и операций за такт count.

1 Ответ

2 голосов
/ 17 июня 2010

Независимо от того, являются ли адреса 32-разрядными или что-то еще, это не влияет на типы данных, которые вы можете использовать.В вашем примере у вас есть указатель (32-разрядный, 64-разрядный, 3-разрядный (!) - не имеет значения) на 64-разрядное целое число без знака.

64-разрядные целые числа поддерживаются в CUDAно, конечно, для каждого 64-разрядного значения вы храните вдвое больше данных, чем для 32-разрядного значения, и поэтому будете использовать больше регистров, а арифметические операции займут больше времени (добавление двух 64-разрядных целых чисел просто расширит их до меньших типов данныхиспользование переносов для перехода в следующее подслово).Компилятор является оптимизирующим компилятором, поэтому постараюсь свести к минимуму влияние этого.

Обратите внимание, что использование с плавающей запятой двойной точности, также 64-битной, поддерживается только в устройствах с вычислительной способностью 1,3 или выше (т.е. 1,3или 2,0 в настоящее время).

...