Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Работа с Intel Fortran через Visual Studio 2003 и не только

Автор: azertyuu
Дата сообщения: 20.09.2005 17:51
Тут такой конкретный вопросик по разреженным матрицам, может кто-нибудь знает, буду очень благодарен:

Ищу такие процедурки (желательно готовые) которые делает вот такое:

1) перевести разреженную матрицу в компактный вид (типа например три массива, массив индексов столбцов ненулевых эл-тов + массив индексов строк ненулевых эл-тов + массив самих ненулевых эл-тов)

2) произвести умножение вектора на матрицу, записанную в компактном виде

3) перевести матрицу из компактоного вида в обычный разреженный

Интуиция подскахывает, что все это где-то должно быть готово, операции-то элементарные. и часто употребляемые наверное. вот самому возиться с ними не хочется.

ЗЫ. ну и все это на фортране естественно....
Автор: KChernov
Дата сообщения: 01.11.2005 13:53
Новые вопросы:
1. Возможно ли средствами фортрана организовать единообразное хранение разнородных объектов (как, например, в ООП языках можно создать массив объектов типа Object, или другого родительского, и хранить там объекты дочерних типов - для Обжекта - всех)?
В принципе можно создать супертип, в котором с помощью union описать как варианты все другие типы, которые так нужно хранить, и описать приведение всех этих типов к этому супертипу. Тогда можно создать массив элементов супертипа и хранить в нем все эти типы (по крайней мере теоретически - я только по документации смотрел).
Но такой вариант кажется несколько громоздким (или он единственный для фортрана?).
2. Как получить имя типа переменной?
Автор: FuzzyLogic
Дата сообщения: 01.11.2005 18:30
KChernov
1. Хммм, ерунда получится (если получится), громоздко и бестолково, а главное .. зачем? Надо подбирать инструментарий соответственно задачи, может просто Фортран это немного не то что вам надо?
2. Что-то ощущение что никак
Автор: ValterG
Дата сообщения: 01.11.2005 18:46
azertyuu
Есть библиотека CERN. Сейчас тексты ее уже свободно не дают,
но я отыскал вариантик от 2001 года. Там много чего, возможно
и это есть. К сожалению все это у меня в непричесанном виде -
качал несколько вариантов в один и тот же каталог и придется
разбираться. Пиши в ПМ. Описания содержимого можно во многих
местах найти и даже на русском.
Автор: FuzzyLogic
Дата сообщения: 01.11.2005 18:52
Почему свободно не дают? Распространяется под GPL, есть тут http://wwwasd.web.cern.ch/wwwasd/cernlib/
А ему надо что-то из лин. алгебры, типа BLAS, LAPACK, итд, только я теперь уже не помню в какой из них что есть.
Автор: KChernov
Дата сообщения: 08.11.2005 13:47
FuzzyLogic
1. Я хочу моделировать область, содержащую разнородные объекты.
Очень хотелось бы хранить все эти объекты в одном месте + чтобы появление новых типов объектов требовало минимального переписывания существующего кода.
Нашел возможности, позволяющие это делать: structure, union, map.
То есть создать структуру-контейнер, содержащую с помощью union все структуры для типов объектов, и создать массив типа структуры-контейнера.
Тогда можно все объекты хранить единообразно.
+ с помощью interface можно сделать работу со всем этим более прозрачной.
Правда не проверял, как это все сказывается на производительности

2. У меня тоже такое ощущение По крайней мере в структуре с union разные объекты различаются по именам, а не по типам.

Соответсвенно вопросы по структурам:
3. Что все таки лучше использовать: type или structure ? А то они неравнозначны: у первого нет union (или есть?), а у второго нет предустановленных значений переменных и конструкторов (или я опять же что-то проглядел?).
4. А вместе их использовать нельзя случайно?
5. Есть ли для type альтернатива union ?
6. Есть ли для structure альтернатива конструкторам?

Автор: ValterG
Дата сообщения: 09.11.2005 14:33
KChernov

Цитата:
Я хочу моделировать область, содержащую разнородные объекты

А чего массив ссылок не годится ? Зачем сложности. Во-вторых хранение
не единственное, что приводит к переписыванию программы -
есть еще обработка. 90-й ФОРТРАН и типы дает универсальный способ :
можно переопределить все операции для нового типа и транслятор
остальное сам сделает. Например библиотеки типов для сверхдлинных
чисел и чисел любой длины именно так и сделаны. Ссылочки можно
найти на сайте по ФОРТРАН-у fortran.com .
Автор: KChernov
Дата сообщения: 10.11.2005 14:29
ValterG

