맥의 통합 메모리와 GPU 지정 방식에 대한 기본 질문

Mac은 CPU와 GPU가 같은 메모리 공간을 함께 쓰는 구조를 갖고 있다. 그래서 CUDA처럼 CPU 메모리에서 로 데이터를 따로 복사하지 않아도 된다고 이해할 수 있다. 그런데 Metal에서는 GPU에서 실행되는 커널에 값을 넘길 때마다 [[(i)]] 같은 표시로 어느 버퍼를 볼지 지정해야 한다.

이 방식은 데이터를 옮기는 명령이라기보다, GPU가 여러 입력값 중 어떤 위치의 데이터를 읽어야 하는지 알려주는 약속에 가깝다. CUDA 경험이 있는 입장에서는 같은 메모리를 쓴다면 변수를 바로 넘기면 되지 않느냐는 혼란이 생길 수 있다.

핵심 포인트

  • Mac은 CPU와 GPU가 같은 메모리 공간을 쓰는 구조를 가진다.
  • 라도 Metal 커널에는 어떤 버퍼를 읽을지 지정해야 한다.
  • [[(i)]]는 GPU에 입력 데이터의 위치와 순서를 알려주는 표시로 쓰인다.
  • CUDA 경험자는 메모리 복사가 없다는 점 때문에 Metal의 버퍼 지정 방식을 헷갈릴 수 있다.
원문 보기