Для проекта мне приходится иметь дело с набором данных размером 30 ГБ. Я могу использовать очень мощный суперкомпьютер, который позволил бы мне хранить весь набор данных в ОЗУ для вычисления вычислений на нем (мне понадобится весь набор данных для некоторых алгоритмов, которые я должен реализовать). Проблема в том, что загрузка набора данных все еще очень медленная.
Я хотел бы попросить вас о практических предложениях по ускорению процесса. Моя идея заключалась в том, чтобы разделить процесс загрузки на явные потоки С++ 11, которые будут загружать отдельные куски данных на основе индекса потока. Я также слышал о библиотеке STXXL, которая, как представляется, имеет дело с внешними вычислениями, поэтому без загрузки данных в ОЗУ (чего я бы хотел избежать, поскольку у меня есть необходимая оперативная память - и я думаю, что могу получить результат быстрее, загружая на него набор данных).
Профиль. Узнайте, какая часть вашей программы занимает больше всего времени, а затем оптимизируйте эту часть. Все остальное - микро-оптимизация.
Возможно, вы захотите разделить свою программу на по крайней мере 2 потока, возможно, 3. Thread 1 отвечает за чтение данных и размещение в буфере. Thread 2 отвечает за выполнение вычислений, включая синтаксический анализ, входной буфер и размещение результатов в выходной буфер. В потоке 3 будут поступать данные из выходного буфера и отображать его.
В зависимости от скорости входных данных может потребоваться несколько входных буферов. Два достаточно, три или более, чтобы вычислить больше времени. Идея состоит в том, что входной поток заполняет один буфер, в то время как поток вычислений обрабатывает другой. Когда вычисление завершено, оно начинается с следующего буфера; аналогично нити чтения.
Другим узким местом может быть выборка данных из памяти. Найдите в Интернете "оптимизацию кеша данных c++". Это микро-оптимизация, если вы не загружаете и не обрабатываете огромное количество данных.