Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 
то, чем мы решили поделиться
ссылка на страничку программ etc собственного изготовления, которыми любезно делятся наши форумчане


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
то тут однозначно исходные данные того, не вполне корректны.
...которые возникают как следствие внесённых изменений
полный консенсус триумвирата :)
аминь

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 14:41 09-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
понадобились мне большие массивы, вот только не на всех машинах есть столько памяти. Kак бы мне это с фортрана разумнее проверить сколько физической и виртуальной памяти есть а потом просто вывести сообщение что эта конфигурация не подойдеть и "насиловать эту числодробилку" нет возможности.
Под линуксами разумеется и учитывая что не на всех есть у меня доступ к /proc, (секьюрити мать их!), т.е. cat /proc/meminfo не подходит.
 
Думаю над системным вызовом  и парсингом free -m или vmstat ....
А под виндовсом как это делается?
 
Видел в интернетах вот такой простецкий способ, только очень сомневаюсь, что сисадминaм он понравится...
 

Код:
do while (.not.allocated(mx))
if (.not.allocated(mx)) allocate (mx(1:ng,1:ng,1:ng), stat = err_alloc)
if (err_alloc.ne.0) ng = ng - 50
end do
write (0, *) 'allocated ', ng**3 / 1048576, ' MiB.'

 
 
 

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 15:46 09-12-2011
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Для Windows можно взять какую-нибудь книжку типа "В. В. Штыков, FORTRAN & WIN32 API. Создание программного интерфейса для Windows средствами современного Фортрана" и воспльзоваться соответствующими функциями WinAPI, которые прекрасно описаны в книге Рихтера (Глава 14. Исследование виртуальной памяти), потому как интерфейс FORTRAN'а насчет системных вызовов крайне беден. По этой же причине для Linux, думаю, проще на C/C++ написать небольшую библиотеку (из одной экспортируемой функции) из вызвать её из своей FORTRAN-программы. Вот пример, найденный по адресу (самый последний пост)http://www.qtforum.org/article/32202/system-and-memory-info.html и слегка подправленный:
Код:
 
#include <QtCore/QCoreApplication>
#include <QDebug>
#include "sys/sysinfo.h"
 
int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);
    struct sysinfo sys_info;
 
    if(sysinfo(&sys_info) != 0){
        qDebug() << "Error";
        return a.exec();
    }
    int totalmem=(qint32)(sys_info.totalram/1048576);
    int freemem=(qint32)(sys_info.freeram/1048576); // divide by 1024*1024 = 1048576
 
    qDebug() << "total mem:" << totalmem << " free mem:" << freemem;
 
    return a.exec();
}

Вывод этой программы на моей машине:
Код:
Запускается /mnt/USER/Qt/QtConsoleTest-build-desktop/QtConsoleTest...
total mem: 7974  free mem: 3585


----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 17:43 09-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r

Цитата:
А под виндовсом как это делается?
да очень просто -- используют ВинАПИ
например GlobalMemoryStatusEx()
 
TeXpert

Цитата:
потому как интерфейс FORTRAN'а насчет системных вызовов крайне беден.
почему же? вполне достаточен...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:55 09-12-2011 | Исправлено: akaGM, 17:58 09-12-2011
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
А смысл проверять?  Почему просто не делать allocate с проверкой? Не смогли выделить сколько нужно, ну тогда значит не судьба.  Просто природа многозадачности и виртуальной памяти таковы что проверки обычно довольно бесполезны и делаются на уровне "напишем на коробке что программе нужно минимум 4GB памяти".

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 21:58 09-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
например:
Код:
use kernel32
implicit none
  integer :: result
  type (T_MEMORYSTATUSEX) :: memstatus
 
  memstatus%dwlength = sizeof(memstatus)
  result = GlobalMemoryStatusEx(memstatus)
 
  write(*,*) 'total physical     = ', memstatus%ullTotalPhys
  write(*,*) 'available physical = ', memstatus%ullAvailPhys
  write(*,*) 'total virtual      = ', memstatus%ullTotalVirtual
  write(*,*) 'available virtual  = ', memstatus%ullAvailVirtual
  write(*,*) 'memory used (%)    = ', memstatus%dwMemoryLoad
end

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

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 23:23 09-12-2011 | Исправлено: akaGM, 23:40 09-12-2011
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
зная характеристики памяти можно планировать стратегию её использования, можно много чего, то что сейчас никто из нас и представить не может...

Как бы да и как бы нет. Это особенно заметно на Win, хотя и в никсах всё тоже не очень однозначно. Все  
эти стратегии, планирование итд работают более-менее сносно в случае когда OS свежезагружена и никто ничего больше не запускал. Попробуйте сами просто для интереса, запустите в цикле ваш код+ что-нить кушающее память. Закройте что-то кушающее память, и теперь проследите как скоро свободная память вернётся на место (скорее всего никогда). Как-то несолидно если скажем юзер только что закрыл photoshop (да или хоть вашу же программу, которая только что чего-то там считала), запустил вашу программу а она ему - "мало у вас памяти батенька". Подождал юзер пару минут, запустил снова и вот оно - счастье, всё работает. Хотя оно работало бы и изначально, начни вы активно выделять память винда по-быстрому выгрузила бы все adobовые библиотеки и расчистила вам местечко, но проверка показала что всё плохо.
Всё становится ещё интереснее когда то что кушает много памяти ещё и пишет много на диск, потому как неожиданно ещё и кэш начинает отбирать куски из памяти и в зависимости от настроек винды, а также её версии делает это в разной степени агрессивно.
Т.е. все эти числа вроде available virtual/physical это всё так - для "общего развития".  На деле же никто никогда не проверяет наличие памяти до её выделения ибо "пути OSны в делах выделения памяти с точки зрения приложения неисповедимы", да и меняются они от оси к оси.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 23:54 09-12-2011 | Исправлено: FuzzyLogic, 23:55 09-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FuzzyLogic
да, всё конечно же оказывается не так как представляется в идеале...
и тем не менее, если они есть, значит это кому-нибудь нужно...
 
кстати, только что был конечным пользователем их наличия для "общего развития" -- запускал Everest на тестируемой машине :)

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 00:03 10-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я не знаток АПИ, поэтому не поленился и посмотрел весь список ММ-функций...
оказывается их там штук сто! так что при грамотном подходе наверняка можно в том или ином приближении решать возникающие проблемы...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 05:23 10-12-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
можно проверять, можно сравнивать, зная характеристики памяти можно планировать стратегию её использования, можно много чего, то что сейчас никто из нас и представить не может...

Оййй! Ну, всегда же были чуваки, пытавшиеся вопросы использования памяти разрулить. Обычно это кончается созданием некой платной программы с названием типа "мемори оптимайзер". Которая стоит на страже использования твоей оперативы, и отбивает попытки Виндовс заюзать больше чем, скажем, 75% доступной памяти. В результате успешного фунциклирования этой проги получается примерно следующее: ты, как дурак, закупал для своего компа оперативу, и вот теперь аж 25% ее впредь будут стояь без использования, поскольку этот поганый оптимайзер не дает ее задействовать.
 
Лично я никогда еще не видел в натуре хоть одной программы, хоть как-то полезным образом распределяющей память. В прочем, могу ошибаться. Есть смутное подозрение, что вообще никто на свете не представляет, а как ее, оперативу, надо рационально распределять. То есть - исходно никто не знает выигрышной стратегии выделения памяти. Из-за этого - все заморочки.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 11:12 10-12-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP

Цитата:
Лично я никогда еще не видел в натуре хоть одной программы, хоть как-то полезным образом распределяющей память.

Для NT4 была классная прога, которая чистила память от отработавших прог - реально ускоряла работу (без неё были сплошные тормоза, но мб я просто не умел настраивать).
Но уже 2к с этим справлялся сам.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 12:55 10-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP

Цитата:
Оййй! Ну, всегда же были чуваки...
а я никуда и не делся...
когда перед тобой один сегмет кода и один сегмент данных, или 640 пишем, а 384 на ум пошло, про ед.измерения умолчу, то можно и в ноги поклониться создателям heap-манагера ТурбоС и TP-оверлеев...
 

Цитата:
Обычно это кончается созданием некой платной программы
в моём случае, к счастью или может быть к сожалению, всё закончилось по-другому...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 15:24 10-12-2011 | Исправлено: akaGM, 16:20 10-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FuzzyLogic

Цитата:
А смысл проверять?  Почему просто не делать allocate с проверкой? Не смогли выделить сколько нужно, ну тогда значит не судьба.  

allocate все конечно с проверками. Но в моем случае дополнительныe массивы выделяются после 2-3 дней интенсивного счета, и жалко время терять.
 
2all
Всем спасибо за дискуссию.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 17:52 11-12-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r

Цитата:
Но в моем случае дополнительныe массивы выделяются после 2-3 дней интенсивного счета, и жалко время терять.  

Так если нужна гарантия, надо создать сразу.
Ну или создать, не получить ошибку, удалить, а потом уже создать когда надо (но тоже не факт, что создастся).
 
А на самом деле надо комбинировать оба метода, ибо может оказаться, что они создадутся в виртуалке, и это всё будет считаться долго и счастливо.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 19:27 11-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r

Цитата:
в моем случае дополнительныe массивы выделяются после 2-3 дней интенсивного счета
не забывай почаще на диск сбрасывать свои динамические массивы :)

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 19:44 11-12-2011 | Исправлено: akaGM, 19:45 11-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немного еще о ситуации.  
В принципе я уже подсчитал что надо памяти от 4 до 10 Гб на пике (пик как я говорил уже, приходится где то через два три дня) вычислений для одного экземпляра.  Запуск приложений идет через PBS, и так как машин много (около сотни) и разных конфигов тоже, то мне хочется просто получить в std.err сразу уведомление, что такая то машина не поддерживается.  
Запускаю сразу несколько десятков экземпляров программы.
 
KChernov

Цитата:
Так если нужна гарантия, надо создать сразу.  

В принципе да, согласен, но я уже экономлю память удаляя некоторые массивы перед финальной аллокацией, поэтому надо еще просчитать и изменить порядок выделения памяти.

Цитата:
 ибо может оказаться, что они создадутся в виртуалке, и это всё будет считаться долго и счастливо.
 

В принципе на многих машинах это и происходит. А если два моих экземпляра оказываются на одной машине то это гарантировано.
Поэтому я и подумал что все таки проверять наличе места в невиртуальной памяти надо как минимум.
 
akaGM

Цитата:
не забывай почаще на диск сбрасывать свои динамические массивы

В принципе я рассматриваю этот способ. Кажется есть несколько кандидатов которые даже не обязательно держать в памяти все время. Вот только больше нескольких Гб файлов на диске тоже как бы запрещено админами и это проблем, надо идти договариваться.  
TeXpert
Спасибо за пример

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 03:09 12-12-2011 | Исправлено: terminat0r, 03:16 12-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r

Цитата:
запрещено админами и это проблем, надо идти договариваться.

щас я тебе буду советовать...
гм
как лунуксоид линуксоиду :)
 
а ты на крон (о чего я знаю!) повесь какой-нибудь скрипт, кот. следит за определённым местом, появилось считалово, он тебя и уведомит или фтп-ит, можно и ручками взять,
почиститься...
 
а потом, админы -- они не люди что ли? и ты не порнушку тянешь...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 03:25 12-12-2011
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
а потом, админы -- они не люди что ли? и ты не порнушку тянешь...
 

Здесь как бы и нет, не хочу рассказывать о процедуре увеличения  размера системного стека на некоторых машинках (тот что в ulimit -s,  сделали аж 128 Мб!, лол), которую я какбэ прошел (кстати сменил место работы в сентябре). Тогда пришлось писать обьяснительную!  Больше не хочется и приходится извиваться как уж и решать "проблемы индейцев" самостоятельно с помощью томагавка и какой то матери.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 03:45 12-12-2011
NastyaShaly

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!Помогите, пожалуйста
Необходимо представить цикл в параллельной форме указанным
методом. Написать программу на языке ФОРТРАН для вычисления исходного и
преобразованного циклов с использованием функций матричного модуля. Исследовать  
зависимость коэффициента ускорения от числа ступеней конвейера и размерности
массивов.
 
Исходный цикл имеет следующий вид:
DO 30 I=1,M
DO 30 J=I,N
DO 30 K=J,L
A(I,J)=B(J,K)+C(I,J)
30 CONTINUE
Метод координат.
 
 
   DIMENSION B(100,100),C(100,100),A(100,100),AA(100,100)
      DIMENSION TMP (100)
      S=50
      N=10
      DO 10 I=1,N
      DO 10 J=I,N
      DO 10 K=J,N  
      A(I,J)=I
      B(J,K)=J*2-K
      C(I,J)=K-7+I*J  
10    CONTINUE
CSBEG
      DO 30 I=1,N
      DO 30 J=I,N
      DO 30 K=J,N
      A(I,J)=B(J,K)+C(I,J)
30    CONTINUE
CSEND
CPBEG
      DO 20 J=1,N
      CALL EADDVS(TMP,A(1,J),0.0,N)
      CALL EADDVV(TMP,B(J,1),C(I,J),N)
      CALL EADDVS(C(1,J),B(J,1),0.0,N)
      CALL EMULVV(B(J,1),TMP,TMP,N)
20    CONTINUE
CPEND
      IFLAG=0
      DO 40 I=1,N
      DO 40 J=1,N
      AA(I,J)=TMP(J)
      IF (A(I,J).NE.AA(I,J)) IFLAG=1
40    CONTINUE
50    FORMAT (' IFLAG= ',I1)
      WRITE(6,50) IFLAG
      STOP
      END
В чем ошибка?

Всего записей: 1 | Зарегистр. 12-12-2011 | Отправлено: 20:00 12-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NastyaShaly
а ты это сама писала?
 
тогда вопросы:
 
1) какой фортран?
 
2) что за внешние п/п ?
  EADDVS()
  EADDVV()
  ADDVS()
  EMULVV()

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 09:10 13-12-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru