2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Работа с огромными массивами в Fortran
Сообщение08.04.2011, 20:07 


14/07/10
109
Здравствуйте!

По работе появился алгоритм на Fortran, который нужно запускать, причем алгоритм нужно доработать таким образом, чтобы основная рабочая матрица (двумерный массив) был «гигантским», например:
Код:
REAL*8 U(32000,7000)

Текущий компилятор — Compaq Visual Fortran Version 6.6. Операционная система — Windows XP 32-bit.

Естественно, при попытке построить exe-файл появляется ошибка:
Debug/test.exe : warning LNK4084: total image size ... exceeds max (268435456); image may not run

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

Прошу подсказать:
1) Возможно ли увеличить до каких-то пределов ограничения на image size на Fortran для данного или другого компилятора (например, до 512 МБ, 1024 МБ, ...)?
2) Каким образом лучше работать с «очень гигантскими» массивами, например, 5-50 ГБ на Fortran? (Я понимаю, что уже на первых гигабайтах я наткнусь, во-первых, на ограничение на выделение памяти Windows XP 32-bit на одну программу, затем на возможности работы Windows XP 32-bit с памятью (3-4 ГБ), поэтому я имею в виду какие-нибудь механизмы, как БД, но для Fortran, которые там легко реализовать.)

Прошу прощения, если мои вопросы звучат глупо, так как я в Fortran даже не любитель... :)

Заранее спасибо!

 Профиль  
                  
 
 
Сообщение08.04.2011, 21:24 
Заслуженный участник
Аватара пользователя


15/10/08
12514

(Оффтоп)

Цитата:
32000 на 7000

Какие-то у Вас устаревшие понятия о "гиганском"

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение09.04.2011, 19:09 


14/07/10
109
Утундрий в сообщении #432607 писал(а):
Цитата:
32000 на 7000

Какие-то у Вас устаревшие понятия о "гиганском"

Я понимаю, что исследователи на сегодня работают и с терабайтами информации :), но я просто говорил о «гигантском массиве» для Фортрана без применения специальных методов.

Самостоятельно по своим вопросам новичка мне удалось определить следующее:
1) Ошибка, которая возникала при компиляции, возникала именно из-за того, что память выделялась при запуске программы «статически». Если выделять ее же динамически, то программа начинает работать.
2) В Windows XP 32bit есть ограничения на выделение памяти для одной программы: 2 ГБ. Его можно обойти, если при компиляции использовать LARGEADDRESSAWARE (или после компиляции встроить этот параметр в EXE-файл). Также необходимо попросить Windows XP давать программам 3 ГБ путем добавления параметра /3GB в boot.ini.

Путем использования решений из пунктов 1 и 2 удалось запустить алгоритмы, которые требовалось.

3) В Windows XP 32bit и любой другой 32-битной ОС невозможно использовать более 4 ГБ памяти для одной программы. То есть получается, что если работать с памятью и пытаться выделять более 3 ГБ, то нужно переходить на 64bit-ные ОС и компиляторы.

В связи с этим прошу подсказать:
а) С помощью каких компиляторов можно скомпилировать приложения на Fortran, чтобы они использовали 64-битную адресацию памяти?
б) Какие еще варианты решения проблемы существуют в рамках ее решения на одном обычном компьютере? Получается, что если используется не память, то используется винчестер или флешки. Я пытался реализовать массивы на основе файлов, где каждый элемент массива — отдельный файл, но из этой затеи ничего не вышло (я просто создавал для каждого элемента свой файл и записал в файл значение элемента), как и можно было заранее предположить.

Заранее спасибо!

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение09.04.2011, 19:46 
Заслуженный участник


