Я хотел бы обработать непосредственно 64-разрядные слова на платформе CUDA (например. uint64_t
Вар).
Я понимаю, однако, что адресуемое пространство, регистры и архитектура SP все 32-разрядные базирующийся.
Я на самом деле нашел, что это работало правильно (над моей картой CUDA cc1.1):
__global__ void test64Kernel( uint64_t *word )
{
(*word) <<= 56;
}
но я не знаю, например, как это влияет на использование регистров и операции на количество такта.
Независимо от того, являются ли адреса 32-битными или чем-то еще, не влияет на то, какие типы данных вы можете использовать. В вашем примере у вас есть указатель (32-битный, 64-битный, 3-битный (!) - не имеет значения) на 64-битное целое число без знака.
64-битные целые числа поддерживаются в CUDA, но, конечно, для каждого 64-битного значения вы храните вдвое больше данных, чем 32-битное значение, и поэтому будет использоваться больше регистров, а арифметические операции займут больше времени (добавление двух 64-битных значений). битовые целые числа просто расширят его на меньшие типы данных, используя переносы для вставки в следующее подслово). Компилятор является оптимизирующим компилятором, поэтому постарается минимизировать его влияние.
Обратите внимание, что использование числа с плавающей запятой двойной точности, также 64-битное, поддерживается только в устройствах с вычислительной мощностью 1.3 или выше (то есть 1.3 или 2.0 в настоящее время).