Я запутался в том, как использовать общую и глобальную память в CUDA, особенно в отношении следующего:
- Когда мы используем
cudaMalloc()
, получаем ли мы указатель на общий или глобальный память? - Сохраняется ли глобальная память на хосте или устройстве?
- Есть ли ограничение размера для одного?
- К чему быстрее обращаться?
-
Сохраняет переменная в общей памяти такая же, как и передача ее адреса через ядро? То есть вместо
__global__ void kernel() { __shared__ int i; foo(i); }
почему не эквивалентно делать
__global__ void kernel(int *i_ptr) { foo(*i_ptr); } int main() { int *i_ptr; cudaMalloc(&i_ptr, sizeof(int)); kernel<<<blocks,threads>>>(i_ptr); }
Было много вопросов о конкретных проблемах скорости в глобальной и общей памяти, но ни одна из них не охватывала обзор того, когда следует использовать любой из них на практике.
Большое спасибо