PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 24 окт 18 1:21

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 7 окт 08 15:13 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Приветствую Всех!
Возникла проблема: при запуске программы появляется следующая ошибка.

У кого какие соображения на этот счёт?


Вложения:
.jpg
.jpg [ 34.21 КБ | Просмотров: 20000 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 7 окт 08 16:39 
Не в сети

Зарегистрирован: 13 сен 08 18:39
Сообщения: 74
Откуда: Москва
Ага, с фортраном есть такие проблемы, при операциях над массивами.

Чтобы дать рецепт решения нужен текст программы (по крайней мере, текст в окрестности строк 7 и 56 файлов PDE_TP.F90 и TAVR_PROCESSOR_TEST.F90)

И компилятор какой? Судя по скриншоту, Intel, но нужно уточнить.

Для начала, можно попробовать в лоб увеличить размер стека (stack reserve size), ключик линкера: /STACK:reserve (в байтах). По умолчанию - 1 Mb. Надо пробовать 4, 8, 16, 32, 64, 128, 256, 512 Mb... Т.е. параметры ключа будут /STACK:4194304, /STACK:8388608... и т.д., но если стек потребуется большой, то стоит подумать об изменении алгоритмов.

P.S. в свойствах проекта можно в закладке линкера найти поля, соответствующие ключу /STACK:reserve[,commit].

_________________
Дмитрий О. Коломиец.
IBM // МГУ, физфак, каф. математики.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 8 окт 08 9:30 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Работаю с Compaq Visual Fortran 6.5. Создаю проекты в среде разработчика в Developer Studio.
Наверное компилятор является встроенным в эту среду. Подскажите каким образом узнать его производителя и версию?

На счет стека не понял. В свойствах проекта на закладке Link не нашел не слова о размере стека, там ли я ищу?
Вложение:
.JPG
.JPG [ 42.45 КБ | Просмотров: 19941 ]


Привожу куски текста этих двух файлов:

! ПРОГРАММА TAVR_PROCESSOR_TEST - ПРОИЗВОДИТ ТЕСТИРОВАНИЕ РАСЧЁТА
! МЕТОДОМ КОНЕЧНО-РАЗНОСТНОЙ АППРОКСИМАЦИИ ДЛЯ ТАВРА.
PROGRAM TAVR_PROCESSOR_TEST
USE VARIABLES_TP ! МОДУЛЬ VARIABLES_TP - ОБЪЯВЛЯЕТ ПЕРЕМЕННЫЕ, ИСПОЛЬЗУЮЩИЕСЯ В FPS2H_TAVR_PROCESSOR.
USE INPUT_VAR_TP ! МОДУЛЬ INPUT_VAR_TP - СОДЕРЖИТ ПОДПРОГРАММЫ ДЛЯ СЧИТЫВАНИЯ ИСХОДНЫХ ДАННЫХ
! ИЗ DANO.TXT ДЛЯ FPS2H_TAVR_PROCESSOR.
USE OUTPUT_FILES_TP ! МОДУЛЬ OUTPUT_FILES_TP - ЗАПИСЫВАЕТ ДАННЫЕ, ПОЛУЧАЕМЫЕ В FPS2H_TAVR_PROCESSOR.
USE PDE_TP ! МОДУЛЬ PDE_TP - СОДЕРЖИТ ПОДПРОГРАММЫ ДЛЯ РЕШЕНИЯ Д.У.Ч.П ДЛЯ FPS2H_TAVR_PROCESSOR
IMPLICIT NONE
! ВЫЗОВ ПОДПРОГРАММЫ ДЛЯ СЧИТЫВАНИЯ ИСХОДНЫХ ДАННЫХ (СЧИТЫВАЮТСЯ 17 ИЗ INDANO И 8 ВЫЧИСЛЯЮТСЯ)
CALL READ_VAR_TP(H, H1, H2, B1, B2, E01, E02, NU1, NU2, F, EPS, NX, DX, NX1, NX2, NY1, NY2, &
AX1, BX1, AY1, BY1, AX2, BX2, AY2, BY2)
! СОЗДАНИЕ ФАЙЛА И ЗАПИСЬ СПИСКА ИСХОДНЫХ ДАННЫХ И ИХ ЗНАЧЕНИЙ
OPEN(1, FILE = 'INDANO_TP_TEST.TXT'); WRITE(1,INDANO_TP); CLOSE(1)

!********************************************************************
! ВЫДИЛЕНИЕ ПАМЯТИ ПОД ДИНАМИЧЕСКИЕ МАССИВЫ ДАННЫХ
ALLOCATE(VNX(KLAYER), VNY(KLAYER), VE(KLAYER), VAX(KLAYER), VBX(KLAYER), VAY(KLAYER), VBY(KLAYER))

!********************************************************************
! ОПРЕДЕЛЕНИЕ РАЗМЕРНОСТИ UU ОТ КОЛИЧЕСТВА СЛОЁВ И ЕГО ИНИЦИАЛИЗАЦИЯ (ТОЛЬКО ДО 2 СЛОЁВ) ???
SELECT CASE(KLAYER)
CASE(1)
! МАССИВ МОДУЛЕЙ УПРУГОСТИ СЛОЁВ
VE(1) = E01
! НЕ ХВАТАЕТ ПЕРЕМЕННЫХ ИЗ ВВОДА ДАННЫХ, МАССИВЫ КОЛИЧЕСТВА СЕЧЕНИЙ ПО ОСЯМ
VNX(1) = NX1; VNY(1) = NY1
! МАССИВЫ КООРДИНАТ УГЛОВЫХ ТОЧЕК СЕЧЕНИЯ (ОСЬ X - ВНИЗ, Y - ВПРАВО)
VAX(1) = AX1; VBX(1) = BX1; VAY(1) = AY1; VBY(1) = BY1
! БЕЗ УЧЕТА УГЛОВЫХ ТОЧЕК
DIM = VNX(1) * VNY(1) - 4
! ПОКА ОДИН СЛОЙ
CASE(2)
! МАССИВ МОДУЛЕЙ УПРУГОСТИ СЛОЁВ
VE(1) = E01; VE(2) = E02
! НЕ ХВАТАЕТ ПЕРЕМЕННЫХ ИЗ ВВОДА ДАННЫХ, МАССИВЫ КОЛИЧЕСТВА СЕЧЕНИЙ ПО ОСЯМ
VNX(1) = NX1; VNY(1) = NY1; VNX(2) = NX2; VNY(2) = NY2
! МАССИВЫ КООРДИНАТ УГЛОВЫХ ТОЧЕК СЕЧЕНИЯ (ОСЬ X - ВНИЗ, Y - ВПРАВО)
VAX(1) = AX1; VBX(1) = BX1; VAY(1) = AY1; VBY(1) = BY1
VAX(2) = AX2; VBX(2) = BX2; VAY(2) = AY2; VBY(2) = BY2
IF(B1 >= B2) DIM = VNX(1) * VNY(1) + (VNX(2) - 1) * VNY(2)
IF(B1 < B2) DIM = (VNX(1) - 1) * VNY(1) + VNX(2) * VNY(2)
END SELECT
ALLOCATE(U(DIM))
! ПОКА ИСПОЛЬЗУЕТСЯ В МЕНЮ ВВОДА ДАННЫХ КВАДРАТНАЯ СЕТКА
SGX = DX; SGY = DX
!********************************************************************
! TIP - ТИП РЕШАЕМОЙ ЗАДАЧИ (1 - ДИРИХЛЕ, 2 - НЕЙМАНА)
ALLOCATE(TIP(4, KLAYER))
TIP(1, KLAYER) = 1
TIP(2, KLAYER) = 1
TIP(3, KLAYER) = 1
TIP(4, KLAYER) = 1

!********************************************************************
CALL PDE(KLAYER, TIP, VNX, VNY, SGX, SGY, VE, VAX, VBX, VAY, VBY, DIM, U)
...


! МОДУЛЬ PDE_TP - СОДЕРЖИТ ПОДПРОГРАММУ ДЛЯ РЕШЕНИЯ Д.У.Ч.П ДЛЯ FPS2H_TAVR_PROCESSOR
MODULE PDE_TP
IMPLICIT NONE
CONTAINS

! PЕШАЕТ УРАВНЕНИЕ ПУАССОНА (d2U/dX2+d2U/dY2=F(X,Y)), МЕТОДОМ КОНЕЧНО-РАЗНОСТНОЙ АПРОКСИМАЦИИ
SUBROUTINE PDE(PKLAYER, PTIP, PVNX, PVNY, PSGX, PSGY, PVE, PVAX, PVBX, PVAY, PVBY, PDIM, PDEU)
INTEGER(4), INTENT(IN) :: PKLAYER, PVNX(PKLAYER), PVNY(PKLAYER), PDIM
!--------------------------------------------------------------------
! PTIP - ТИП РЕШАЕМОЙ ЗАДАЧИ (1 - ДИРИХЛЕ, 2 - НЕЙМАНА)
INTEGER(4), INTENT(IN) :: PTIP(4, PKLAYER)
!--------------------------------------------------------------------
! STEP GRID X, STEP GRID Y - ШАГ СЕТКИ ПО ОСЯМ Х И Y, МАССИВ МОДУЛЕЙ УПРУГОСТИ СЛОЁВ
REAL(KIND(1E0)), INTENT(IN) :: PSGX, PSGY, PVE(PKLAYER)
! МАССИВЫ КООРДИНАТ УГЛОВЫХ ТОЧЕК СЕЧЕНИЯ ДЛЯ КАЖДОГО ИЗ СЛОЁВ
REAL(KIND(1E0)), INTENT(IN) :: PVAX(PKLAYER), PVBX(PKLAYER), PVAY(PKLAYER), PVBY(PKLAYER)
REAL(KIND(1E0)), INTENT(OUT) :: PDEU(PDIM)

INTERFACE
REAL(KIND(1E0)) FUNCTION PRHS(X, Y)
REAL(KIND(1E0)), INTENT(IN) :: X, Y
END FUNCTION

REAL(KIND(1E0)) FUNCTION BRHS(ISIDE, X, Y)
INTEGER, INTENT(IN) :: ISIDE
REAL(KIND(1E0)), INTENT(IN) :: X, Y
END FUNCTION

REAL(KIND(1E0)) FUNCTION BRHS1(ISIDE, X, Y)
INTEGER, INTENT(IN) :: ISIDE
REAL(KIND(1E0)), INTENT(IN) :: X, Y
END FUNCTION
END INTERFACE

REAL(KIND(1E0)) :: X, Y
REAL(8) :: DET_A = 1.0
! КОЭФФИЦИЕНТЫ ФОРМИРОВАНИЯ МАССИВОВ PDE_A И PDE_B
REAL(KIND(1E0)) :: MDK_YX, MDK_XY, ADK, SDK1, SDK2, WDK, DKYX, DKXY, FK
! ИСПОЛЬЗУЯ ДИНАМИЧЕСКИЕ МАССИВЫ
! REAL(KIND(1E0)), ALLOCATABLE :: PDE_A(:, :), PDE_B(:), L_U(:, :)
! ИСПОЛЬЗУЯ СТАТИЧЕСКИЕ МАССИВЫ
REAL(KIND(1E0)) :: PDE_A(PDIM, PDIM), PDE_B(PDIM), L_U(PDIM, PDIM)
! МАССИВЫ УПРАВЛЕНИЯ ТИПОМ СЕЧЕНИЯ И РАЗМЕРНОСТИ СЛОЁВ !И НУМЕРАЦИИ СТОРОН
INTEGER(4) :: TYPSEC(PKLAYER), DIML(0 : PKLAYER)
! INTEGER(4), PARAMETER :: IPATH = 2 !, NLCA = 2, NUCA = 2
INTEGER(4) :: I, J, K, START, ASPOTL, MIDDLE, ASPOTR, FINISH, STEP

! ВЫЧИСЛЯЕМ ГЛАВНЫЕ ДИАГОНАЛЬНЫЕ КОЭФФИЦИЕНТЫ
MDK_YX = PSGY / PSGX ! ВЕРХНЯЯ ИЛИ НИЖНЯЯ СТОРОНА
MDK_XY = PSGX / PSGY ! БОКОВАЯ СТОРОНА

ADK = PSGY / PSGX + PSGX / PSGY ! УГЛОВЫЕ ТОЧКИ
SDK1 = PSGY / PSGX + 2 * PSGX / PSGY ! ВЕРХНЯЯ ИЛИ НИЖНЯЯ СТОРОНА
SDK2 = 2 * PSGY / PSGX + PSGX / PSGY ! БОКОВАЯ СТОРОНА
WDK = 2 * (PSGY / PSGX + PSGX / PSGY) ! ВНУТРЕННИЕ ТОЧКИ
! ВЫЧИСЛЯЕМ ОСТАЛЬНЫЕ КОЭФИЦИЕНТЫ
.....

PS. тут правда вместо второго измерения динамических массивов смайлики появились.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 8 окт 08 18:21 
Не в сети

Зарегистрирован: 13 сен 08 18:39
Сообщения: 74
Откуда: Москва
На скриншоте: в поле "project options" после kernel32.lib добавьте /STACK:33554432 и перекомпилируйте программу.
Помогло?

_________________
Дмитрий О. Коломиец.
IBM // МГУ, физфак, каф. математики.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 окт 08 12:04 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Конечно помогло! Спасибо! Только при вводе (128MB - /stack:134217728) происходит автозамена на /stack:0x8000000.
Вложение:
.JPG
.JPG [ 39.45 КБ | Просмотров: 19852 ]

Удалось перейти с сетки 11х11 на сетку 51х51. Конечно по хорошему надо менять алгоритм. Т. к. набегает бешенная размерность матрицы коэффициентов: пример сетка 51х51= 2601 точка. Без учета угловых 2601-4=2597. Таким образом получается 2597 слагаемых в 2597 уравнениях. Т.о. 2597х2597=6744409 значений типа real(4).
Без учёта нулевых элементов получаем 5 диагоналейх2597=12985 значений типа real(4).

А всё-таки как узнать узнать производителя и версию компилятора если проекты создаю в Developer Studio?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 окт 08 0:37 
Не в сети

Зарегистрирован: 13 сен 08 18:39
Сообщения: 74
Откуда: Москва
Дмитрий К. писал(а):
А всё-таки как узнать узнать производителя и версию компилятора если проекты создаю в Developer Studio?

Производитель - Compaq (был куплен HP в 2002 году), компилятор - Compaq Visual Fortran 6.5 (CVF), поставлялся в комплекте с IDE от Microsoft Visual Studio 6.0. Последняя версия (6.6B) была выпущена в августе 2002 года. После покупки Compaq'а HP решила объединить усилия по разработке с Intel (имевшей в то время у себя в портфолио весьма удачный Intel Fortran Compiler 7.x). В результате чего появился Intel Visual Fortran 8.0 for Windows и Intel Fortran Compiler 8.0 for Linux, а CVF перестал существовать.

P.S. Теперь, я думаю, становится ясно, почему сначала я видвинул предположение, что у вас именно Intel Fortran :wink:

_________________
Дмитрий О. Коломиец.
IBM // МГУ, физфак, каф. математики.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 окт 08 14:50 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Спасибо за ссылку и исторический обзор. Полагаю версия Intel Visual Fortran Compiler 10.1.025 является на сегодняшний день самой продвинутой. Возникает вопрос, а как же Lahey Fortran ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 окт 08 17:50 
Не в сети

Зарегистрирован: 13 сен 08 18:39
Сообщения: 74
Откуда: Москва
Дмитрий К. писал(а):
Полагаю версия Intel Visual Fortran Compiler 10.1.025 является на сегодняшний день самой продвинутой. Возникает вопрос, а как же Lahey Fortran

Ну... о "продвинутости" можно долго спорить ) и я бы не стал этого делать )
Но для интеловской платформы, я рекомендовал бы его (и именно для интеловской, а не для всей x86, т.к. для AMD уже возможны варианты).
Про Lahey ничего сказать не могу, т.к. не работал с их продуктами.

_________________
Дмитрий О. Коломиец.
IBM // МГУ, физфак, каф. математики.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 окт 08 8:25 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Цитата:
Но для интеловской платформы, я рекомендовал бы его (и именно для интеловской, а не для всей x86, т.к. для AMD уже возможны варианты).

Какие компиляторы Вы порекомендуете для процесоров AMD и Celeron?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 окт 08 18:58 
Не в сети

Зарегистрирован: 11 дек 02 19:37
Сообщения: 872
Откуда: НИВЦ МГУ
Celeron разве не Intel?
Для AMD всегда рекомендовался PathScale. Но тот же Intel даёт на нём неплохие результаты...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 апр 09 15:55 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Возможна ли работа с большими массивами в Developer Studio (Compaq Visual Fortyran 6.5),
например (массив A(100000, 100000)) или нет?
Какой компилятор позволяет работать с такими массивами?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 апр 09 14:59 
Не в сети

Зарегистрирован: 13 сен 08 18:39
Сообщения: 74
Откуда: Москва
Дмитрий К. писал(а):
Возможна ли работа с большими массивами в Developer Studio (Compaq Visual Fortyran 6.5),
например (массив A(100000, 100000)) или нет?
Какой компилятор позволяет работать с такими массивами?

а что, у вас есть машина с 40GB RAM? на CVF 6.5 не получится, он 32-битный, максимум 2GB в динамическом массиве. На 64-битном компиляторе (и, соответственно, операционке) можно с использованием динамических массивов... Но это в теории, а на практике "работать" не реально, во-первых, машин больше чем с 64GB RAM на практике не бывает (за исключением специальных аппаратов), а, во-вторых, скорее всего, прямолинейный алгоритм "работы" с такими массивами (без учета структуры данных) окажется настолько неэффективным, что получить ожидаемый результат за приемлемое время окажется невозможно.

