메모리로 8192x8192 행렬을 읽어야합니다. 나는 가능한 한 빨리 그것을하고 싶다. 나는 각 줄을 구문 분석 atoi
을하고 행렬을 채우는 함수 ParallelRead
에서멀티 스레드 응용 프로그램에서 가장 빠른 파일 읽기
char inputFile[8192][8192*4]; // I know the numbers are at max 3 digits
int8_t matrix[8192][8192]; // Matrix to be populated
// Read entire file line by line using fgets
while (fgets (inputFile[lineNum++], MAXCOLS, fp));
//Populate the matrix in parallel,
for (t = 0; t < NUM_THREADS; t++){
pthread_create(&threads[t], NULL, ParallelRead, (void *)t);
}
:
는 지금은이 구조를 가지고있다. 병렬이 더 이상이 문제를 최적화 할 수있는 방법이 있나요
Loading big file (fgets) : 5.79126
Preprocessing data (Parallel Read) : 4.44083
소요 라인 현명한 스레드 t 같은 라인이 개 스레드를 가진 두 개의 코어 시스템에서 t, t+ 1 * NUM_THREADS..
구문 분석이다?
아마도 충분한 데이터가 사용 가능 해지면 채우기 스레드를 i/o와 병렬로 시작할 수 있습니다. – vanza
솔직히 말하자면, 여러 스레드에서 동일한 파일을 읽는 중에 * 성능 향상을 얻을 수 있었다는 사실에 조금 놀랐습니다 ... 벤치마킹 할 때 파일이 실제로 디스크에서 읽혀지고 있는지 확인하고 있습니까? 캐시가 아닌가요? – NPE
@aix 예를 들어 2 개의 스레드를 사용했습니다. 나는 전처리 부분을 병렬 처리했다. 이것은 데이터가 메모리로 읽어 들여진 후이다. – sud03r