2012-02-13 2 views
3

조회 테이블로 사용할 10^10 4 바이트 정수 배열이 필요합니다. RAM에로드하는 데는 40GB가 필요하며 이는 실현 가능하지 않습니다. 이 배열을 초기화 한 후에는이 배열에 쓸 필요가 없습니다. 단일 배열의 여러 스레드에서이 배열의 임의 위치에서 개별 정수 값을 동시에 읽어야합니다. 64 비트 플랫폼을 사용할 수 있습니다. 이 룩업 테이블의 가장 빠른 구현은 무엇입니까? 정규 파일 읽기 기능 사용 또는 예 : 메모리 맵 파일을 향상 시키시겠습니까?파일 기반 조회 테이블

+0

저장/수행 중이라고 가정 할 때이 어레이는 무엇입니까? –

+0

랜덤 액세스의 경우 일반 스트림 IO를 추측 할 수 있습니다. 메모리 맵핑은 액세스 패턴이없고 RAM (내 지식)에 적합하지 않은 경우 많이 도움이되지 않습니다. –

+0

@Jim Fell : 배열은 인덱싱 값 x를 f (x)에 매핑하는 데 사용됩니다. 여기서 f는 매우 느린 함수이므로 런타임에는 사용할 수 없습니다. – zeroes00

답변

1

명시 적 읽기와 같이 들리는 것 같습니다.

메모리 매핑은 한 번에 많은 양의 페이지를 가져 오는 속도를 얻습니다. (저는 Windows가 256KiB를 처리하며 다른 플랫폼에 대해서는 확신하지 못함) 처음으로 페널티없이 다시 액세스 할 수 있도록 허용합니다.

임의의 위치에서 정수를 읽는 경우 한 페이지에서 4 바이트 만 읽으면 256KB로 읽히고 다시 액세스하지 못할 수도 있습니다. 그런 낭비! 또한 다른 응용 프로그램과 파일 시스템 캐시에서 유용한 데이터가 많이 나온다고 생각해보십시오.

1

일단 파일이 만들어지면 읽기 전용 방식으로 액세스해야하기 때문에 메모리 매핑 된 파일 인 Boost 또는 기타 비용을 원한다고 생각하지 않습니다. 동일한 데이터에 동시에 액세스하려는 여러 프로세스가있는 경우 더 유용합니다. 당신은 단지 읽기 전용 스레드를 가지고 있으므로 간단한 40g 파일이 가장 간단하고 빠릅니다.