Переход из Delphi на FreePascal под Windows

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Inttelc
новенький
Сообщения: 13
Зарегистрирован: 18.11.2010 20:40:04

Переход из Delphi на FreePascal под Windows

Сообщение Inttelc »

Имеется проект в виде ряда динамических библиотек, написанных на Delphi7 и содержащие большое колическтво процедур. Возникла проблема в нехватке оперативной памяти для расчетов. Была попытка запустить проект в среде Embarcadero Delphi 2010 на компьютере с 8-ю гигабайтами оперативной памяти и с ОС Windows 7, 64 bit. Однако максимально используемый объем при расчетах - 3 Гб (при превышении которого выдается ошибка "out of memory").
Можно ли переходом на Free Pascal решить данную проблему?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Проблему нехватки памяти, возможно, удастся решить, но вместо нее могут возникнуть другие...
Inttelc
новенький
Сообщения: 13
Зарегистрирован: 18.11.2010 20:40:04

Сообщение Inttelc »

Sergei I. Gorelkin писал(а):Проблему нехватки памяти, возможно, удастся решить, но вместо нее могут возникнуть другие...

А какую посоветуете версию? Где можно найти?
Я готов попробовать, поскольку иного выхода нет.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Несколько дней назад вышел релиз 2.4.2, версия для 64-битной винды загружается отсюда: http://www.freepascal.org/down/x86_64/win64.var
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Inttelc писал(а):Можно ли переходом на Free Pascal решить данную проблему?

А точно Ваши данные займут больше 3Гб?
Это математические расчеты? Типа, матрицы, да?
Inttelc
новенький
Сообщения: 13
Зарегистрирован: 18.11.2010 20:40:04

Сообщение Inttelc »

Спасибо. Удалось скачать по ссылке
ftp://ftp.freepascal.org/pub/fpc/dist/2 ... -win64.exe

Добавлено спустя 3 минуты 8 секунд:
stikriz писал(а):
Inttelc писал(а):Можно ли переходом на Free Pascal решить данную проблему?

А точно Ваши данные займут больше 3Гб?
Это математические расчеты? Типа, матрицы, да?

Да, математическое моделирование переменного магнитного поля. Предел в 3 Гб не дает двигаться дальше.
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Матрицу надо разбить на кубики поменьше, рещить в них, потом решать в кубиках побольше и т.д.
Машинные методы анализа надо посмотреть. Не знаю что у Вас там, наверняка сложнее. А я решал большие линейные уравнения на Sinclar Spectrum методом итераций. 48кб памяти и 320 кб диск. Матрица была под 300Кб. Тоже бил матрицу на кусочки. Все равно большинство данных в расчете участвует не все время. Значит, это большинство данных в оперативной памяти не нужно. Переход на 64 бит поможет преодолеть ограничение по адресации большого объема данных, но все равно нужно сразу писать правильно, да и работать будет быстрее.
Inttelc
новенький
Сообщения: 13
Зарегистрирован: 18.11.2010 20:40:04

Сообщение Inttelc »

Я прорбовал реализовать метод блочных итераций. Получилось не очень. А времени доделывать пока нет. Нужно срочно доделать рассчет.
Скачал lazarus под win32 (lazarus-0.9.28.2-fpc-2.2.4-win32) - запустил свой проект дома - работает
Под win64 (lazarus-0.9.28.2-fpc-2.2.4-win64) - на работе нет. Долго компилирует.
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Компилится?

Если Вы читаете данные из файла заранее созданного, ну и не только, то обратите внимание, что под 64 бита размерность данных изменилась. Используйте реальные типы данных, а не псевдонимы. Integer, например 64 бита, а был 32... Т.е. структуры, Sizeof_ы искать и править. Это первое что приходит на ум.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

stikriz писал(а):Integer, например 64 бита

о_О
Насколько мне известно, это не так. 16 в режимах TP и FPC, 32 — DELPHI и OBJFPC.
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Сейчас проверил - так и есть.

Добавлено спустя 2 минуты 7 секунд:
Я был уверен, что Integer должен стать int64, как в Delphi при переходе с 16 на 32 бита из 16 битной стал 32 битным.
Непорядок...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

stikriz
Пичитайте вот это. Написано убого, но доходчиво.
Inttelc
новенький
Сообщения: 13
Зарегистрирован: 18.11.2010 20:40:04

Сообщение Inttelc »

Копированием кода из DLL в основной модуль программы удалось добиться результата - программа считает. Уже пробовал загрузить оперативу по максимуму где-то 7100 Мб. DLL-ки с 32-битным кодом он не загружает. Вообще скаченная мною версия lazarus-0.9.28.2-fpc-2.2.4-win64 какя-то не доработанная (по моему): неудобно искать ошибки в коде. После первой попытки поставить программу на счет на ночь не хватило памяти, lazarus вместо таго чтобы выдать сообщение "out of mamory", как это делает Delphi, просто закрылся. Также, никак не могу разобраться как создавать DLL. В Delphi все просто: создаю новое приложение (libriary), сохраняю, компилирую (даже пустую, без кода) и в папке, в которую сохранил появляется соответствующий *.dll фал. Тут, в lazarus-е выдается ошибка: "Debugger erroe. Ooops, the debugger entered the error state. Save your work now! Hit Stop, and hope the best,we're pulling the plug". dll фал при этом не создается, вернее файл находится в процессе компиляции *.compilled
Павел Ишенин
постоялец
Сообщения: 475
Зарегистрирован: 24.03.2007 09:16:52

Сообщение Павел Ишенин »

А если нажать Ctrl+F9 вместо F9? В дневных сборках этот баг поправлен.
Inttelc
новенький
Сообщения: 13
Зарегистрирован: 18.11.2010 20:40:04

Сообщение Inttelc »

Где можно скачать наиболее стабильную версию?
Вот, с горем пополам создал DLL-ку, запустил. Программа считала. Затем, внезапно перестала компилировать, - пишет что отсутствует fpcmemdll.dll.
Ответить