Tôi phải đọc ma trận 8192x8192 vào bộ nhớ. Tôi muốn làm điều đó càng nhanh càng tốt.
Ngay bây giờ tôi có cấu trúc này:Đọc tập tin nhanh nhất trong ứng dụng đa luồng
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);
}
Trong chức năng ParallelRead
, tôi phân tích mỗi dòng, làm atoi
và cư trú trong ma trận. Song song là line-khôn ngoan như chủ đề t phân tích dòng t, t+ 1 * NUM_THREADS..
Trên một hệ thống hai lõi với 2 chủ đề, này có
Loading big file (fgets) : 5.79126
Preprocessing data (Parallel Read) : 4.44083
Có cách nào để tối ưu hóa này thêm nữa?
Có lẽ bạn có thể bắt đầu các chủ đề phổ biến song song với i/o, khi có đủ dữ liệu. – vanza
Thành thật mà nói, tôi hơi ngạc nhiên khi bạn quản lý để cải thiện hiệu năng * từ việc đọc cùng một tập tin từ nhiều chủ đề ... Khi đo điểm chuẩn, bạn có chắc là tập tin đó thực sự được đọc từ đĩa hay không không phải từ bộ nhớ cache? Ví dụ: – NPE
@aix i hav đã sử dụng 2 chủ đề. Tôi đã song song phần tiền xử lý, đây là sau khi dữ liệu được đọc vào bộ nhớ. – sud03r