Сейчас я изучаю параллельную обработку. Сложность, с которой я сталкиваюсь, заключается в том, что объем данных, обрабатываемых в моих вычислениях, настолько велик, что при увеличении размера проблемы происходит переполнение памяти (экспоненциальный рост размера набора данных в соответствии с ростом размера проблемы). Мои вычисления - это онлайн-алгоритм, в котором все входные наборы данных в начале неизвестны.
Основная причина взрыва памяти связана с данными, хранящимися в hashmap (кукушка ха sh, использованный в моей работе). Эта карта ha sh используется для проверки членства в уже обработанных данных.
Так что я нашел способ уменьшить использование памяти.
В моем случае есть некоторые характеристики
- Входными и выходными данными являются только целочисленные значения (0 ~ 2 ^ 64).
- необходим только тест на членство (используются только «содержат» и «вставляют»).
- Но это не должно быть вероятностной c структура данных, такая как фильтр Блума (ложное срабатывание никогда не допускается)
- Структура чисел выходов не смежных, но разреженных (например,> 1, 16, 563 , 711, 1221 ...)
Я не ожидаю полного решения, но буду признателен за любую подсказку или вдохновение или информацию о связанных исследованиях или статьях (я не могу найти соответствующие статьи или исследования) ,
Прежде всего, я нахожу способ уменьшить использование памяти. для простого примера: из 1 ~ 64 значений сохраняются, я сохраняю пару данных диапазона (1, 64) и удаляю значения 1 ~ 64 (но в моем случае это непрактично, так как числовые шаблоны редки, как я утверждаю) выше).