Ich muss eine 8192x8192-Matrix in den Speicher lesen. Ich möchte es so schnell wie möglich machen.
Im Moment habe ich diese Struktur:Schnellste Datei lesen in einer Multi-Thread-Anwendung
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);
}
In der Funktion ParallelRead
, ich analysiere jede Zeile, tue atoi
und die Matrix besiedeln. Die Parallelität ist zeilenweise wie Gewinde t Linie parst t, t+ 1 * NUM_THREADS..
auf einem Zwei-Kern-System mit 2 Fäden, dies nimmt
Loading big file (fgets) : 5.79126
Preprocessing data (Parallel Read) : 4.44083
Gibt es eine Möglichkeit, dies weiter zu optimieren?
Vielleicht könnten Sie die Befüllung von Threads parallel zur E/A starten, da genügend Daten verfügbar sind. – vanza
Um ehrlich zu sein, bin ich ein wenig überrascht, dass es Ihnen gelungen ist, * irgendeine * Leistungsverbesserung durch das Lesen der gleichen Datei aus mehreren Threads zu erzielen ... Stellen Sie beim Benchmarking sicher, dass die Datei tatsächlich von der Festplatte gelesen wird nicht aus dem Cache? – NPE
@aix Ich habe 2 Threads nur zum Beispiel verwendet. Ich habe den Vorverarbeitungsteil parallelisiert, nachdem die Daten in den Speicher gelesen wurden. – sud03r