CUDA 에는 Warp 내 스레드 간 레지스터 수준으로 데이터를 교환할 수 있는 intrinsics 함수가 있음. 공유 메모리와 __syncthreads() 오버헤드를 줄여 성능을 높일 때 자주 사용됨. 주로 벡터 내적의 합 같은 연산에서 사용.
지원 버전: Compute Capability 3.0 이상
헤더:<cuda_runtime.h>or<device_launch_parameters.h>
unsigned mask
0xFFFFFFFF → 래인 0~31 전부) int width (선택)
2, 4, 8, 16, 32, 64), 기본값 warpSize (보통 32)| Decimal | 32-bit Binary |
|---|---|
| 1 | 00000000 00000000 00000000 00000001 |
| 2 | 00000000 00000000 00000000 00000010 |
| 4 | 00000000 00000000 00000000 00000100 |
| 8 | 00000000 00000000 00000000 00001000 |
| 16 | 00000000 00000000 00000000 00010000 |
| 32 | 00000000 00000000 00000000 00100000 |
| 64 | 00000000 00000000 00000000 01000000 |
T var
__shfl_up_sync
T __shfl_up_sync(unsigned mask,
T var,
unsigned delta,
int width = warpSize);
__shfl_down_sync
T __shfl_down_sync(unsigned mask,
T var,
unsigned delta,
int width = warpSize);
__shfl_xor_sync
T __shfl_xor_sync(unsigned mask,
T var,
unsigned laneMask,
int width = warpSize);
laneMask를 비트 XOR한 결과 ID의 래인으로부터 var 복사__shfl_sync
T __shfl_sync(unsigned mask,
T var,
int srcLane,
int width = warpSize);
srcLane ID를 가진 래인의 var 값을 복사