2014-10-05 3 views
5

메모리 매핑 된 파일에 저장된 엄청난 수의 배열의 일부를 읽고 데이터를 처리하고 배열의 다른 부분에 대해 반복해야합니다. 전체 배열은 약 50GB를 차지하고 내 컴퓨터는 8GB의 RAM을 가지고 있습니다.numpy 배열을위한 메모리 매핑 된 파일

처음에는 많은 작은 파일을 읽고 데이터를 처리 한 다음 처리 된 데이터를 memmap 파일에 기록하여 numpy.memmap을 사용하여 메모리 매핑 된 파일을 만들었습니다. memmap 파일을 생성하는 동안 메모리 문제가 없었습니다 (주기적으로 memmap.flush()를 사용하고있었습니다). 나는 memmap 파일의 작은 부분 (< 10메가바이트)에 액세스하려고 할 때 memmap 객체가 생성 될 때 내 전체 램 홍수, 그러나

mmapData = np.memmap(mmapFile,mode='w+', shape=(large_no1,large_no2)) 
for i1 in np.arange(numFiles): 
    auxData = load_data_from(file[i1]) 
    mmapData[i1,:] = auxData 
    mmapData.flush() % Do this every 10 iterations or so 

: 여기에 내가 메모리 매핑 된 파일을 만드는 방법은 다음과 같습니다. 기계가 크게 느려지고 아무것도 할 수 없습니다.

mmapData = np.memmap(mmapFile, mode='r',shape=(large_no1,large_no2)) 
aux1 = mmapData[5,1:1e7] 

내가 나를 메모리 전체를로드하려고하지 않고 대규모 배열의 일부를 액세스 할 수 있도록해야 mmap에 또는 numpy.memmap를 사용하여 생각 : 여기에 내가 메모리 매핑 된 파일에서 데이터를 읽으려고 시도 방법입니다. 내가 뭘 놓치고 있니?

디스크에 저장된 대량의 배열 (> 20GB)에 액세스하는 데 잘못된 도구를 사용하고 있습니까?

+0

아직 재현하지 못했지만, 나도 놀랍습니다. 슬라이스가 뚱뚱한 포인터라고 생각했습니다 ... 실행이 aux1 과제를 지나지 않았습니까? 할당을 지나치고 읽고 있다면, 캐시 라인이 5 바이트 (대개 64 바이트)보다 크기 때문에 예상보다 많은 메모리가로드됩니다. 이는 order = 'C'를 사용하는지 여부에 따라 다릅니다 '또는'F '. 하지만 여전히 8GB 가용 RAM이 장착 된 컴퓨터를 호스 치기에 충분하지 않아야하므로 대답이 아닙니다. –

답변

1

실제 메모리 소비가 아닌 가상 메모리를보고 있고 다른 컴퓨터에서 속도가 느려질 수 있습니까?

관련 문제