1. 고정메모리.

    - 가상메모리를 사용하지 않고, 메모리에 직접 접근하여 처리하는 접근 방식.

    - 가상 메모리와 물리적 메모리간의 치환 제거.

    - CUDA 스트림을 사용하기 위해서는 고정 메모리는 필수다.

    

   - 관련 함수 

     1. cudaMallocHost

     2. cudaFreeHost 


2. 제로 메모리.

   - 호스트와 디바이스간에 메모리 복사를 하지 않고, 고정된 메모리[Pinned Memory]영역에 바로 엑세스하여 데이터를 읽고 쓸수 있는 메모리.

   - PCI를 사용해서 전송 속다가 빨라 지는 것은 아니지만.

   - 데이터를 계산하고, 결과값을 메모리에 쓰면 비동기 양방향 PCI 전송이 진행되기 때문에, 그 만큼 성능향상을 볼 수 있다.


   - 전제조건

      - 맵드 메모리를 사용할 때, 글로벌 메모리의 결합 전송과 동일한 조건을 커널에서 충족시켜야 한다. 


       글로벌 메모리 결합 전송조건.

        - 글로벌 메모리를 읽어 올 때 최대 밴드 폭을 사용할 수 있는 조건  - 사실 최신 사양에서는 무시해도 되지 않나 싶다.[개인생각]




    - 주의-

      - 커널에서 작은 크기의 데이터를 많은 횟수로 맵드 메모리를 엑세스 하게 되면, 통상적인 데이터 전송보다 떨어지는 효과를 얻을 수 있다.


   - 관련 함수

      1  cudaHostAlloc

      2  cudaHostGetDevicePointer 

      3 예제: 


3.포터블 고정 메모리.

- 제로 메모리는 하나의 디바이스에서만 유효하기 때문에, 두개의 디바이스상에서 문제가 된다.  즉 두개의 호스트 스레드를 생성하여 처리하게 되는데, 이 때 하나의 스레드에서 생성한 고정된 메모리는 다른 쓰레드에서는 사용할 수 없게 되어, 자원 낭비를 하게 된다.


이런 자원 낭비를 피하고자 사용하는 것이 포터블 고정 메모리라고 한다.  


- 적용.

   cudaHostAlloc() 세번째 파라미터: cudaHostAllocMapped | cudaHostAllocPortable 옵션 지정.




 


' > CUDA' 카테고리의 다른 글

커널함수  (0) 2017.01.16
스트림.  (0) 2017.01.04
메모리 타입.  (0) 2017.01.03
CUDA 컴파일 옵션.  (0) 2017.01.03
쓰레드 ID 구하기.  (0) 2016.12.29

+ Recent posts