작성
·
32
0
안녕하세요, 선생님의 좋은 강의 덕분에 잘 공부하고 있습니다.
강의 내용 복기 중에 한가지 의문이 생겨 질문 남깁니다.
강의 17-8 matrix addition, pitched의 4분 07초 부분에서 device pitch (dev_pitch) 값이 40448 byte로 나온 것을 확인할 수 있고, 이어서 이 경우에 CUDA GPU 메모리 alignment boundary가 256 byte라고 설명 주셨습니다.
여기서, 만약 alignment boundary가 256 byte 라면 device pitch 값은 40448 byte가 아닌 40192 byte 가 나와야 하지 않는지 의문이 들었습니다. 40192 byte가 40000 byte(10000개 elements) 에서 가장 가까운 256의 배수임과 동시에 40000 byte를 모두 커버할 수 있다는 근거로 이렇게 생각을 했습니다.
그래서 alignment boundary 값을 512 byte로 계산을 해보니, 40448 byte가 40000 byte로부터 가장 가까운 512 배수로 계산이 되는데요.
이 경우에, 어떤 값이 맞는지 확신이 서지 않아 질문 글을 작성하게 되었습니다.
제가 사용한 계산식은 pitch = ceil(row_size_in_byte / alignment_boundary_in_byte) * alignment_boundary_in_byte
입니다.
제가 아직 공부하는 단계이고, 이해가 부족했을 가능성이 큽니다. 답변에 소중한 시간 내어주시면 정말 감사드립니다.
다시 한번 멋진 강의 만들어주셔서 감사합니다.
답변 2
0
안녕하세요.
해당 부분은 다시 체크해 보니, 말씀하신 논리 대로, 512 바이트로 보는 것이 더 합당해 보입니다.
아랫쪽의 AI 답변에도 나와 있듯이, CUDA 에서는 경우에 따라서는 alignment 를 가변적으로 적용하기도 해서, 256 바이트, 512 바이트가 유동적으로 적용되기도 합니다만, 이번 경우는 512로 보는 것이 더 적합해 보입니다.
강의를 재녹화할 때, 수정하도록 하겠습니다.
감사합니다. ~
0
안녕하세요, 인프런 AI 인턴입니다. 김태연님, 좋은 질문 감사합니다!
CUDA에서 pitch 값은 실제 메모리에서 데이터가 저장되는 방식에 관련이 있습니다. 이 값은 메모리의 특정한 구조적 제한으로 인해, 사용할 수 있는 가장 최적화된 형태를 취하게 됩니다. 일반적으로 계산에서의 pitch는 256 또는 512바이트 등의 alignment boundary를 사용해서 결정됩니다.
김태연님께서 사용하신 계산식 pitch = ceil(row_size_in_byte / alignment_boundary_in_byte) * alignment_boundary_in_byte
은 맞는 방식으로, 주어진 메모리 크기에서 가장 가까운 상위 256이나 512 byte의 배수를 찾는 것입니다.
제가 볼 때, 강의 중 40448 byte로 표시된 dev_pitch는 실제 데이터 크기와 alignment boundary 간의 전반적인 데이터 처리 방식을 반영하는 것 같습니다. CUDA에서 pitch는 종종 메모리 bank와의 최적화를 위해 더 넓은 범위 (이 경우 512 byte)를 사용하는 경우도 있습니다. 따라서 강의에서 언급된 40448 byte는 512 byte 기준으로 결정된 값일 가능성이 높습니다.
추가적으로 관련 내용을 자세히 알아보고 싶으시다면, 다음 유사한 질문과 답변을 참고하시면 도움이 될 것입니다:
강의 내용이 때때로 이러한 디테일한 사항에서 복잡할 수 있는데요, 이해에 차질 없으셨으면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요 선생님, 답변주셔서 감사합니다 !