Tengo que leer una matriz 8192x8192 en la memoria. Quiero hacerlo lo más rápido posible.
Ahora mismo tienen esta estructura:Lectura de archivos más rápida en una aplicación multiproceso
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);
}
En la función ParallelRead
, yo analizo cada línea, hago atoi
y poblar la matriz. El paralelismo es la línea en cuanto a como el hilo t analiza línea t, t+ 1 * NUM_THREADS..
En un sistema de dos hilos con 2 hilos, esto toma
Loading big file (fgets) : 5.79126
Preprocessing data (Parallel Read) : 4.44083
¿Hay una manera de optimizar esta más lejos?
Quizás podría iniciar los hilos de relleno en paralelo con la E/S, ya que hay suficientes datos disponibles. – vanza
Para ser sincero, estoy un poco sorprendido de que hayas logrado * * mejorar el rendimiento leyendo el mismo archivo de varios hilos ... Cuando se compara, ¿estás asegurándote de que el archivo realmente se lee del disco y no desde el caché? – NPE
@aix i hav usó 2 hilos, por ejemplo. He paralelizado la parte de preprocesamiento, esto es después de que los datos se leen en la memoria. – sud03r