2016-12-31 16 views
1

мне нужно решить систему линейных алгебраических уравнений A.X = BКак сохранить память для решения симметричной (или верхней трагической) матрицы?

матрица А является двойной точности с о размере 33000x33000 и я получаю сообщение об ошибке при попытке передать его:

Невозможно выделить массив - переполнение по размеру массива.

Поскольку я использую LAPACK dposv с библиотекой Intel MKL, мне было интересно, если есть способ, чтобы каким-то образом передать меньшую матрицу к библиотечной функции? (Потому что только половина матричных массивов необходимо решить)

dposv функция должна только верхнюю или нижнюю треугольную матрицу для А. Here is more details about dposv.

Update: Пожалуйста, обратите внимание, что матрица Н х Н и тем не менее он принимает lda: INTEGER как The leading dimension of a; lda ≥ max(1, n). Может быть, есть способ разбора A как массива 1D?

+0

кстати 33000^2 * 8/1024^3 = более 8 гигабайт. Правильно ли мои расчеты? – Saeid

+1

Да, приблизительно 8.1 Гбайт –

+0

Если ваша матрица разрежена, читайте об использовании разреженных матриц. В противном случае купите больше памяти. –

ответ

0

mecej4 Благодаря

Есть несколько вариантов, чтобы пройти огромную матрицу, используя меньше памяти:

1

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

Пояснения, некоторые функции используют 4 байта целое, чтобы вычислить размер памяти при распределении. Это дает вам ограничение 2^32 или 4 Гбайт памяти, которое вы можете выделить, это намного меньше, чем ваш массив 8 Гбайт. В этом я принимаю целое число без знака; со знаком целого числа, этот предел равен 2 Гбайт.

подсказки, если вы ограничены в памяти:

Если не хватает памяти (около 4 Гбайт для одной только матрицы, поскольку она является треугольной), и вы не знаете структуру матрицы, то забудьте об особом решатели и решить вашу проблему самостоятельно. Решение системы с верхней треугольной матрицей является обратной заменой. Начиная с последней строки решения, для вычисления каждого компонента решения требуется только одна строка матрицы.

Найти способ загрузки матрицы по строке, начиная с последней строки.

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

  • Нет связанных вопросов^_^