Мне нужно работать с очень большим массивом (около 2000^3) float, причем иногда мне приходится перемещаться по элементам массива случайным образом или другим непоследовательным способом.Работа с огромным массивом со случайным доступом к его элементам
Я использую библиотеку stxxl и сохраняю свои данные в контейнере stxxl :: vector. Эта библиотека хранит данные на диске и работает с небольшой частью данных в ОЗУ. Из-за случайного доступа к элементам необходимо очень часто читать/записывать куски памяти с диска, что замедляет работу программы.
Есть ли кто-нибудь, кто знает способ работы с большими данными со случайным маршрутом через элементы? Возможно ли это с помощью stxxl?
По моим подсчетам, это около 30 гигабайт данных, поэтому, если у вас нет 30 гигабайт оперативной памяти и вы хотите получить произвольный доступ (обычно распределенный), это неизбежно, данные должны время от времени считываться с диска. Если в вашем «случайном» доступе к данным есть шаблон, возможно, вы сможете каким-то образом его оптимизировать. – stellarossa
Укажите, какой алгоритм/задача вы используете для вектора. Большинство проблем не требуют чисто случайного доступа. – SpamBot
На самом деле у меня две задачи: во-первых, у меня нет шаблона, но я могу разделить массив и работать с разделами. Во второй задаче есть 2 маршрута: первый - последовательный маршрут каждого элемента массива размера N, второй маршрут - через каждый элемент 2000^2, N раз со сдвигом по 1 каждый 2000^2 раза. N = 2000^3. Мои данные - 3d куб вокселей, сначала я иду в направлении Z, затем в направлении X. – user2760303