Матриц диагонализация

вопросы строения молекул и квантовой химии
Ответить
Аватара пользователя
surius
Сообщения: 1461
Зарегистрирован: Пт сен 21, 2007 11:20 am

Матриц диагонализация

Сообщение surius » Пт май 04, 2018 9:56 pm

Коллеги,
может кто из уважаемых посетителей форума силен в диагонализационных алгоримах. Ищу быстрый метод диагонализации разряженных матриц. Было бы супер круто если бы к методу еще и код прилагался, а если бы он был на фортране, то я бы был внесебя от радости.

Ну и чтоб 2 раза не вставать:
У меня компилятор фортрана (и гфортран и пиджиай) ругаются, а точнее просто вылетают в ошибку, если размер массива превышает 81М (т.е. больше чем 9кХ9к).
Все бы ничего, но вот диагонализовать матрицу размером больше указанного - затык!
Наверное модно как-то дробить задачу, но это отдельная тема.
Ну собственно вопрос: это ограничение моего компилятора или это просто предел фортрана и привет!
Может кто поделится сакральным знанием как быть? :lol: :lol: :lol:
"Bite my shiny metal ass"
Bender

Аватара пользователя
EvgeniX
Сообщения: 2623
Зарегистрирован: Пт апр 27, 2007 5:32 am

Re: Матриц диагонализация

Сообщение EvgeniX » Сб май 05, 2018 2:00 am

А если в группу разработчиков компилятора запрос с образцом короткого кода привести?
1001110111010000101110100010100100010010110000001010100100010101

Аватара пользователя
surius
Сообщения: 1461
Зарегистрирован: Пт сен 21, 2007 11:20 am

Re: Матриц диагонализация

Сообщение surius » Сб май 05, 2018 2:22 am

EvgeniX писал(а):
Сб май 05, 2018 2:00 am
А если в группу разработчиков компилятора запрос с образцом короткого кода привести?
так это вроде не баг, это типа фича. Вот такое вот ограничение на размер массива...
т.е. компилятор аварийно выходит с таким объяснением. вот просто мне интересно это компилятора особенность или самого языка.
Компилятор, вроде, не на коленке писаный, PGI - солидная контора
"Bite my shiny metal ass"
Bender

Аватара пользователя
surius
Сообщения: 1461
Зарегистрирован: Пт сен 21, 2007 11:20 am

Re: Матриц диагонализация

Сообщение surius » Сб май 05, 2018 2:40 am

Ну и к слову... а может кто пользовался ARPACK? хорошо ли работает? Hужно будет попробовать...
"Bite my shiny metal ass"
Bender

Аватара пользователя
EvgeniX
Сообщения: 2623
Зарегистрирован: Пт апр 27, 2007 5:32 am

Re: Матриц диагонализация

Сообщение EvgeniX » Сб май 05, 2018 6:54 am

surius писал(а):
Сб май 05, 2018 2:22 am
так это вроде не баг, это типа фича. Вот такое вот ограничение на размер массива...
т.е. компилятор аварийно выходит с таким объяснением. вот просто мне интересно это компилятора особенность или самого языка.
Компилятор, вроде, не на коленке писаный, PGI - солидная контора
Лайков тоже как-то так в поддержку GCC написал. При указании флага оптимизации одного уровня резко сокращалась адресуемая память, что приводило к недоступности массива при превышении какого-то размера... Разработчики проверили, подтвердили наличие ошибки и привели какое-то решение в недельный срок. Может тут что-то такое же?

В языке по определению такой особенности нет. Это проблемы компилятора.
1001110111010000101110100010100100010010110000001010100100010101

mizuchi
Сообщения: 39
Зарегистрирован: Ср фев 23, 2011 5:10 pm

Re: Матриц диагонализация

Сообщение mizuchi » Сб май 05, 2018 11:15 am

