그래픽 처리 장치에는 메모리 통합이라는 것이 있다는 것을 알게되었습니다. 그것에 대해 읽을 때 나는 주제에 대해 명확하지 않았습니다. 이것이 메모리 레벨 병렬 처리와 관련이 있습니까?
Google에서 검색했지만 만족스러운 답변을 얻을 수 없었습니다.
누군가 더 포괄적이고 이해하기 쉬운 설명을 제공하면 도움이 될 것입니다.
그래픽 처리 장치에는 메모리 통합이라는 것이 있다는 것을 알게되었습니다. 그것에 대해 읽을 때 나는 주제에 대해 명확하지 않았습니다. 이것이 메모리 레벨 병렬 처리와 관련이 있습니까?
Google에서 검색했지만 만족스러운 답변을 얻을 수 없었습니다.
누군가 더 포괄적이고 이해하기 쉬운 설명을 제공하면 도움이 될 것입니다.
답변:
"Coalescing"은 또한 통합 메모리 액세스 패턴을 의미 할 수 있습니다 . 이 사용법에서 병합은 스레드가 동시에 실행되도록하고 근처에있는 메모리에 액세스하려고 함을 의미합니다. 일반적으로 다음과 같은 이유 때문입니다.
따라서 예측 가능한 메모리 패턴을 사용할 수있는 프로그램을 만드는 것이 중요합니다. 스레드 프로그램에서는 메모리 요청이 완전히 넘치지 않도록하는 것이 훨씬 중요합니다. 그렇지 않으면 프로세싱 유닛은 메모리 요청이 이행되기를 기다릴 것이다.
병렬 프로그래밍 입문에서 영감을 얻은 다이어그램 : 학습 2 GPU 하드웨어 및 병렬 통신 패턴 :
아래 : 4 개의 스레드, 균일 한 메모리 액세스. 검은 색 점선 사각형은 단일 4 워드 메모리 요청을 나타냅니다.
메모리 액세스는 가깝고 한 번의 이동 / 블록 (또는 최소 요청 수)으로 검색 할 수 있습니다.
그러나 스레드 간 액세스 의 " 보폭 "을 늘리면 더 많은 메모리 액세스가 필요합니다. 아래 : 보폭이 2 개인 4 개의 스레드가 더 있습니다.
여기서이 4 개의 스레드에는 2 개의 메모리 블록 요청이 필요하다는 것을 알 수 있습니다. 보폭이 작을수록 좋습니다. 보폭이 넓을수록 더 많은 요청이 필요할 수 있습니다.
물론, 큰 메모리 보폭보다 더 나쁜 것은 임의 메모리 액세스 패턴입니다. 파이프 라인, 캐시 또는 예측은 거의 불가능합니다.
인터넷에서 "coalescing"이라는 단어의 두 가지 용도가 모두 메모리와 관련이 있다고 생각합니다. 하나는 사용 가능한 메모리 할당을 통합 하는 것입니다. 이는 질문에 연결된 wikipedia 페이지에서 참조됩니다.
메모리를 할당 할 때 때로는 메모리 관리자에 두 개의 인접한 메모리 블록이 해제되는 상황이있을 수 있습니다. 이것들을 결합하면 그것들을 하나의 해제 된 메모리 블록으로 만들 수 있습니다. 이것을 "코어 싱"이라고합니다. 예:
4 개의 할당 된 블록으로 시작 :
나중에 그중 하나가 해제됩니다.
그리고 나중에 다른 사람이 해방됩니다.
이제 두 개의 인접한 여유 블록이있는 이유는 무엇입니까? 그들을 합치기 :
통합은 가능한 한 빨리 또는 가비지 수집기에서 수집기가 실행될 때 발생할 수 있습니다.