15/05/05
3445
USA
Alfucio в сообщении #432908 писал(а):
...
Я пытался реализовать массивы на основе файлов, где каждый элемент массива — отдельный файл, но из этой затеи ничего не вышло.
Конечно не по одному элементу в файл. Данные в файл-матрицу пишутся блоками. В зависимости от алгоритма блок - это несколько строк, несколько столбцов или подматрица общего вида. В прогамме реализуется кэширование данных. Например:
- динамически выделяется буфер под один или несколько блоков;
- для обрашения к элементам массива вместо U[i,j] реализуются функции GETELEM(U,i,j), SETELEM(U,i,j), которые выполняют пересчет адресов и, если нужно, свопинг данных.

Необходимость кэширования может повлиять и на выбор алгоритмов. Например, градиентные методы решения СЛУ для обычных матриц считаются медленнее треугольных разложений. Но для больших матриц они проще в реализации и могут быть быстрее, т.к. нужно меньше свопов.

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение09.04.2011, 19:52 


14/07/10
109
Yuri Gendelman в сообщении #432928 писал(а):
... для обрашения к элементам массива вместо U[i,j] реализуются функции GETELEM(U,i,j), SETELEM(U,i,j), которые выполняют пересчет адресов и, если нужно, свопинг данных.

Данные функции я реализовывал, конечно, в своем сегодняшнем «монстроподобном» алгоритме выделения под каждый элемент одного файла :). Подскажите, пожалуйста, не встречались ли Вы с готовыми библиотеками, модулями или функциями, реализующими подобное на Fortran?

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение10.04.2011, 16:59 
Заслуженный участник


15/05/05
3445
USA
Alfucio в сообщении #432936 писал(а):
...не встречались ли Вы с готовыми библиотеками, модулями или функциями, реализующими подобное на Fortran?
Нет, не встречался. И не уверен, что такие универсальные библиотеки существуют. Обычно программы обработки матриц, не помещающихся в памяти, очень специфичны. Операции чтения из матрицы и записи в матрицу всегда оказываются "узким местом" и оптимизируются для конкретного применения.

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение10.04.2011, 18:51 


14/07/10
109
Спасибо!

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение10.04.2011, 20:05 
Заслуженный участник


19/07/08
1266
Alfucio в сообщении #432936 писал(а):
Подскажите, пожалуйста, не встречались ли Вы с готовыми библиотеками, модулями или функциями, реализующими подобное на Fortran?
Ну, есть такая библиотека HDF. Она в общем-то универсальная, написана для работы с файлами с большими массивами данных. В ней относительно несложно (хотя надо привыкнуть конечно) делаются всякие доступы по строкам, столбцам, блоками.

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение11.04.2011, 10:10 


14/07/10
109
Спасибо за информацию о HDF!

Подскажите, пожалуйста, правильно ли я понимаю, что если запустить приложение, скомпилированное в Compaq Visual Fortran, в Windows XP 64bit, то оно запустится как 32-битное приложение? В Compaq Visual Fortran невозможно скомпилировать 64-битное приложение, насколько я понимаю?

Если так, подскажите, пожалуйста, каким компилятором это можно сделать?

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение11.04.2011, 11:34 
Заслуженный участник


19/07/08
1266
Alfucio в сообщении #433537 писал(а):
Если так, подскажите, пожалуйста, каким компилятором это можно сделать?
Про Compaq ничего не знаю, подозреваю, что он 64 бита не поддерживает. Да, 64 бита должны поддердивать как система, так и компилятор.
Лучше всего -- Intel Fortran. Под виндой стоит денег. Если не пользоваться противозаконными методами.
Можно попробовать gcc (в котором есть gfortran) например отсюда. Оно 64 бита поддерживает.

 Профиль  
                  
 
 Re: Работа с огромными массивами в Fortran
Сообщение11.04.2011, 22:12 


14/07/10
109
Проверил на Windows XP 64bit, все получилось с gfortran: теперь можно до 8 ТБ памяти использовать :) (конечно, это больше похоже на шутку, так как на обычном PC эта память будет виртуальной, и вычисления будут идти очень долго, но в теории решение найдено, и частично его можно использовать на практике).

Спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group