Факторизация Python LDLT для разреженных эрмитовых матриц есть? - PullRequest
1 голос
/ 08 июля 2019

У меня есть несколько больших (N-by-N для N = 10 000 до N = 36 000 000) разреженных, сложных эрмитовых матриц, обычно несингулярных, для которых у меня есть проблема спектрального среза.В частности, мне нужно знать точное число положительных собственных значений.

Мне требуется разреженный Разложение ЛПНП - есть ли оно?В идеале это будет многофронтальный алгоритм, который будет хорошо распараллеливаться и будет иметь возможность вычислять только D, а не верхние треугольные или перестановочные матрицы.

В настоящее время я использую ldl() в Matlab.Это работает только для реальных матриц, поэтому мне нужно создать реальную матрицу большего размера.Кроме того, он всегда вычисляет как L, так и D. Мне нужен лучший алгоритм для работы с 64 ГБ ОЗУ.Я надеюсь, что Python будет более настраиваемым.(Если так, я изучу Python.) Я должен добавить: я могу получить 64 ГБ ОЗУ на узел и получить 6 узлов.Даже на одной машине с 64 ГБ ОЗУ я хотел бы прекратить тратить ОЗУ на хранение L только для его удаления.

Возможно, кто-то написал интерфейс Python для MUMPS (MUltifrontal Massively Parallel Solver)?

Я бы использовал непараллельную версию LDLT на Python, так как во многих моих исследованиях используется множество матриц среднего размера.

1 Ответ

1 голос
/ 08 июля 2019

Мне нужен лучший алгоритм для работы с 64 ГБ ОЗУ. Я надеюсь, что Python будет более настраиваемым.(Если это так, я выучу Python.)

Если бы это было возможно:

|>>> ( 2. * 8 ) * 10E3 ** 2 / 1E12            # a 64GB RAM can store matrices ~1.6 GB
0.0016                                        #        the [10k,10k] of complex64
|                                             #        or  [20k,20k] of    real64
|>>> ( 2. * 8 ) * 63E3 ** 2 / 1E12            # a 64GB RAM can store matrices in-RAM
0.063504                                      #        max [63k,63k] of type complex
|                                             #        but
|>>> ( 2. * 8 ) * 36E6 ** 2 / 1E12            #        the [36M,36M] one has
20736.0                                       # ~ 21PB of data
+0:00:09.876642                               #        Houston, we have a problem
#---------------------------------------------#--------and [2M7,2M7] has taken    
                                                                   ~ month
                                                                  on HPC cluster

Потребности в исследованиях очевидны, но такого языка нет (будь то Matlab,Python, ассемблер, Julia или LISP), который может хранить 21 петабайт данных в пространстве всего лишь 64 гигабайта физической памяти RAM, чтобы сделать возможной сложную матрицу (с таким заданным масштабом) вычислениями собственных значений иБыстро настолько, насколько это возможно.Под этим я также подразумеваю, что «выгрузка» данных из вычислений в оперативной памяти в любую форму памяти вне оперативной памяти настолько непомерно дорога (примерно на ~ 1E2 ~ + 1E5 ~ порядков медленнее), что любая такаявычислительный процесс приведет к возрасту только для первого «чтения» 21 ПБ данных элементов.

Если у вашего исследования есть финансирование или спонсорство для использования довольно специфической инфраструктуры вычислительных устройств, могут быть некоторые приемы для обработки таких куччисла, но не ожидайте, что получите 21 ПБ червей (данных), помещенных в большую (64, ГБ) банку (ну, довольно небольшую), «бесплатно».

Вы можете наслаждаться Python по многим другим причинам ии / или мотивы, но не из-за более дешевых и более быстрых параллельных вычислений класса HPC, а также из-за того, что они легко обрабатывают 21PB данных внутри устройства объемом 64 ГБ, или из-за какого-либо уничтожения основных и огромных дополнительных расходов [TIME] -доменаиз разреженно-матричных манипуляций, видимых, но при их использовании в вычислениях.Сделав некоторую обработку разреженной матрицы xTB для получения результатов менее чем за 1E2 [мин] вместо 2E3, я осмелюсь сказать, что знаю, как чрезвычайно трудно увеличить как масштабирование данных [PSPACE], так исократить одновременно длительность обработки [EXPTIME] одновременно ... действительно Адский угол сложности вычислений ..., где представление с разреженной матрицей часто создаетдаже больше головных болей (опять же, как в [SPACE], так и в худшем случае в [TIME], когда появляются новые виды штрафов), чем помогая хотя бы получить некоторую потенциальную [PSPACE] -экономию

УчитываяОбъем параметров, я могу с уверенностью поспорить, что даже часть алгоритма не поможет, и даже обещания устройств с квантовыми вычислениями останутся в течение нашего срока службы, не способного увеличить такое обширное пространство параметров в неструктурированные квантовые элементы на основе отжига КК.управляемый минимизатор (обработка) для любой достаточно длинной (короткой) последовательности трансляции блоков параметровв процесс дополнения к проблеме кубит-поля (с ограниченным физическим размером), который в настоящее время используется сообществом контроля качества благодаря исследованиям LLNL и др.

Извините, подобной магии, по-видимому, не существует.

Использование доступных интерфейсов python для MUMPS не меняет проблему HPC в игре, но если вы хотите ее использовать, да, есть несколько из них.

ЭффективноеСокращение чисел в классе HPC по-прежнему является основной причиной проблем с продуктом эффективного хранения и извлечения представления данных [время обработки] x [(что угодно)].

Надеюсь, вы получитеи наслаждайтесь правильным сочетанием комфорта (питонские пользователи стремятся остаться в нем), и в то же время производительности класса HPC (серверной части любого типа), которую вы хотите иметь.

...