인프런 커뮤니티 질문&답변

rkdghrk12님의 프로필 이미지
rkdghrk12

작성한 질문수

CUDA 프로그래밍 (2) - C/C++/GPU 병렬 컴퓨팅 - 벡터 vector 더하기

Warp 갯수에 대한 고찰입니다....

해결된 질문

작성

·

439

0

SM내 warp가 24개가 이상일 경우에 overlab이 생기지 않아 효율적인 스케줄링이 가능하다는 것은 정확히 이해 했지만, Warp 갯수가 적어지면 근본적으로 작업시간 자체는 줄지 않을까? 그렇다면 빨리 끝나는게 스케줄링이 좋은거 아닐까? 라는 생각이 들었습니다.

다음은 제 생각을 담은 그림입니다.

다음과 같이 23개의 warp가 overhead가 걸릴 수는 있겠지만 일이 끝나는 시간은 짧지 않을까?

또 반대로 warp의 수가 작다는 것은 일 양이 많지 않다는 것이니 당연히 빨리 끝나는게 맞지 않을까?

라는 생각을 했습니다.

답변 2

0

아래 추가 질문하신 내용은, 병렬처리 나 CUDA 프로그래밍에서는 단순히 warp 숫자나, GPU의 overhead 정도로 예측할 수 있는 문제가 아닐 수 있습니다.

전문적인 CUDA 프로그래머 라면, 누구나 사용하는 테크닉 들이 있는데, 그것들은 강의에서 계속 설명하고 있습니다. bank conflict 나, memory hierarchy, memory access 패턴 같은 것은 CPU 기반의 C/C++/Java 강의에서는 개념조차 설명하지 않는 내용들이라는 점을 감안하셔야 합니다. 그것들까지 모두 염두에 두고, CUDA 프로그램을 짜야 최고의 성능이 나오게 되고, 역으로, 이 구조를 이해하지 못하거나, 잘못 적용하면, 의외로 더 느려질 수도 있습니다.

그리고, CUDA 의 설계 철학이, 계산량이 충분히 많은 때를 가정하고 설계 했다는 점도 고려하셔야 합니다.

강의에서도 예제를 최소 1M 개, 되도록이면 16M 개, 32M 개로 크게 크게 잡는 것이, 그게 CUDA 의 설계 철학이나, 운영 방식에 적합합니다. CPU 프로그램 과는 완전히 다른 철학으로 설계 되었고, 운영 구조도 CPU 스케줄러와는 완전히 다르다고 보셔야 합니다.

0

안녕하세요.

네, 생각하신 내용이 맞습니다.

전체적으로, 일의 양이 적으면, 전체 작업도 빨리 끝나는 것은 분명합니다.

설명한 부분은, 반대로, 일의 양이 일정 수준 보다 더 많을 때,

그 일을 빨리 끝내려면, SM 이 잠시도 쉬지 않고 일하게 하면,

SM 이 쉬면서 일하는 것보다는 더 효율적이라고 보시면 되겠습니다.

감사합니다.

rkdghrk12님의 프로필 이미지
rkdghrk12
질문자

답변 감사드립니다!

그렇다면 궁금한 점이 있는데요. 강사님이 말씀하신대로 SM이 쉬지 않고 일하는 것과 SM이 쉬고 일하는 것과 작업속도의 차이점이 있는건가요?

말씀하신점은 즉, SM이 연속적으로 일 처리 하는 것이 쉬고서 일하는 것보다 작업 처리 속도가 빠르다는 말씀이신가요?

사실 지금 딜레마에 빠진 것이 예를들어 Warp 30개를 일처리 하는 속도(overhead가 일어나지 않는 경우)가 WARP 22개 (overhead가 일어나는 경우)를 일처리 하는 속도보다 더 빨라 warp 스케줄링과 연관이 있나해서 질문드립니다.

아래 추가 질문하신 내용은, 병렬처리 나 CUDA 프로그래밍에서는 단순히 warp 숫자나, GPU의 overhead 정도로 예측할 수 있는 문제가 아닐 수 있습니다.

전문적인 CUDA 프로그래머 라면, 누구나 사용하는 테크닉 들이 있는데, 그것들은 강의에서 계속 설명하고 있습니다. bank conflict 나, memory hierarchy, memory access 패턴 같은 것은 CPU 기반의 C/C++/Java 강의에서는 개념조차 설명하지 않는 내용들이라는 점을 감안하셔야 합니다. 그것들까지 모두 염두에 두고, CUDA 프로그램을 짜야 최고의 성능이 나오게 되고, 역으로, 이 구조를 이해하지 못하거나, 잘못 적용하면, 의외로 더 느려질 수도 있습니다.

그리고, CUDA 의 설계 철학이, 계산량이 충분히 많은 때를 가정하고 설계 했다는 점도 고려하셔야 합니다.

강의에서도 예제를 최소 1M 개, 되도록이면 16M 개, 32M 개로 크게 크게 잡는 것이, 그게 CUDA 의 설계 철학이나, 운영 방식에 적합합니다. CPU 프로그램 과는 완전히 다른 철학으로 설계 되었고, 운영 구조도 CPU 스케줄러와는 완전히 다르다고 보셔야 합니다.

rkdghrk12님의 프로필 이미지
rkdghrk12

작성한 질문수

질문하기