Twój wąskiego gardła jest w I/O. Chcesz, aby program odczytywał tyle danych w pamięci przy najmniejszej liczbie wywołań we/wy. Na przykład odczytanie 256 numerów z jednym numerem fread
jest szybsze niż 256 fread
jednego numeru.
Jeśli możesz, sformatuj plik danych tak, aby odpowiadał wewnętrznej reprezentacji zmiennoprzecinkowej platformy docelowej lub przynajmniej reprezentacji programu. Zmniejsza to obciążenie związane z tłumaczeniem reprezentacji tekstowej na reprezentację wewnętrzną.
Omijanie systemu operacyjnego i używanie kontrolera DMA do odczytywania danych pliku, jeśli to możliwe. Układ DMA przenosi ciężar odczytu danych do pamięci z ramion procesora.
Kompaktuj plik danych. Plik danych chce być w jednym ciągłym zbiorze sektorów na dysku. Spowoduje to zmniejszenie czasu spędzanego na szukaniu różnych obszarów na półmiskach.
Czy programujesz kontrolę na żądanie dla zasobów dysku i procesorów. Zablokuj wszystkie inne nieważne zadania; podnieść priorytet realizacji programu.
Użyj wielu buforów, aby zatrzymać wirowanie dysku. Spora część czasu poświęcana jest oczekiwaniu na przyspieszenie i spowolnienie dysku twardego. Twój program może przetwarzać dane, podczas gdy coś innego przechowuje dane w buforze, co prowadzi do ...
Wielowątkowy. Utwórz jeden wątek, aby odczytać dane i powiadomić zadanie przetwarzania, gdy bufor nie jest pusty.
Powinny one zająć Ci trochę czasu. Wszystkie inne optymalizacje spowodują nieznaczne zwiększenie wydajności. (Takich jak bezpośredni dostęp do kontrolera dysku twardego w celu przeniesienia do jednego z buforów.)
Proszę nie oznaczać pytań w języku C++ jako 'c'. To po prostu denerwujące. –