Мне нужно прочитать в память матрицу 8192x8192. Я хочу сделать это как можно быстрее.
Сейчас у меня есть такая структура:
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);
}
В функции ParallelRead
я разбираю каждую строку, выполняю atoi
и заполняю матрицу. Параллелизм является построчным, как поток t разбирает строку t, t+ 1 * NUM_THREADS..
В двухъядерной системе с 2 потоками это занимает
Loading big file (fgets) : 5.79126
Preprocessing data (Parallel Read) : 4.44083
Есть ли способ еще больше оптимизировать это?
Preprocessing
нулевым временем. Стоит ли оно того? (См. Закон Амдала.) - person Alan Stokes   schedule 20.05.2012