Загрузить очень большой набор данных в ОЗУ

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

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

0

Решение

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

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

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

Ваше другое узкое место может получать данные из памяти. Поищите в Интернете «оптимизация кэша данных c ++». Это микрооптимизация, если вы не получаете и не обрабатываете огромные объемы данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector