C ++ - загрузка очень большого набора данных в ОЗУ

0

Для проекта мне приходится иметь дело с набором данных размером 30 ГБ. Я могу использовать очень мощный суперкомпьютер, который позволил бы мне хранить весь набор данных в ОЗУ для вычисления вычислений на нем (мне понадобится весь набор данных для некоторых алгоритмов, которые я должен реализовать). Проблема в том, что загрузка набора данных все еще очень медленная.

Я хотел бы попросить вас о практических предложениях по ускорению процесса. Моя идея заключалась в том, чтобы разделить процесс загрузки на явные потоки С++ 11, которые будут загружать отдельные куски данных на основе индекса потока. Я также слышал о библиотеке STXXL, которая, как представляется, имеет дело с внешними вычислениями, поэтому без загрузки данных в ОЗУ (чего я бы хотел избежать, поскольку у меня есть необходимая оперативная память - и я думаю, что могу получить результат быстрее, загружая на него набор данных).

Теги:
ram
dataset

1 ответ

0

Профиль. Узнайте, какая часть вашей программы занимает больше всего времени, а затем оптимизируйте эту часть. Все остальное - микро-оптимизация.

Возможно, вы захотите разделить свою программу на по крайней мере 2 потока, возможно, 3. Thread 1 отвечает за чтение данных и размещение в буфере. Thread 2 отвечает за выполнение вычислений, включая синтаксический анализ, входной буфер и размещение результатов в выходной буфер. В потоке 3 будут поступать данные из выходного буфера и отображать его.

В зависимости от скорости входных данных может потребоваться несколько входных буферов. Два достаточно, три или более, чтобы вычислить больше времени. Идея состоит в том, что входной поток заполняет один буфер, в то время как поток вычислений обрабатывает другой. Когда вычисление завершено, оно начинается с следующего буфера; аналогично нити чтения.

Другим узким местом может быть выборка данных из памяти. Найдите в Интернете "оптимизацию кеша данных c++". Это микро-оптимизация, если вы не загружаете и не обрабатываете огромное количество данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню