Каков максимальный размер матрицы в Eigen?

В моем случае (64-битная Ubuntu с 16 ГБ памяти, используя Eigen3), я пишу MatrixXd m (M, M); где M = 100 000, во время работы программа вылетела и сообщила:

что (): std :: bad_alloc
Прервано (ядро сброшено)

Используя динамический 2 dim массив, программа работает отлично. Есть ли жесткое ограничение на размер (плотной) матрицы в Eigen?

3

Решение

Вы пытаетесь выделить 100000*100000 элементы по 8 байтов каждый, или 80 000 000 000 байтов (74,5 ГБ), что не удается, поскольку у вас есть только 16 ГБ памяти. Это приводит к сбою выделения памяти, поскольку он не может найти ни одного непрерывного блока памяти такого большого размера.

В Eigen нет фиксированного ограничения, но массив должен быть размещен в вашей системе.

6

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

Вы забыли о размере матричного элемента.

MatrixXd использует двойной

100000 * 100000 = 10000000000 элементов.

sizeof (double), вероятно, 8 в вашей системе.

Это означает, что для создания этой матрицы вам понадобится:

ширина * высота * размерof (double) => 100000 * 100000 * 8 / (1024 * 1024 * 1024) => 74,5 гигабайта памяти.

1

По вопросам рекламы [email protected]