2013-10-05 2 views
0

질문이 있으십니까? Memory allocated using cudaMalloc() is accessable by host or not? 현재 나에게 많은 것이 명확하지만, 왜 호스트의 장치 포인터에 액세스 할 수 없는지 궁금합니다. 내 이해는 CUDA 드라이버가 GPU DRAM 내부의 메모리 할당을 담당한다는 것입니다. 따라서이 정보 (장치에 할당 된 메모리의 첫 번째 주소는 무엇입니까?)는 호스트에서 실행중인 OS로 전달 될 수 있습니다. 그러면이 장치 포인터, 즉 할당 된 장치 메모리의 첫 번째 주소에 액세스 할 수 있습니다. 내 이해에 무슨 문제가 있니? 이 사실을 이해하도록 도와주십시오. 고마워요왜 호스트 측에서 장치 메모리에 액세스 할 수 없습니까?

+0

GPU에 자체 칩 메모리가 있으며 CPU에 자체 칩 메모리가 있습니다. 저렴한 데이터는 아닙니다. – aaronman

+0

데이터를 전송할 때 몇 가지 작업을해야합니다.이 사실을 이해하지 못했습니다. 제 질문과 관련이 있습니다. 자세한 내용을 알려주시겠습니까? – user25108

답변

2

GPU 메모리는 PCIE 버스의 다른쪽에 있습니다. 최신 PC 아키텍처의 호스트 메모리 용 메모리 컨트롤러는 CPU에 직접 연결됩니다.

따라서 액세스 방법은 상당히 다릅니다. GPU에있는 메모리에 액세스 할 때 트랜잭션은 일련의 PCIE 사이클로 프레임되어야합니다. 이 트랜잭션을 수행하기 위해 PCIE 버스를 설정하는 활동은 최신 CPU의 일반 메모리 가져 오기주기에 내장되어 있지 않습니다.

따라서 소프트웨어 상호 작용 (cudaMemcpy으로 처리)을 통해 버스의 반대쪽에있는 데이터를 보내거나 가져 오기 위해 PCIE 버스의 사이클을 프로그래밍하는 소프트웨어 시퀀스를 완료해야합니다.

+1

프로그래밍 언어가 트랜잭션을 원활하게 할 수 있다는 점을 강조해야한다고 생각하지만 사람들은 칩간에 메모리를 전송하는 것이 상당히 비싸다는 사실을 무시할 수도 있습니다. – aaronman

+0

예, 내 의견은 CUDA의 현재 상태를 기반으로합니다. 나는 무엇이 될 수 있는지, 무엇이 될 수 있는지, 이론적으로 가능한 것은 무엇인지를 언급하지 않고있다. 당신이 원한다면, 당신은 내 진술 전부에 "오늘, ..."을 붙일 수 있습니다. –

+0

내가 말하는 것은 사람들이 그것을 완벽하게 만드는 것이 어려울 것이라고 생각하지 않는다는 것입니다. 그러나 사람들은 그렇게 선택하지 않았습니다. 무의식적으로 프로그램을 느리게하지 마십시오 – aaronman

관련 문제