Цитата:
fortran.com

Спасибо, посмотрю.



Цитата:
90-й ФОРТРАН и типы дает универсальный способ

Это которые type или которые structure ?
Автор: ValterG
Дата сообщения: 15.11.2005 14:09
KChernov

Цитата:
Это которые type или которые structure ?

Type и Interface operator
Автор: azertyuu
Дата сообщения: 26.11.2005 17:10
заинтересовал вот меня вопрос программирования на фортране под линух.
вопросы распараллеливания, и вообще общие вопросы. есть тут спецы такого профиля?
Автор: FuzzyLogic
Дата сообщения: 26.11.2005 19:36
azeryuu
Найдём, были бы вопросы
Автор: ValterG
Дата сообщения: 27.11.2005 16:58
azertyuu
http://parallel.ru/
Кстати в основном народ параллелит именно под Линухом.
Автор: FuzzyLogic
Дата сообщения: 27.11.2005 23:28
ValterG
Пошарился ... если честно ... жуть, 90% инфы такое старьё ... но пара страничек почитал с удовольствием, пасиб
Автор: Simbr
Дата сообщения: 28.11.2005 08:25
azertyuu
Для работы с разреженными матрицами Cаад (Youcef Saad) выложил свой пакет sparsekit(последняя ревизия 2004). В этом пакете есть набор пп по преобразованию способов хранения разреженных матриц.
Автор: KChernov
Дата сообщения: 02.12.2005 14:45
Попробовал работать с субжем на АМД64 - в челом работает, но не все:
Появились еще вопросы:
1. Можно ли (и как) под VS.net2003 откомпилировать под АМД64 (нужен именно 64-х битный код)?
В документации нашел две опции, которые похожи на то, что мне нужно: i32em и i64.
Но куда его прописывать в VS-е не нашел
Например там в закладке компиляции есть пункт - получившаяся командная строка, и там можно добавлять еще свои опции, но попытка прописывания туда этих ключей привела только к руганию на них компилятора
Или хотя бы приведите пример командной строки для компиляции с получением АМД64.

2. В VS.net2003 не видится отладчик интеловского фортрана - судя по всему подключается сишный, что приводит к невозможности отладки
Может это быть связано с тем, что отладчик IVF - 32-х битный?
Пробовал использовать отладчик, который ставится самим фортраном (не в студию), но так сразу он у меня не заработал (правда я и не разбирался)...
Проблема мб в том, что туда сначала ставили VS 2005 64-bit, потом VS 2003, а уже потом IVF 9?

Теперь безотносительно АМД64:
3. Еще один минус Интел фортрана по сравнению с Компак фортраном: в последнем работала контекстная помощь.
Вот бы chm прикрутить к студии - это возможно?

4. Нашел в файле for_main.chm описание функции, которая мне нужна, но при компиляции не видится библиотека, в которой эта функция описана Где ее прописать в студии? В CVF-е когда такая проблема возникла - успешно ее решил, а здесь ничего подобного найти не могу

5. Посоветуйте библиотеку для расчетов с произвольной точностью для фортрана (Совсем хорошо, если она оптимизирована под АМД64)
Автор: dima333a
Дата сообщения: 02.12.2005 18:55
KChernov

Цитата:
Можно ли (и как) под VS.net2003 откомпилировать под АМД64 (нужен именно 64-х битный код)?


#1 Вообщето я не уверен, можно ли запустить/скомпилировать 64-бит код на 32-bit версии WindowsXP ???
Компилировать из командной строки (вне VS) пробовали?

#4 Вообще если физически у вас есть файл с библиотекой то его можно запихнуть в папочку /include ( путь к папке include должен быть прописан в системных свойствах, можно просто поискать папочку include )

Автор: MZN
Дата сообщения: 03.12.2005 22:02
KChernov

Цитата:
5. Посоветуйте библиотеку для расчетов с произвольной точностью для фортрана (Совсем хорошо, если она оптимизирована под АМД64)


Очень хорошая штука: MPFUN, автор David H. Bailey

Вроде была здесь:
http://crd.lbl.gov/~dhbailey/mpdist/index.html





Добавлено:
KChernov

Цитата:
1. Можно ли (и как) под VS.net2003 откомпилировать под АМД64 (нужен именно 64-х битный код)?