Что за задача-то?

_________________
Дмитрий О. Коломиец.
IBM // МГУ, физфак, каф. математики.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 апр 09 8:39 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
kolomiec писал(а):
Что за задача-то?

Конечно-разностная аппроксимация уравнения Пуассона для области состоящей из n прямоугольных областей разной ширины и высоты (сечения строительных конструкций:
тавр ? 2 прямоугольника, двутавр ? 3 прямоугольника и т.д.). Пяти диагональная матрица системы: Ax=b. Есть решатель подпрограмма Fps2h, но:
- она для прямоугольной области, причём одной;
- краевые условия должны быть либо типа Дирихле либо типа Неймана для всех четырёх сторон;
В решаемой мною задаче есть условия сопряжения слоёв(областей) это равенство напряжений в точках сетки.
Если слои разной ширины то на одной стороне должны задаваться условия Неймана и сопряжения слоёв.

До этого пробовал решать для каждого слоя задачу отдельно, но затем стыковка решений по условиям сопряжения слишком трудоёмка!
Количество вызовов Fps2h для стыковки равна количеству точек сетки на меньшей по ширине из сопрягающихся сторон.

Таким образом получаемая размерность матрицы А в общем виде с учётом нулевых элементов NX*NX*NY*NY чисел, где NX ? количество узлов сетки по оси X.
При ленточном задании матрицы размерность (2NX + 1)*NX*NY*NY чисел- тоже не приемлемый результат.
А вот способ хранения несимметричных матриц произвольной структуры Compressed Sparse Row наверно может быть актуальным, пока еще не знаю работаю над этим.

Может быть что-то посоветуете по данной задаче?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 апр 09 14:45 
Не в сети

Зарегистрирован: 5 сен 08 3:12
Сообщения: 31
Откуда: НИИ механики МГУ
Дмитрий К. писал(а):
Пяти диагональная матрица системы: Ax=b.


Если у Вас есть пятидиагональная матрица с, вообще говоря, произвольной структурой заполненности, то без специализированных форматов хранения данных Вам не обойтись. Причем их существует много разных, выбирать конкретный имеет смысл когда Вы определитесь с методами решения СЛАУ.

Дмитрий К. писал(а):
В решаемой мною задаче есть условия сопряжения слоёв(областей) это равенство напряжений в точках сетки.
Если слои разной ширины то на одной стороне должны задаваться условия Неймана и сопряжения слоёв.
До этого пробовал решать для каждого слоя задачу отдельно, но затем стыковка решений по условиям сопряжения слишком трудоёмка!


А не проще ли рассмотреть трехмерную постановку задачи, а не сопрягать слои двумерных задач (если конечно это эквивалентно по физике задачи, в задачах прочности я не большой специалист)?

Для решения СЛАУ с матрицами общего вида имеет смысл смотреть в сторону градиентных методов (BiCGSTAB, GMRES и т.д.)
или многосеточных методов (GMG, AMG) + отдельный вопрос - выбор предобуславливателя.
Если говорить о выборе метода решения, то можно посмотреть библиотеки Aztec или Hypre.
По крайней мере - с их помощью понять какие именно методы наиболее эффективно работают на Вашей задаче.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 май 09 8:27 
Не в сети

Зарегистрирован: 7 окт 08 14:05
Сообщения: 20
Откуда: г. Ханты-Мансийск
Beaver писал(а):
Если у Вас есть пятидиагональная матрица с, вообще говоря, произвольной структурой заполненности, то без специализированных форматов хранения данных Вам не обойтись. Причем их существует много разных, выбирать конкретный имеет смысл когда Вы определитесь с методами решения СЛАУ.

Куда смотреть посоветуете по поводу специализированных форматов хранения данных и решателя?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB