2015-01-26 1 views
9

기본적으로 작은 개체를 빠르게 할당하기 위해 메모리 풀이 필요합니다. 이상적으로는, 나는 호스트와 GPU에 할당 된 메모리에 대한 할당을 cudaMalloc로 대체하고 싶습니다. 나는 내 자신 만의 글을 쓸 수 있으며,해야만한다면 그렇게 하겠지만, 솔리드 오픈 소스 구현 중 하나를 바꿀 수는 없다.할당에 메타 데이터를 저장하지 않는 사용자 지정 메모리 할당 자 디자인 패턴이 있습니까?

유일한 문제는 cudaMalloc을 사용하면 메모리 풀이 할당 된 메모리에 접근 할 수 없다는 것입니다. 제 생각에 공통 메모리 할당 자 중 많은 수 (모두?)는 제목에있는 것과 같이 할당 된 데이터에 적은 양의 메타 데이터를 저장합니다. 그러므로 그들은 일하지 않을 것입니다.

누구도 이것이 사실이 아닌 메모리 할당자를 알고 있습니까?

+0

여기 malloc의 내부 구조에 대한 설명이 꽤 있습니다. 제공된 정보를 기반으로 직접 작성할 수 있습니다. http://stackoverflow.com/questions/3479330/how-is-malloc-implemented-internally – SGrebenkin

+0

메타 데이터를 어딘가에 저장해야합니다. * 호스트에 메타 데이터를 유지하고 CUDA GPU에 할당 된 데이터 만 유지하려는 경우 상황이 상당히 복잡하고 비효율적 일 수 있습니다. –

+0

컴파일 타임 솔루션으로 메타 데이터가 필요하지 않습니다. –

답변

2

모든 작은 할당이 동일한 크기이거나 적절한 상한이있는 경우 고정 크기 풀 할당자가 좋은 패턴입니다.

할당자는 시스템 호출을 사용하여 큰 블록을 잡은 다음 큰 블록 내에서 고정 된 크기의 블록 목록을 관리한다는 개념입니다. 할당은 무료 목록의 헤드에서 블록을 가져가는 것만 큼 쉽습니다. 할당 해제는 좀 더 복잡하지만 요구 사항에 따라 다른 방법으로 구현할 수 있습니다.

그것은 자신의 쓰기, 또는 C 구글 경우 ++ 고정 크기 할당 당신이 부스트를 포함하여 좋은 구현의 번호 : 풀 모든 할당 어딘가에, 일부 메타 데이터를 저장해야

0

을 찾을 수 있습니다 간단하다. 물론 할당 요구가 더 간단 해지면 메타 데이터의 양이 줄어들 것입니다.

정상적인 고정 크기 할당자는 문제를 올바르게 이해할 때 문제가 될 것이라고 생각합니다. 내가보기에 너는 정말 특별한 하드웨어 제약이있다.

고정 풀 할당자를 사용할 수도 있지만 단일 할당을 해제하지 않고 전체 풀만 해제 할 수 있습니다. 따라서 할당 된 메모리 내에 메타 데이터를 저장할 필요가 없어집니다.

물론 다른 메모리 영역을 사용하여 할당 된 영역 밖에 메타 데이터를 저장하는 할당자를 구현할 수 있습니다. 그러나 대부분의 라이브러리는 할당 된 영역에 메타 데이터를 저장합니다. 이는 일반 아키텍처에서 가장 편리하기 때문입니다.

그래서 가장 좋은 추측은 단일 할당을 해제하는 기능을 제공하지 않거나이 기능을 사용할 수없는 고정 풀 할당자를 찾는 것입니다. 따라서 할당자가 아무 것도 저장하지 않습니다. 물론 이것은 단 하나의 할당 대신에 항상 전체 메모리 풀을 해제하는 옵션 일뿐입니다 (btw : 메모리 누수에 대한 예방책, 적용 가능한 경우).

다른 대안은 가능한 한 간단한 메타 데이터로 사용하는 간단한 할당자를 기반으로 자신의 할당자를 구현하는 것입니다.

관련 문제