작성
·
30
·
수정됨
0
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요, 좋은 강의 감사합니다.
transpose-shared.cu
가 느린 이유에 대해 질문이 있습니다.
강의 23-2에서는 X축으로 읽는 것이 아니라 Y축으로 메모리를 사용했기 때문에 느려졌다고 설명해 주셨습니다.
보통 이런 경우, 이중 for문을 돌릴 때 메모리 공간 지역성(spatial locality)으로 인해 X축(연속된 메모리)으로 읽는 것보다 Y축(연속되지 않은 메모리)으로 읽는 것이 더 느리다고 알고 있습니다.
하지만 이 transpose-shared.cu
CUDA 예제에서는 각 스레드가 배열의 단 하나의 인덱스만 사용하므로,
이중 for문에서 발생하는 문제라기보다는 이후 강의에서 설명해 주신 Bank Conflict가 발생해서 느려진 것이 아닐까 생각했습니다.
제 생각이 맞는지 여쭤보고 싶습니다.
수정 및 추가 질문)
챕터16강의 다시 보고 제 생각이 틀렸다는것을 인지했습니다.
그럼 결국 데이터를 저장할때도 캐쉬 문제인것일까요?
transpose-block.cu
는 캐쉬에 저장하고 한번에 flush가 가능하지만
transpose-shared.cu
는 저장할때마다 캐쉬미스가 발생해서 매번 global memory에 접근해야하니 느려지는것일까요?
답변 2
0
안녕하세요.
해당 프로그램에서의 문제는 상당히 떨어진 memory를 요구하기 때문에 발생합니다.
원하는 메모리 address를 실제로 계산해 보면, 상당히 떨어진 memory 주소를 요구하니까, 완전히 새로 전체를 읽어오거나, 써야 하기 때문에 생기는 문제입니다.
어느 경우든, 캐쉬 메모리 관리가 전체 프로그램의 성능에는 예상보다 훨씬 큰 영향을 끼칩니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. rkdghrk12님.
CUDA 프로그래밍에서 메모리 접근 패턴과 관련한 성능 이슈는 매우 중요하며, 특히 공유 메모리(shared memory)를 사용할 때 이러한 문제가 발생할 수 있습니다. 질문 주신 transpose-shared.cu
예제에서의 속도 저하는 여러 요소가 복합적으로 작용할 수 있습니다.
메모리 접근 패턴: 일반적으로 메모리의 공간 지역성(spatial locality)에 따라 X축 방향으로 연속되는 메모리 접근이 Y축보다 빠릅니다. 이는 메모리가 선형적으로 배열되어 있기 때문입니다. 그러나 CUDA에서는 메모리 접근 패턴뿐만 아니라 다른 요소들도 성능에 영향을 줍니다.
Bank Conflict: 공유 메모리를 사용하는 경우, Bank Conflict가 성능 저하의 주요 원인 중 하나가 될 수 있습니다. Bank Conflict는 여러 스레드가 공유 메모리의 같은 메모리 뱅크에 동시에 접근하려 할 때 발생합니다. 이는 CPU의 캐시 미스와 유사하게 성능 저하를 일으킬 수 있습니다.
스레드 동시성 및 동기화: 각 스레드가 단 하나의 인덱스만을 다루기 때문에 발생할 수 있는 스레드 간의 동기화 문제도 고려해야 합니다. 하지만, 주로 메모리 관련 접근 패턴이 성능에 더 큰 영향을 미칠 것입니다.
관련 질문으로 메모리 활용과 성능에 관한 다른 사용자들의 질문을 참고해보시면 도움될 것입니다:
- global memory를 사용한 matrix copy 대비 global memory를 활용한 matrix transpose가 속도가 느린 이유가 궁금합니다.
- gpu-add.cu 부분에서 커널 lanch 이후 cudaDeviceSynchronize() 부분 질문이요
각 링크에서 메모리 접근에 따른 성능 문제와 동기화 문제에 대한 지식공유자님의 자세한 설명을 통해 더 구체적인 이해가 가능할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.