Использование векторных типов против пользовательских структур для 256-битных чисел в CUDAC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использование векторных типов против пользовательских структур для 256-битных чисел в CUDA

Сообщение Anonymous »

Я работаю над реализацией 256-битного числа арифметики в CUDA для таких операций, как добавление с распространением переноски, вычитание с заимствованием и сравнение. Первоначально я определил пользовательскую структуру для представления 256-битного номера: < /p>

Код: Выделить всё

struct big_number_t {
unsigned long long s0; // Least significant limb
unsigned long long s1;
unsigned long long s2;
unsigned long long s3; // Most significant limb
};
< /code>
Однако я наткнулся на ссылки на типы векторов в CUDA и обнаружил, что существуют встроенные типы, такие как Ulong4 и Ulonglong4. (https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#vector-types-allignment-requirements-in device-code) и я не могу определить, какой из этих типов правильный. Нагрузки/хранилища по сравнению с пользовательской структурой? Поскольку распространение переноски является последовательным, я не уверен, что типы векторов предлагают здесь какие-либо преимущества. Мои основные проблемы.struct big_number_t {
unsigned long long s0;
unsigned long long s1;
unsigned long long s2;
unsigned long long s3;
};

__device__ big_number_t bn_add(const big_number_t& a, const big_number_t& b, unsigned long long& carry_out) {
big_number_t result;
unsigned long long carry = 0;

result.s0 = a.s0 + b.s0;
carry = (result.s0 < a.s0) ? 1 : 0;

unsigned long long sum = a.s1 + b.s1 + carry;
carry = (sum < a.s1 || (carry && sum == a.s1)) ? 1 : 0;
result.s1 = sum;

sum = a.s2 + b.s2 + carry;
carry = (sum < a.s2 || (carry && sum == a.s2)) ? 1 : 0;
result.s2 = sum;

sum = a.s3 + b.s3 + carry;
carry = (sum < a.s3 || (carry && sum == a.s3)) ? 1 : 0;
result.s3 = sum;

carry_out = carry;
return result;
}
заменит ли замену big_number_t ulonglong4 или ulong4 предлагать какие -либо преимущества производительности, или это в основном вопрос предпочтения? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/795 ... rs-in-cuda
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»