По словам nt[gjllth;rb Intel нельзя. Даже под Windows 64 bit.

А, кстати, как у Вас работает интеграция в VS? У меня ее нет вовсе.
Автор: KChernov
Дата сообщения: 05.12.2005 13:49
dima333a

Цитата:
#1 Вообщето я не уверен, можно ли запустить/скомпилировать 64-бит код на 32-bit версии WindowsXP ???

Сори, ничего не написал про версию винды - она конечно же 64-х разрядная


Цитата:
#4 Вообще если физически у вас есть файл с библиотекой то его можно запихнуть в папочку /include

Вообще в VS пути задаются через какие-то внутренние переменные, которые начинаются с "$" - где бы их посмотреть/задать? Или там используются переменные окружения оси?

MZN

Цитата:
Очень хорошая штука: MPFUN, автор David H. Bailey

Спасибо, посмотрю


Цитата:
Даже под Windows 64 bit.

Уже наткнулся на соотв пункт в документации
Как-то это странно - чем так версия 64-х битного компилятора может отличаться от 32-х битного?!


Цитата:
А, кстати, как у Вас работает интеграция в VS? У меня ее нет вовсе.

Нормально работает (только вот под 64-х биной осью с дебагером проблемы).

Какой у Вас VS и какой фортран?

VS (пока только 2003-й) должен быть поставлен первым.
Потом поверх него нужно ставить фортран и или выбрать кастом установку и поставить галочку для пакета интеграции для версии 8 или поставить интегратор для версии 9.
Автор: MZN
Дата сообщения: 05.12.2005 15:49
KChernov

Цитата:
VS (пока только 2003-й) должен быть поставлен первым


Уменя получилось, что он был вторым деинсталяция и переустановка интела не помогла... Он похоже, свою интеграцию вообще не деинсталирует.
Автор: dima333a
Дата сообщения: 05.12.2005 16:02
KChernov


Цитата:
Вообще в VS пути задаются через какие-то внутренние переменные, которые начинаются с "$" - где бы их посмотреть/задать? Или там используются переменные окружения оси?


Кхм хороший вопрос. Я на самом деле пользуюсь старым добрым VS 6. По идее когда устанавливаешь Intel FORTRAN то в меню Start( Пуск) там где ярлычки для Intel(R) Software Development Tools -> Fortran ...лалала должен быть ярлык для использования компилятора из командной строки. Если заглянуть в свойства ярлыка, то можно найти батник который устанавливает все эти переменные. Опять таки, у меня Intel Fortran ver. 7.0... так что могут быть варианты. Что у меня:
Вот куда ведет ярлык для запуска компилятора из коммандной строки:


Код: C:\WINDOWS\system32\cmd.exe /K "C:\Program Files\Intel\Compiler70\IA32\Bin\ifcvars.bat"
Автор: KChernov
Дата сообщения: 05.12.2005 16:31
dima333a

Цитата:
Я на самом деле пользуюсь старым добрым VS 6


Цитата:
у меня Intel Fortran ver. 7.0

То есть компилятор Интеловский, а среда Компаковская?
А real 16 там есть?

Спасибо за информацию - попробую
Автор: dima333a
Дата сообщения: 06.12.2005 02:40
KChernov

Помоему CVF не имеет возможности использовать REAL*16. Во всяком случае у меня не получилось скомпилировать программу когда я добавил переменнуюю REAL*16 ...

Насчет компиляторов, то я пользуюсь как Compaq Fortran, так и Intel Fortran. Intel Fortran компилирую из командной строки, а Compaq Fortran уж когда как удобней. А VS для меня это скорей как продвинутый текстовый редактор
Автор: KChernov
Дата сообщения: 06.12.2005 10:25
dima333a

Цитата:
Помоему CVF не имеет возможности использовать REAL*16

А так называемый double precision?

Добавлено:
MZN

Цитата:
http://crd.lbl.gov/~dhbailey/mpdist/index.html

Посмотрел эту библиотеку и остальные по этой ссылке и у меня появились вопросы:

1. Не встретил никакого упоминания о АМД64 в их описании - только про Итаниумы и ПоуэрПС. Будут ли они использовать преимущества АМД64?

2. Код я тоже смотрел и наткнулся там на такой прием:
    real a,b,c,d
...
    c = a * b
    d = a * b - c

Вроде как они таким образом пытаются получить перенос, который получается при переполнении при умножении.
Но я попробовал такой прием и сравнил с умножением при более высокой точности - совпадений нет
Я что-то не так настроил, или это еще зачем надо?

3. Можно ли как-то получить этот самый перенос при переполнении в фортране (и при сложении, и при умножении)? Ведь ассемблерная команда, которой осуществляется умножение (например), имеет результатом два слова - то, что обрезается и само переполнение. Или это нельзя получить в фортране, а только через ассемблерные вставки в С?
Автор: dima333a
Дата сообщения: 06.12.2005 16:20
KChernov
Цитата:
А так называемый double precision?


double precision дает REAL*8 -это помоему любой доступный компилятор FORTRAN-a имеет .
Автор: KChernov
Дата сообщения: 06.12.2005 16:52
dima333a

Цитата:
double precision дает REAL*8

Действительно, в CVF-е нет отдельной настройки.
Просто в IVF-е можно задавать double precision в 16 (правда там можно и real в 16 задать)...
Автор: KChernov
Дата сообщения: 08.12.2005 13:52
А по другим вопросам совсем никто ничего не знает?
Автор: XPEHOMETP
Дата сообщения: 09.12.2005 13:56
На счет использования преимуществ АМД64 - для этого лучше всего загрузить на сайте АМД библиотеки, заточенные специально под их процессоры. Требуется бесплатная регистрация.
Автор: MZN
Дата сообщения: 10.12.2005 14:26
KChernov

Цитата:
1. Не встретил никакого упоминания о АМД64 в их описании - только про Итаниумы и ПоуэрПС. Будут ли они использовать преимущества АМД64?


Есть же исходники. Теперь все зависит от компилятора.

Цитата:
2. Код я тоже смотрел и наткнулся там на такой прием:
real a,b,c,d

Я с этой библиотекой проводил очень много расчетов и все было в порядке. На своем опяте убедился, что самому ничего выдумывать не надо.


Цитата:
3. Можно ли как-то получить этот самый перенос при переполнении в фортране

В фортране, скорее всего, нет.
Автор: KChernov
Дата сообщения: 12.12.2005 09:42
MZN

Цитата:
Есть же исходники. Теперь все зависит от компилятора.

Тогда так и надо говорить, что это все полуфабрикаты.
Кстати, что надо почитать, чтобы по исходнику это понять?


Цитата:
Я с этой библиотекой проводил очень много расчетов и все было в порядке. На своем опяте убедился, что самому ничего выдумывать не надо.

У всех разные требования.
Просто если я вижу код, который мне кажется ошибочным, я или разбираюсь в причинах, или не использую это (мб это код какого-то примера и в реальной жизни не используется).


Цитата:
В фортране, скорее всего, нет.

Жаль


Добавлено:
Попробую переформулировать вопрос:
Можно ли получить выигрыш в производительности в задачах, где требуется большая точность (стандартных типов не хватает), если вместо Р4 (32-х битный) использовать АМД64?
И что для этого нужно?
Автор: MZN
Дата сообщения: 12.12.2005 15:26
KChernov

Фортран процессоронезависимый язык. Любая попытка привязать его к конкретному процессору (что, вообще говоря, для языка высокого уровня, каким он является, ОЧЕНЬ сложно), ведет к потере портабельности. Например, не факт, что если мы "привяжем" код к одноядерному Opteron, он будет работать на двухядерном.

Называть исходники полуфабрикатом, вообще говоря, можно. Но что тогда есть законченный продукт? Библиотека. Так она же заточена под один компилятор (как правило). Единственный мне известный компилятор Фортрана, оптимизирующий под AMD64, это Pathscale. Есть еще и Absoft. Это все под Linux. Надеяться, что интеловский компилятор будет делать это хорошо, я бы не стал.

Резюме.
1. Наличие исходников обеспечивает полную свободу действий. Оптимизация под AMD64 ложится на плечи компилятора.
2. MPFUN, вообще говоря, стандарт де факто. Конечно, там могут быть ошибки. В сомнительных случаях я всегда связывался с автором и он всегда отводил все подозрения. Кстати, примененные там алгоритмы много сложнее данного примера.
Библиотека на использует прямых аналогов REAL816 32 64 и т.п. Точность там произвольна.


Цитата:
Можно ли получить выигрыш в производительности в задачах, где требуется большая точность (стандартных типов не хватает), если вместо Р4 (32-х битный) использовать АМД64?
И что для этого нужно?

Наверное можно. Как? Не знаю. Но MPFUN справится на P4 (если расчеты не гигантские)

Страницы: 123456789101112131415161718192021

Предыдущая тема: Относительное перемещение мыши


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.