작성
·
286
0
답변 1
0
제가 방금 cudaFree 없이 코드 돌려봤는데 남아있지는 않네요. 그러나 운영체제나 드라이버가 없다고 생각하면 (예를 들어 임베디드 기기의 GPU NPU등 을 opencl로 한다거나 ) 해제 안하면 큰일나겠죠
C에서도 마찬가지로 운영체제가 free해줘서 안해줘도 상관 없는거지 운영체제 없이 임베디드 개발을 한다고 하면 free가 정말 중요하게 쓰일껍니다. 메모리를 극도로 아껴야 하는 경우에도 free하고 선언하고 여러번 반복하게 될꺼구요
우와 실험까지 해서 결과 알려주시고 ... 감사합니다!
그런데 제가 궁금한 점은 free 를 꼭 해야할까? 같은 단순한 물음이 아니었습니다. free는 꼭 하는게 맞겠죠. 근본적인 것은 GPU 시스템의 메모리 관리가 어떻게 CPU 시스템의 운영체제와 맞물리는가 하는 것입니다. 강의를 들어보면 둘 간에 통신을 한다고 하며 GPU 시스템도 하나의 완전한 시스템이라고 하였습니다. 그러면 CPU 에서 가상메모리 기준으로 동작하는 프로그램의 생애주기와 그 생애주기를 가지는 CPU 시스템의 프로그램이 호출하는 GPU 시스템 내의 어떤 존재... 그 존재가 무엇인지조차 모르겠어요. 그걸 프로그램이라고 불러야 할지... 서브루틴이라 불러야 할지... 그 존재라는 것은 CPU 상의 가상메모리 상에 코드가 올라가지는 않을 거잖아요. 힙메모리도 별도로 가지고 있을건데요, 그 존재는 어떤 생애주기를 가지며 어떻게 CPU 의 함수호출을 듣게 되느냐 하는 것이 물음입니다. 이것들을 알게 되면 free() 할 때 일어나는 일도 알게되겠지요...
이 대화가 있은 뒤에 저도 공부를 더 해보았습니다. nvidia dli 라는 유료온라인 강의가 도움이 됩니다. 무료 강의도 있습니다.
nvidia의 강의에서는 https://developer.nvidia.com/blog/unified-memory-in-cuda-6/ 를 가지고 설명을 하고 있습니다. 인프런의 본 강의에서는 다루지 않는 내용입니다.
UM 이란 것은 nvidia 가 제공하는 가상메모리 기술 같습니다. CPU 와 GPU 의 메모리를 통합하는 새로운 가상메모리입니다. 가상메모리라고 생각하면 프로세스가 종료될 때 혹시 free 하지 않은 메모리들은 모조리 반납될 것으로 유추 할 수 있을 것 같습니다. OS 의 가상메모리가 그렇듯이요... 물론 확인한 것은 아닙니다.