Для диагонализации матриц используют библиотеку LAPACK; библиотека ARPACK подойдет лучше, поскольку оптимизирована для разреженных матриц. Обе имеют параллельные версии и хорошо задокументированы. Средства компиляторов для больших матриц не подходят.

Аватара пользователя
leonidas
Сообщения: 204
Зарегистрирован: Чт дек 23, 2010 6:27 pm

Re: Матриц диагонализация

Сообщение leonidas » Сб май 05, 2018 11:18 am

Каким именно алгоритмом и и какой библиотекой вы пользуетесь?
Вам нужен весь спектр собственных значений?

Для диагонализации больших разреженных матриц существуют такие методы как Davidson и Lanczos, но
они вычисляют только нижние собственные значения и векторы. Если матрица 9000x9000, то можно еще
попробовать стандартные методы.

Я например пользовался этим
DOI:
http://dx.doi.org/10.1016/0010-4655(94)90073-6
P.S. Отчасти сабж обсуждался здесь
viewtopic.php?f=71&t=122416&start=20

Ждем комментария главного эксперта по этой теме - madschumacher'a

P.P.S. и, конечно же, Yurii'a

Аватара пользователя
madschumacher
Сообщения: 688
Зарегистрирован: Ср авг 05, 2015 4:30 pm

Re: Матриц диагонализация

Сообщение madschumacher » Сб май 05, 2018 4:56 pm

leonidas писал(а):
Сб май 05, 2018 11:18 am
Ждем комментария главного эксперта по этой теме - madschumacher'a
Э, а чо эт я эксперт?! :shock:
Я никогда сам диагонализацию матриц не писал, в своих кодах использую только LAPACK (который совершенно не предназначен для разреженных матриц), а Давидсоном пользовался в чужих программах (и не только в квантово-химических пакетах :lol: ).
Тот (чужой) код с Давидсоном для сильно разреженных матриц, который у меня завалялся, я ТС уже отправил, так что не знаю что могу полезного сказать по этой теме... :dontknow:
И да узрел Охламон, что сие есть круть несусветная!

chemigor
Сообщения: 239
Зарегистрирован: Вс июн 21, 2015 5:29 pm
Контактная информация:

Re: Матриц диагонализация

Сообщение chemigor » Сб май 05, 2018 6:53 pm

Позвольте уточнить чуток, чтоб дать совет поточнее.

Правильно ли я понимаю, что у вас эрмитова разреженная матрица, вышедшая из дискретизации чего-то похожего на Хартри-Фока? В чем у вас матрица дана, есть ли предобуславливатель, каков он, на каком компьютере Вы это считаете?

Давидсон с предобуславливателем - самое оно, но тут как раз предобуславливатель - самое ключевое в этом гиблом деле звено. Причем правильнее тащить все подпространство во время решения, но K-ая итерация начинает поедать K*N слов памяти, где N - число неизвестных, поэтому используют ньютоновский предобуславливатель поверх обычного, чтоб уменьшить размер пространства.

По моему опыту на 80М в двойной точности скалярное произведение еще не сильно валится, особенно если делать реортогонализацию подпространства по два раза, но я для таких задач считаю скалярные произведения уже в 4-ой точности, а потом округляю до обычной двойной.

Коды старые на фортране есть, могу поделиться, что найду. Писал для своего диссера в 1999. Но код в общем-то сильно параллельный (на ту старую МВС100 или МВС1000 я уже запамятовал). Не факт, что все гладко полетит у Вас, да и потом мой проедобуславливатель на специальные конечные элементы был заточен, и там на 100М неизвестных давидсон за сотню итераций для 20-ой электронной пары сходился :) На кривом базисе такие результаты получить не реально, и давидсон часто перестартовать надо будет.

Короче, расскажите про задачу чуток побольше, уверен, что смогу помочь.

Ой... Написал, а потом задумался... У Вас матрица 9К*9К? Не... влоб, переводя в плотную и далее лапаком в один вызов, и без вариантов. То что написано выше, это для матриц 80М*80М.

> У меня компилятор фортрана (и гфортран и пиджиай) ругаются, а точнее просто вылетают в ошибку, если размер массива превышает 81М (т.е. больше чем 9кХ9к).
а это - банально в фортране нельзя столько в стек засовывать, лечится тем, что память аллоцируется в Сишнике с помощью malloc, и передается в фортран.

Аватара пользователя
Yurii
Сообщения: 652
Зарегистрирован: Сб авг 11, 2007 1:59 am

Re: Матриц диагонализация

Сообщение Yurii » Вс май 06, 2018 12:14 pm

chemigor писал(а):
Сб май 05, 2018 6:53 pm
... память аллоцируется в Сишнике с помощью malloc, и передается в фортран.
В Фортране тоже есть понятие указателей. Но используются они гораздо реже, потому что выделять память динамически в нем можно и без их помощи, а аргументы и так передаются по ссылке.
madschumacher писал(а):
Сб май 05, 2018 4:56 pm
в своих кодах использую только LAPACK
LAPACK на современных процессорах на одном ядре может уступать по скорости Intel MKL раз в сто, не говоря уже о проблемах распараллеливания. Я использую LAPACK только как "болванку" для разрабатываемых быстрых алгоритмов четверной точности.
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.

chemigor
Сообщения: 239
Зарегистрирован: Вс июн 21, 2015 5:29 pm
Контактная информация:

Re: Матриц диагонализация

Сообщение chemigor » Вс май 06, 2018 2:42 pm

Yurii писал(а):
Вс май 06, 2018 12:14 pm
LAPACK на современных процессорах на одном ядре может уступать по скорости Intel MKL раз в сто, не говоря уже о проблемах распараллеливания.
так никто не призывает использовать лапаковские исходники БЕЗ оптимальных BLASов, а вот вместо MKL можно использовать кучу всего ACML, GotoBLAS, ATLAS и еще с десяток того-же, посему в вычислительной математике лапаком обычно называют функциональность Донгарровского Лапака, но вот используют его всегда с чем-то хорошо оптимизированным - что конкретно - пусть ТС озвучит железку, на которой он считает, тогда и подберем. Может у него ГПУшка АМДшная, тогда ACML вынесет MKL как тузик грелку. У меня например, примерно раз так в 20 MKL проигрывает на сингулярном разложении, на dsysvd/zhesvd мерить лениво, но, думаю, будет тоже примерно также.

Аватара пользователя
Yurii
Сообщения: 652
Зарегистрирован: Сб авг 11, 2007 1:59 am

Re: Матриц диагонализация

Сообщение Yurii » Вс май 06, 2018 11:31 pm

chemigor писал(а):
Вс май 06, 2018 2:42 pm
в вычислительной математике лапаком обычно называют функциональность Донгарровского Лапака, но вот используют его всегда с чем-то хорошо оптимизированным
Интересное заявление насчет "всегда": буду теперь знать, когда возьмусь за очередную статью, посвященную диагонализации. Правда, непонятно, зачем "скрещивать" LAPACK с чем-то еще: часть Intel MKL и есть оптимизированный LAPACK https://software.intel.com/en-us/forums ... pic/743278 (при этом часть функций они алгоритмически улучшили, ничего об этом не говоря: я в какой-то статье об этом писал - в ней и улучшенный алгоритм приведен). Что касается Джека Донгарры, то я его неплохо знаю: мы с ним переписывались. Теперь о тузике и грелке: Intel MKL оптимизирован под хорошие интеловские процессоры: все другие пакеты уступают ему по скорости. Что касается AMD: сто лет назад я выбросил сей процессор в топку и до сих пор не жалею.
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.

Аватара пользователя
leonidas
Сообщения: 204
Зарегистрирован: Чт дек 23, 2010 6:27 pm

Re: Матриц диагонализация

Сообщение leonidas » Сб май 12, 2018 8:52 pm

Насчет AMD, я не могу позволить себе такую роскошь как выкинуть пол-кластера в топку. По-моему среднекриворукому опыту, MKL работает быстрее вышеперечисленных альтернатив даже на AMD.

chemigor
Сообщения: 239
Зарегистрирован: Вс июн 21, 2015 5:29 pm
Контактная информация:

Re: Матриц диагонализация

Сообщение chemigor » Вс май 13, 2018 2:11 am

> MKL работает быстрее вышеперечисленных альтернатив даже на AMD.
на самих процессорах - да, а на графических картах - нет, МКЛ просто с ними не умеет работать. У меня на одном узле (64 ядра) еле-еле терафлоп на процессорах получается, а на графических картах того же узла больше 10 терфлопс. И ACML понятно это хорошо поддерживает.

Я не спорю, что МКЛ лучше и развесистее других альтернатив, только на процессорах уже почти десять лет как никто не считается, и их используют только для плохо параллелящихся и ветвящихся алгоритмов. top500.org смотрите, сколько там систем без графических карт, сразу все станет ясно.

Поэтому брать как основной процессор Интел или АМД - совершенно безразлично, от него только его наличие и правильная администрация GPU-шных тредов требуется. То есть я не заморачиваюсь и беру то, под руку попадается.

Я честно говоря удивлен, что квантовую механику до сих пор повально на графических картах не считают, все используемые алгоритмы очень хорошо ложатся на архитектуру графических карт и, комментарии Yurii меня просто удивили. Наверное Донгарра в переписке с ним не поделился этими сокровенными знаниями, иначе бы Yurii не делал бы таких опрометчивых заявлений.

Аватара пользователя
Yurii
Сообщения: 652
Зарегистрирован: Сб авг 11, 2007 1:59 am

Re: Матриц диагонализация

Сообщение Yurii » Вс май 13, 2018 5:23 pm

Мы с Донгаррой обсуждали алгоритмы, а не всякую мелочевку, о которой упоминает chemigor.
По поводу графических карт: https://software.intel.com/en-us/articl ... ne-advisor
см. Select usage model of Intel® Xeon Phi™ Coprocessor
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.

chemigor
Сообщения: 239
Зарегистрирован: Вс июн 21, 2015 5:29 pm
Контактная информация:

Re: Матриц диагонализация

Сообщение chemigor » Вс май 13, 2018 8:25 pm

Yurii писал(а):
Вс май 13, 2018 5:23 pm
см. Select usage model of Intel® Xeon Phi™ Coprocessor
ой, да, верно, про Фи я-то и забыл, как же как же, 2 бакса за гигафлопс при том, что АМДшники я еще 4 года назад покупал по 7 центов за гигафлоп. И действительно, кому шашечки, а не считаться, конечно же его покупают. Даже Нвидия со своим титаном с 50 центами за гигафлопс нервно курит в сторонке.
Yurii писал(а):
Вс май 13, 2018 5:23 pm
Мы с Донгаррой обсуждали алгоритмы, а не всякую мелочевку, о которой упоминает chemigor.
ох и удивительные вещи Вы говорите, сколько знаю Донгарру, он только о производительности вычислительных систем и печется. Да и статьи у него только об этом и методах распараллеливания. Да и всегда он такой был, даже когда в 90х он нашей фирме тендер в Крей ресече на поставку линейных солверов проиграл, а сейчас-то и подавно.

Аватара пользователя
Yurii
Сообщения: 652
Зарегистрирован: Сб авг 11, 2007 1:59 am

Re: Матриц диагонализация

Сообщение Yurii » Вс май 13, 2018 9:58 pm

chemigor, теперь я окончательно уяснил, что Вы не только через одно место выделяете память в фортране: все остальное из той же серии.
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.

Ответить

Вернуться в «квантовая химия и моделирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя