NVIDIA CUDA 13.3 додає апаратне безпереносне множення для прискорення криптографії
NVIDIA CUDA 13.3 представляє PTX-інструкцію clmad для апаратно прискореного безпереносного множення на архітектурах Ampere та новіших. Це забезпечує прискорення до 18,8x для GHASH (AES-GCM) на Blackwell B200 та суттєво оптимізує протоколи доведення з нульовим розголошенням.
Вплив: Високий
Чому це важливо
Безпереносне множення є фундаментальним елементом для сучасної криптографії, кодів виправлення помилок та доведень із нульовим розголошенням. Нативна підтримка на GPU усуває потребу в повільній емуляції (bitslicing), кардинально підвищуючи пропускну здатність шифрування та ZK-доведень.
TL;DR
- 01NVIDIA CUDA 13.3 додає PTX-інструкцію clmad, забезпечуючи апаратне безпереносне множення на архітектурах Ampere та новіших.
- 02Пропускна здатність GHASH для AES-GCM зростає до 18,8x на NVIDIA B200, досягаючи 6,3 ТБ/с.
- 03Системи доведення з нульовим розголошенням отримують прискорення від 3x до 13x для протоколів sum-check над GF(2^128).
Ключові факти
- Мінімальна підтримка GPU
- Ampere (SM 80) та новіші
- Пікова пропускна здатність GHASH на B200
- 6,3 ТБ/с
- Пікова пропускна здатність GHASH на RTX 5090
- 1300 ГБ/с
Апаратно прискорене безпереносне множення
Нова інструкція PTX clmad виконує безпереносне множення двох 64-бітних вхідних значень у 128-бітний результат. У CUDA 13.3 вона представлена варіантами .hi та .lo для обчислення відповідних половин результату з додаванням 64-бітного акумулятора.
Приклад реалізації на PTX
Розробники можуть вбудовувати асемблерний код PTX безпосередньо у свої GPU-ядра для швидких операцій над двійковими полями:
__device__ inline uint128_t clmad_mul_128(uint64_t a, uint64_t b, uint128_t acc) {
uint64_t acc_hi = (uint64_t)(acc >> 64);
uint64_t acc_lo = (uint64_t)acc;
uint64_t lo, hi;
asm("clmad.lo.u64 %0, %1, %2, %3;" : "=l"(lo) : "l"(a), "l"(b), "l"(acc_lo));
asm("clmad.hi.u64 %0, %1, %2, %3;" : "=l"(hi) : "l"(a), "l"(b), "l"(acc_hi));
return ((uint128_t)hi << 64) | lo;
}Бенчмарки та реальний вплив
Показники продуктивності для ключових криптографічних операцій демонструють суттєвий приріст порівняно з традиційним біт-слайсингом:
- GHASH на B200: Прискорення до
18,8xіз досягненням пропускної здатності6,3 ТБ/с. - GHASH на RTX 5090: Пропускна здатність досягає
1300 ГБ/с(покращення у2x). - Протокол Sum-Check над GF(2^128): Використовується в системах доведення з нульовим розголошенням (ZK), показуючи прискорення від
3xдо13xзавдякиclmad.
Спробуй за 2 хвилини
__device__ inline uint128_t clmad_mul_128(uint64_t a, uint64_t b, uint128_t acc) {
uint64_t acc_hi = (uint64_t)(acc >> 64);
uint64_t acc_lo = (uint64_t)acc;
uint64_t lo, hi;
asm("clmad.lo.u64 %0, %1, %2, %3;" : "=l"(lo) : "l"(a), "l"(b), "l"(acc_lo));
asm("clmad.hi.u64 %0, %1, %2, %3;" : "=l"(hi) : "l"(a), "l"(b), "l"(acc_hi));
return ((uint128_t)hi << 64) | lo;
}cpp
✓ Коли використовувати
- При оптимізації GHASH, AES-GCM або протоколів ZK-доведень на GPU Ampere та новіших.
- При реалізації кодів Ріда-Соломона, BCH або квантових стабілізаційних кодів на сучасному обладнанні NVIDIA.
✕ Коли НЕ варто
- Якщо цільові GPU старіші за архітектуру Ampere (до SM 80).
- Коли криптографічний алгоритм або алгоритм виправлення помилок не використовує арифметику двійкових полів.
Що зробити сьогодні
- Завантажте CUDA 13.3, щоб отримати доступ до нової PTX-інструкції clmad.
- Інтегруйте clmad у ядра множення бінарних полів для таких криптосистем, як AES-GCM або доведення з нульовим розголошенням.
Джерела