2016-07-24 3 views
1

Я работаю над проектом python, где мне нужно будет работать с матрицей размером около 10000X10000X10000.Требования к оборудованию для работы с большой матрицей - python

Учитывая, что:

  • Матрица будет плотной, и должны быть сохранены в памяти.
  • Мне нужно будет выполнить линейную алгебру (с numpy, я думаю) на этой матрице, вокруг O (n^3), где n = 10000 операций (которые являются параллелизуемыми).

Являются ли мои требования реалистичными? Какими будут аппаратные требования, которые мне нужно будет работать таким образом в приличное время?

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

ответ

0

На самом деле, память была бы большой проблемой здесь. В зависимости от типа матричных элементов. Каждый поплавок занимает, например, 24 байта, поскольку это объект в штучной упаковке. Поскольку ваша матрица составляет 10^12, вы можете выполнить математику. Переключение на C, вероятно, сделает его более эффективным с точки зрения памяти, но не быстрее, поскольку numpy по существу написан на C с большим количеством оптимизаций

4

Ну, первый вопрос: какой тип значения вы сохраните в своей матрице? Допустим, что это будет целые числа (и, учитывая, что каждый байт использует спецификацию ISO для размера, 4 байта), у вас будет 4 * 10^12 байтов для хранения. Это большой объем информации (4 ТБ), поэтому, на первом месте, я не знаю, откуда вы берете всю эту информацию, и я предлагаю вам загружать только части, которые вы можете легко управлять.

С другой стороны, поскольку вы можете парализовать его, я порекомендую вам использовать CUDA, если вы можете позволить себе карту NVIDIA, поэтому у вас будет намного лучшая производительность.

Таким образом, трудно получить всю эту информацию только в ОЗУ и использовать paralell languajes.

PD: Вы используете неправильную стимуляцию O() по сложности алгоритма. Вы должны были сказать, что у вас есть O (n), являющийся n = size_of_the_matrix или O (n m t), являющийся n, m и t, размерностью матрицы.

1

Возможно, что-то подобное dask было бы хорошо для вас? Существуют и другие способы сделать это с помощью numpy, например, с помощью сопоставления с памятью и выполнения операций с параллелизуемыми фрагментами, но будет немного сложнее, особенно если вы все еще чувствуете себя комфортно с Python.

Лично я не вижу большой пользы от использования другого языка для этой задачи. Вам все равно придется иметь дело с аппаратными ограничениями и блокировкой для параллельных операций. С dask это приносит довольно много из коробки.

Смежные вопросы