• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

15강 Block ID 예제 오류 질문입니다.

23.03.14 16:14 작성 조회수 225

0

안녕하세요?

Jetson TX2 및 Xavier를 사용하여 CUDA예제를 실행하고 있습니다.

Block 예제에서 tx2와 xavier의 결과가 달라서 질문드립니다.

dimgrid<<<2,2,1>>>에 의해 Block의 갯수가 4개가 되고, warpid=0인 영역은 blockid가 (0,0), (1,0), (0,1), (1,1)인 곳에서 총 4개가 있을 것입니다.

하지만 Tx2에서 예제를 돌려본 결과 blockid가 (0,0), (1,0)인 곳에만 나옵니다.

혹시나 해서 xavier에서 실험을 해본 결과 총 4개가 나와 정상적으로 출력됩니다.

CUDA언어는 GPU구조와 상관 없이 출력되기 위해 grid-block-thread 구조를 가지므로 속도는 느리지만 동일한 결과를 출력해야하는데, 왜 tx2와 xavier가 같은 예제를 돌렸는데도 다른 결과가 나오는걸까요?

 

(혹시나 해서 <<<2,2,1>>> => <<<4,1,1>>>로 변경하여 돌려봤지만 여전히 tx2에서 blockid 2개만 출력되었습니다.)

답변 1

답변을 작성해보세요.

0

안녕하세요.

우선, CUDA 프로그래밍 강의를 수강해 주셔서 감사합니다.

 

제가 가진 하드웨어 환경에서는 말씀하신 내용을 재현할 수가 없어서,

정확한 답변을 드리기는 힘들다는 점은 양해를 부탁 드립니다.

 

말씀하신 상황에 대해서, 몇가지 가능성을 생각해 볼 수 있습니다.

 

우선, 정말로 TX2 에서 Thread Block 이 제대로 생성되지 않는다면?

TX2 모델이 출시된지가 몇년 되었다는 점을 고려하면,

실제로 이런 치명적인 문제가 있지는 않을 것이라고 생각됩니다.

있었더라도 출시 후 몇년이 지난 지금 시점에는 해결되었을 것으로 보입니다.

 

그러면, 제대로 생성되었다면, 왜 block id 는 제대로 나오지 않았을까?

추측할 수 있는 것은 CUDA printf 문장이 제대로 작동하지 않았을 가능성입니다.

 

CUDA 의 초기 버전들에서는 printf 문장이 원래 없었고,

현재도 printf 문장은 CUDA 나 GPU 가 직접 처리하기는 곤란한 구조입니다.

그래서, 가끔 이쪽에서 출력이 제대로 안 나왔다는 내용들이 나옵니다.

 

cudaDeviceSynchronize(); 함수를 kernel 수행 이후에 적절히 추가해서

해결했다는 보고들도 있고, CUDA hardware architecture에 따라 결과가 다르게 나와서,

CUDA hardware architecture 를 compile 시에 강제로 설정해서 해결했다는 보고들도 있습니다.

 

제공되는 소스코드들에서, print 출력 외에, 다른 계산 결과들은 제대로 나왔는지 체크가 필요하고,

아마도 TX2 모델에서의 CUDA 버그나, CUDA 프로그래밍 시에 유의할 점 같은 리포트들이 없었던 것을 고려하면,

printf 출력 상의 문제였을 가능성이 커 보입니다.

 

계속해서 다른 프로그램들에서도 계산 결과에 문제가 있다면, 다시 알려주시면 감사하겠습니다.

저도 TX2 하드웨어나 관련 내용을 계속 추적해 보겠습니다.

 

감사합니다.