Как хранить массив C ++ размера ТБ в кластере - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу провести большую симуляцию, которая требует ~ 1 ТБ данных для описания группы взаимодействующих частиц (каждая имеет различные взаимодействия). Можно ли сохранить эти данные в массиве C ++?

У меня есть доступ к кластеру из 60 узлов. Каждый узел имеет 2 процессора с 48x16 ГБ памяти DDR4. Таким образом, это всего 192 ГБ на узел, или 11520 ГБ = 11 ТБ общего ОЗУ в кластере. Как бы вы динамически выделяли массив размером 1 ТБ в этом кластере?

1 Ответ

0 голосов
/ 11 апреля 2020

У вас есть 1 ТБ данных и 11 ТБ общей памяти. Поэтому нет проблем хранить все ваши данные в кластере, это просто вопрос того, как.

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

Вам необходимо определить, какой максимальный объем памяти можно использовать для каждой отдельной задачи в вашем конкретном кластере. Это что-то настроено администраторами кластера. Например, некоторые кластеры могут равномерно разделить память, поэтому 192 ГБ ОЗУ в каждом узле может быть доступно только в том случае, если вы выполняете одну задачу для ядра на узле, а не если вы запускаете одну задачу на узел. Вы не сказали нам, сколько существует ядер, и, очевидно, мы не знаем, каковы политики использования вашего кластера.

Ответ на ваш вопрос C ++: Да, вы можете хранить 1 ТБ в C ++ vector или array или list или map или любая другая структура данных. C ++ здесь не накладывает никаких ограничений.

...