Как рассматривать 64-разрядные слова на устройстве CUDA?

Я хотел бы обработать непосредственно 64-разрядные слова на платформе CUDA (например. uint64_t Вар).

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

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

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

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

1
задан halfelf 19 December 2018 в 07:10
поделиться

1 ответ

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

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

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

2
ответ дан 2 September 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: