Матриц диагонализация
Матриц диагонализация
Коллеги,
может кто из уважаемых посетителей форума силен в диагонализационных алгоримах. Ищу быстрый метод диагонализации разряженных матриц. Было бы супер круто если бы к методу еще и код прилагался, а если бы он был на фортране, то я бы был внесебя от радости.
Ну и чтоб 2 раза не вставать:
У меня компилятор фортрана (и гфортран и пиджиай) ругаются, а точнее просто вылетают в ошибку, если размер массива превышает 81М (т.е. больше чем 9кХ9к).
Все бы ничего, но вот диагонализовать матрицу размером больше указанного - затык!
Наверное модно как-то дробить задачу, но это отдельная тема.
Ну собственно вопрос: это ограничение моего компилятора или это просто предел фортрана и привет!
Может кто поделится сакральным знанием как быть?
может кто из уважаемых посетителей форума силен в диагонализационных алгоримах. Ищу быстрый метод диагонализации разряженных матриц. Было бы супер круто если бы к методу еще и код прилагался, а если бы он был на фортране, то я бы был внесебя от радости.
Ну и чтоб 2 раза не вставать:
У меня компилятор фортрана (и гфортран и пиджиай) ругаются, а точнее просто вылетают в ошибку, если размер массива превышает 81М (т.е. больше чем 9кХ9к).
Все бы ничего, но вот диагонализовать матрицу размером больше указанного - затык!
Наверное модно как-то дробить задачу, но это отдельная тема.
Ну собственно вопрос: это ограничение моего компилятора или это просто предел фортрана и привет!
Может кто поделится сакральным знанием как быть?
"Bite my shiny metal ass"
Bender
Bender
Re: Матриц диагонализация
А если в группу разработчиков компилятора запрос с образцом короткого кода привести?
Re: Матриц диагонализация
так это вроде не баг, это типа фича. Вот такое вот ограничение на размер массива...
т.е. компилятор аварийно выходит с таким объяснением. вот просто мне интересно это компилятора особенность или самого языка.
Компилятор, вроде, не на коленке писаный, PGI - солидная контора
"Bite my shiny metal ass"
Bender
Bender
Re: Матриц диагонализация
Ну и к слову... а может кто пользовался ARPACK? хорошо ли работает? Hужно будет попробовать...
"Bite my shiny metal ass"
Bender
Bender
Re: Матриц диагонализация
Лайков тоже как-то так в поддержку GCC написал. При указании флага оптимизации одного уровня резко сокращалась адресуемая память, что приводило к недоступности массива при превышении какого-то размера... Разработчики проверили, подтвердили наличие ошибки и привели какое-то решение в недельный срок. Может тут что-то такое же?surius писал(а): ↑Сб май 05, 2018 2:22 amтак это вроде не баг, это типа фича. Вот такое вот ограничение на размер массива...
т.е. компилятор аварийно выходит с таким объяснением. вот просто мне интересно это компилятора особенность или самого языка.
Компилятор, вроде, не на коленке писаный, PGI - солидная контора
В языке по определению такой особенности нет. Это проблемы компилятора.
Re: Матриц диагонализация
Для диагонализации матриц используют библиотеку LAPACK; библиотека ARPACK подойдет лучше, поскольку оптимизирована для разреженных матриц. Обе имеют параллельные версии и хорошо задокументированы. Средства компиляторов для больших матриц не подходят.
Re: Матриц диагонализация
Каким именно алгоритмом и и какой библиотекой вы пользуетесь?
Вам нужен весь спектр собственных значений?
Для диагонализации больших разреженных матриц существуют такие методы как Davidson и Lanczos, но
они вычисляют только нижние собственные значения и векторы. Если матрица 9000x9000, то можно еще
попробовать стандартные методы.
Я например пользовался этим
viewtopic.php?f=71&t=122416&start=20
Ждем комментария главного эксперта по этой теме - madschumacher'a
P.P.S. и, конечно же, Yurii'a
Вам нужен весь спектр собственных значений?
Для диагонализации больших разреженных матриц существуют такие методы как Davidson и Lanczos, но
они вычисляют только нижние собственные значения и векторы. Если матрица 9000x9000, то можно еще
попробовать стандартные методы.
Я например пользовался этим
- DOI:
http://dx.doi.org/10.1016/0010-4655(94)90073-6
viewtopic.php?f=71&t=122416&start=20
Ждем комментария главного эксперта по этой теме - madschumacher'a
P.P.S. и, конечно же, Yurii'a
- madschumacher
- Сообщения: 883
- Зарегистрирован: Ср авг 05, 2015 4:30 pm
Re: Матриц диагонализация
Э, а чо эт я эксперт?!
Я никогда сам диагонализацию матриц не писал, в своих кодах использую только LAPACK (который совершенно не предназначен для разреженных матриц), а Давидсоном пользовался в чужих программах (и не только в квантово-химических пакетах ).
Тот (чужой) код с Давидсоном для сильно разреженных матриц, который у меня завалялся, я ТС уже отправил, так что не знаю что могу полезного сказать по этой теме...
И да узрел Охламон, что сие есть круть несусветная!
Re: Матриц диагонализация
Позвольте уточнить чуток, чтоб дать совет поточнее.
Правильно ли я понимаю, что у вас эрмитова разреженная матрица, вышедшая из дискретизации чего-то похожего на Хартри-Фока? В чем у вас матрица дана, есть ли предобуславливатель, каков он, на каком компьютере Вы это считаете?
Давидсон с предобуславливателем - самое оно, но тут как раз предобуславливатель - самое ключевое в этом гиблом деле звено. Причем правильнее тащить все подпространство во время решения, но K-ая итерация начинает поедать K*N слов памяти, где N - число неизвестных, поэтому используют ньютоновский предобуславливатель поверх обычного, чтоб уменьшить размер пространства.
По моему опыту на 80М в двойной точности скалярное произведение еще не сильно валится, особенно если делать реортогонализацию подпространства по два раза, но я для таких задач считаю скалярные произведения уже в 4-ой точности, а потом округляю до обычной двойной.
Коды старые на фортране есть, могу поделиться, что найду. Писал для своего диссера в 1999. Но код в общем-то сильно параллельный (на ту старую МВС100 или МВС1000 я уже запамятовал). Не факт, что все гладко полетит у Вас, да и потом мой проедобуславливатель на специальные конечные элементы был заточен, и там на 100М неизвестных давидсон за сотню итераций для 20-ой электронной пары сходился На кривом базисе такие результаты получить не реально, и давидсон часто перестартовать надо будет.
Короче, расскажите про задачу чуток побольше, уверен, что смогу помочь.
Ой... Написал, а потом задумался... У Вас матрица 9К*9К? Не... влоб, переводя в плотную и далее лапаком в один вызов, и без вариантов. То что написано выше, это для матриц 80М*80М.
> У меня компилятор фортрана (и гфортран и пиджиай) ругаются, а точнее просто вылетают в ошибку, если размер массива превышает 81М (т.е. больше чем 9кХ9к).
а это - банально в фортране нельзя столько в стек засовывать, лечится тем, что память аллоцируется в Сишнике с помощью malloc, и передается в фортран.
Правильно ли я понимаю, что у вас эрмитова разреженная матрица, вышедшая из дискретизации чего-то похожего на Хартри-Фока? В чем у вас матрица дана, есть ли предобуславливатель, каков он, на каком компьютере Вы это считаете?
Давидсон с предобуславливателем - самое оно, но тут как раз предобуславливатель - самое ключевое в этом гиблом деле звено. Причем правильнее тащить все подпространство во время решения, но K-ая итерация начинает поедать K*N слов памяти, где N - число неизвестных, поэтому используют ньютоновский предобуславливатель поверх обычного, чтоб уменьшить размер пространства.
По моему опыту на 80М в двойной точности скалярное произведение еще не сильно валится, особенно если делать реортогонализацию подпространства по два раза, но я для таких задач считаю скалярные произведения уже в 4-ой точности, а потом округляю до обычной двойной.
Коды старые на фортране есть, могу поделиться, что найду. Писал для своего диссера в 1999. Но код в общем-то сильно параллельный (на ту старую МВС100 или МВС1000 я уже запамятовал). Не факт, что все гладко полетит у Вас, да и потом мой проедобуславливатель на специальные конечные элементы был заточен, и там на 100М неизвестных давидсон за сотню итераций для 20-ой электронной пары сходился На кривом базисе такие результаты получить не реально, и давидсон часто перестартовать надо будет.
Короче, расскажите про задачу чуток побольше, уверен, что смогу помочь.
Ой... Написал, а потом задумался... У Вас матрица 9К*9К? Не... влоб, переводя в плотную и далее лапаком в один вызов, и без вариантов. То что написано выше, это для матриц 80М*80М.
> У меня компилятор фортрана (и гфортран и пиджиай) ругаются, а точнее просто вылетают в ошибку, если размер массива превышает 81М (т.е. больше чем 9кХ9к).
а это - банально в фортране нельзя столько в стек засовывать, лечится тем, что память аллоцируется в Сишнике с помощью malloc, и передается в фортран.
Re: Матриц диагонализация
В Фортране тоже есть понятие указателей. Но используются они гораздо реже, потому что выделять память динамически в нем можно и без их помощи, а аргументы и так передаются по ссылке.
LAPACK на современных процессорах на одном ядре может уступать по скорости Intel MKL раз в сто, не говоря уже о проблемах распараллеливания. Я использую LAPACK только как "болванку" для разрабатываемых быстрых алгоритмов четверной точности.
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.
Re: Матриц диагонализация
так никто не призывает использовать лапаковские исходники БЕЗ оптимальных BLASов, а вот вместо MKL можно использовать кучу всего ACML, GotoBLAS, ATLAS и еще с десяток того-же, посему в вычислительной математике лапаком обычно называют функциональность Донгарровского Лапака, но вот используют его всегда с чем-то хорошо оптимизированным - что конкретно - пусть ТС озвучит железку, на которой он считает, тогда и подберем. Может у него ГПУшка АМДшная, тогда ACML вынесет MKL как тузик грелку. У меня например, примерно раз так в 20 MKL проигрывает на сингулярном разложении, на dsysvd/zhesvd мерить лениво, но, думаю, будет тоже примерно также.
Re: Матриц диагонализация
Интересное заявление насчет "всегда": буду теперь знать, когда возьмусь за очередную статью, посвященную диагонализации. Правда, непонятно, зачем "скрещивать" LAPACK с чем-то еще: часть Intel MKL и есть оптимизированный LAPACK https://software.intel.com/en-us/forums ... pic/743278 (при этом часть функций они алгоритмически улучшили, ничего об этом не говоря: я в какой-то статье об этом писал - в ней и улучшенный алгоритм приведен). Что касается Джека Донгарры, то я его неплохо знаю: мы с ним переписывались. Теперь о тузике и грелке: Intel MKL оптимизирован под хорошие интеловские процессоры: все другие пакеты уступают ему по скорости. Что касается AMD: сто лет назад я выбросил сей процессор в топку и до сих пор не жалею.
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.
Re: Матриц диагонализация
Насчет AMD, я не могу позволить себе такую роскошь как выкинуть пол-кластера в топку. По-моему среднекриворукому опыту, MKL работает быстрее вышеперечисленных альтернатив даже на AMD.
Re: Матриц диагонализация
> MKL работает быстрее вышеперечисленных альтернатив даже на AMD.
на самих процессорах - да, а на графических картах - нет, МКЛ просто с ними не умеет работать. У меня на одном узле (64 ядра) еле-еле терафлоп на процессорах получается, а на графических картах того же узла больше 10 терфлопс. И ACML понятно это хорошо поддерживает.
Я не спорю, что МКЛ лучше и развесистее других альтернатив, только на процессорах уже почти десять лет как никто не считается, и их используют только для плохо параллелящихся и ветвящихся алгоритмов. top500.org смотрите, сколько там систем без графических карт, сразу все станет ясно.
Поэтому брать как основной процессор Интел или АМД - совершенно безразлично, от него только его наличие и правильная администрация GPU-шных тредов требуется. То есть я не заморачиваюсь и беру то, под руку попадается.
Я честно говоря удивлен, что квантовую механику до сих пор повально на графических картах не считают, все используемые алгоритмы очень хорошо ложатся на архитектуру графических карт и, комментарии Yurii меня просто удивили. Наверное Донгарра в переписке с ним не поделился этими сокровенными знаниями, иначе бы Yurii не делал бы таких опрометчивых заявлений.
на самих процессорах - да, а на графических картах - нет, МКЛ просто с ними не умеет работать. У меня на одном узле (64 ядра) еле-еле терафлоп на процессорах получается, а на графических картах того же узла больше 10 терфлопс. И ACML понятно это хорошо поддерживает.
Я не спорю, что МКЛ лучше и развесистее других альтернатив, только на процессорах уже почти десять лет как никто не считается, и их используют только для плохо параллелящихся и ветвящихся алгоритмов. top500.org смотрите, сколько там систем без графических карт, сразу все станет ясно.
Поэтому брать как основной процессор Интел или АМД - совершенно безразлично, от него только его наличие и правильная администрация GPU-шных тредов требуется. То есть я не заморачиваюсь и беру то, под руку попадается.
Я честно говоря удивлен, что квантовую механику до сих пор повально на графических картах не считают, все используемые алгоритмы очень хорошо ложатся на архитектуру графических карт и, комментарии Yurii меня просто удивили. Наверное Донгарра в переписке с ним не поделился этими сокровенными знаниями, иначе бы Yurii не делал бы таких опрометчивых заявлений.
Re: Матриц диагонализация
Мы с Донгаррой обсуждали алгоритмы, а не всякую мелочевку, о которой упоминает chemigor.
По поводу графических карт: https://software.intel.com/en-us/articl ... ne-advisor
см. Select usage model of Intel® Xeon Phi™ Coprocessor
По поводу графических карт: https://software.intel.com/en-us/articl ... ne-advisor
см. Select usage model of Intel® Xeon Phi™ Coprocessor
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.
Re: Матриц диагонализация
ой, да, верно, про Фи я-то и забыл, как же как же, 2 бакса за гигафлопс при том, что АМДшники я еще 4 года назад покупал по 7 центов за гигафлоп. И действительно, кому шашечки, а не считаться, конечно же его покупают. Даже Нвидия со своим титаном с 50 центами за гигафлопс нервно курит в сторонке.
ох и удивительные вещи Вы говорите, сколько знаю Донгарру, он только о производительности вычислительных систем и печется. Да и статьи у него только об этом и методах распараллеливания. Да и всегда он такой был, даже когда в 90х он нашей фирме тендер в Крей ресече на поставку линейных солверов проиграл, а сейчас-то и подавно.
Re: Матриц диагонализация
chemigor, теперь я окончательно уяснил, что Вы не только через одно место выделяете память в фортране: все остальное из той же серии.
прозвище "Фабержé" легендарный разведчик Дроздов получил за свое уникальное умение работать с информацией, добывать ее и превращать в драгоценность высшей пробы.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 16 гостей