Чи є там інструмент, який може генерувати розширення інтервалів функцій Fortran (або C), аналізуючи код Fortran (або C)?


13

Приклади моєї кандидатської дисертації вимагають, щоб у мене було інтервал розширень підпрограм Fortran в CHEMKIN-II (вибачення за посилання; це найкраще, що я міг би знайти для пакету, який більше не поширюється Національною лабораторією Sandia). CHEMKIN-II - хімічний пакет, що використовується в хімії згоряння; оскільки це стандартний пакет, що використовується для спалювання, я не можу (а точніше, волію не використовувати) інший пакет там.

Для того щоб отримати необхідні розширення інтервалів, я використовував власний інструмент, розроблений DAEPACK. Старі двійкові файли, які я використовував, щоб я міг генерувати необхідні інтервальні розширення підпрограм CHEMKIN-II, які мені потрібні були на 32-бітній ОС (з версією libstdc, що відповідає gcc 2.95) пару років тому, але з тих пір випали на сьогоднішній день, і це було б величезним випробуванням у використанні (адже мені доведеться знайти 32-бітні версії всіх інших програм, які я використовував). Вихідний код цього пакету також є власником, але оскільки він спочатку був розроблений в MIT, і я працюю в MIT, я зміг (після великих зусиль) отримати вихідний код для DAEPACK. Використовуючи вихідний код, мені вдалося скласти версію DAEPACK, сумісну з 64-бітовими версіями Linux та версіями libstdc, що відповідають gcc 4.xx. Однак цей вихідний код, як я підозрюю, старий, компілюється у виконуваний файл, який не успішно генерує код розширення інтервалу, який мені потрібен для виконання моєї дипломної роботи. Я звернувся до розробника, намагаючись отримати допомогу у фіксації вихідного коду, але з попереднього контакту з розробником я знаю, що йому знадобиться час, щоб виправити вихідний код, якщо він взагалі є.

Ось велика проблема: у мене ще 6 місяців, поки мені потрібно закінчити навчання, бо у мене закінчується фінансування. Я не можу розраховувати на розробника, щоб виправити DAEPACK досить швидко, щоб я успішно закінчив кандидатську дисертацію, куди ви, хлопці, заходьте.

Мені потрібен пакет, який робить наступне:

  • Генерує інтервальні розширення, моделі Тейлора (використовуючи інтервал арифметики) та похідні майже довільного коду Fortran 77; Я думаю, що єдині структури, які не аналізуються DAEPACK, - це DOпетлі та IFзаяви. Оскільки мені потрібні моделі Тейлора, код також повинен мати можливість автоматичної диференціації (AD).
  • Генерує ці інтервальні розширення та моделі Тейлора шляхом трансляції коду Fortran 77 від джерела до джерела (тобто він аналізує вихідний код, як компілятор, щоб генерувати вихідний код, який обчислює розширення інтервалу та моделі Тейлора).

Я можу використовувати програмне забезпечення, яке робить два вищевказані речі в код C замість коду Fortran 77, а потім все пропускати f2c. Я справді вважаю за краще не робити цього так, бо я не маю уявлення, чи все f2cпройде, чи все це буде спрацьовувати, але я дуже відчайдушний.

Чи можете ви, хлопці, допомогти зневіреному докторанту?


Щоб передбачити деякі можливі пропозиції, ось такі підходи, які НЕ працюватимуть для мене, враховуючи часові обмеження:

  • Намагаються сильніше змусити DAEPACK працювати; повірте, я спробував. І я часто переживаю розробника.
  • Інструменти, які обчислюють розширення інтервалів або моделі Тейлора, використовуючи об'єктно-орієнтовані (або об'єктно-орієнтовані) підходи. У мене немає часу перекодувати CHEMKIN-II (або будь-яку іншу подібну велику бібліотеку) новими типами; він занадто великий.
  • Використовуючи будь-яку іншу мову, ніж Fortran 77/90 або C. Код CHEMKIN-II знаходиться у Fortran. Я можу перетворити його на C за допомогою f2cабо, якщо потрібно, використовувати клон на основі Санді CHEMKIN-II під назвою TChem. Мої старі результати використовують CHEMKIN-II; мої нові результати повинні повторювати мої старі результати, і я вже знаю, що Cantera не повторить те, що робить CHEMKIN-II на основі тематичних досліджень та одиничних тестувань. Крім того, аспірант, який передував мені, здійснив деяку чорну магію у вихідному коді CHEMKIN-II, щоб отримати інтервал арифметики для роботи особливо добре. Мені було б важко повторити це в будь-якому іншому пакеті.

Змініть свою тему одразу. Позбавтеся від цієї нерозумної арифметики інтервалу і зробіть щось корисне, в ідеалі з програмним забезпеченням, яке працює. ;-D
Джед Браун

6
Беручи до наявних результатів, вкажіть їх на тлумачення теми вашої дипломної роботи, зробіть гарне записування та придбайте своєму комітету захисту чудові закуски.
Метт Кнеплі

@Geoff Oxberry: допоможіть мені зрозуміти, що ви маєте на увазі під розширенням інтервалу; поширюється на , де ? Я припускаю, що ваші функції не мають таких приємних властивостей, як монотонність тощо. Це надійна проблема оптимізації? F : ( R , R + 0 ) ( ( R , R + 0 ) F ( a , b ) = f ( [ a - b , a + b ] )f:RRF:(R,R0+)((R,R0+)F(a,b)=f([ab,a+b])
Deathbreath

1
Основні огляди арифметики інтервалу можна знайти у Вікіпедії (яка включає поняття розширення інтервалу) та у посиланнях, згаданих на цій сторінці . Найкращий вступ до моделей Тейлора, який я міг знайти, - тут . Автоматична диференціація зазвичай використовується при реалізації моделей Тейлора; Я ніколи не чув і не бачив, щоб хтось замість цього використовував числові наближення.
Джефф Оксберрі

2
@MishaBrukman: О, я просто за все це покарав.
Джефф Оксберрі

Відповіді:


2

Якщо припустити, що проблема полягає в тому, що вона DAEPACKпрацює в 32-бітному режимі, але не в 64-бітному режимі, ось кілька підходів до вирішення цього питання.

Компілюйте DAEPACKв 32-бітному режимі на 64-бітній ОС

Дивіться, як це зробити в іншому питанні . Це може бути простим способом продовжити роботу з ним.

Якщо проблема полягає в тому, що згенерований код має проблеми в 64-бітному режимі, компілюйте згенерований код з аналогічними 32-бітовими прапорами або в 32-бітному середовищі (64-розрядна ОС може запускати 32-бітний код з відповідними бібліотеками, але не навпаки ).

Відтворити цілком DAEPACKбезпечне середовище

  1. Створіть повну 32-бітну середу у віртуальній машині, використовуючи, наприклад, VirtualBox , такий, який із DAEPACKзадоволенням працює в ньому, чи то зі старих бінарних файлів, чи перекомпільований у цьому середовищі. Ви можете отримати версію ОС з відкритим кодом та компілятора стільки ж, скільки вам потрібно, щоб отримати робочу версію програмного забезпечення.

  2. Візьміть вихідні дані DAEPACKта перенесіть їх на головну машину або окрему віртуальну машину, де середовище є відповідним для іншого програмного забезпечення та продовжуйте роботу. Наприклад, це може бути пізніша 64-розрядна ОС і продовжувати працювати там.

    Використання функції спільних папок у VirtualBox має полегшити вам це.

Запросіть інших, щоб допомогти виправити DAEPACK

Я помітив, що ви сказали, що ні ви, ні автор програмного забезпечення не встигаєте це виправити, але ніхто не сказав, що ви не можете заручитися чужою допомогою! Розгляньте такі варіанти:

  • Найміть студентів, які навчаються на базі MIT CS, щоб допомогти виправити проблеми з 32-бітними та 64-розрядними версіями. Зауважте, що, щоб спокусити їх працювати над цим, вам, можливо, доведеться компенсувати їх, наприклад, грошима чи піцами (та / або пивом, якщо вони мають законний алкогольний вік), наприклад. Або подумайте, чи може ваш радник найняти студентів, які працюють неповний робочий день, щоб допомогти у цьому (можливо, проблема з фінансуванням, якщо у вас закінчується власне фінансування). Або попросіть якісь привілеї у дослідників-програмістів вашого відділу.

  • Лоббі для випуску з відкритим кодом DAEPACK. Схоже, його статус ліцензування незрозумілий , але зауважте, що MIT має однойменну ліцензію з відкритим кодом, яка досить відома; вивільнення його за відкритою ліцензією може допомогти отримати більше поглядів на проблему та допоможе виправити 32-бітні та 64-бітні проблеми.

    Зауважте, що залежно від вашого відділу, юридичних, адміністративних тощо служб може знадобитися довше, ніж 6 місяців, які ви залишили для доктора філософії, тому подумайте про початок цього достроково, шукаючи інші альтернативи.

Удачі!


Провівши час, надписуючи цю відповідь, я просто зрозумів, що ви написали своє запитання у 2012 році з 6-місячним терміном, тому це обговорення є доволі суперечливим. Вибач за це! Мені все ще цікаво, що ти закінчила в цьому випадку.
Міша Брукман

Під час доктора філософії я пробував усі три підходи, які ви згадали, не успішно. Проблема, IIRC, полягала в тому, що він генерував баггі-код; складання його (хоча біль у дупі, бо мені довелося модернізувати його частини) насправді було найменшою з моїх проблем. DAEPACK навряд чи вийде з відкритим кодом, оскільки це ключова технологія компанії. Крім того, терново знайти інших людей поза цією компанією та колишнього мого радника, щоб виправити це, і я сумніваюся, що заповзятливі студенти MIT CS хочуть взяти цю невдячну роботу.
Джефф Оксберрі

@GeoffOxberry вибачте це, але це (на жаль) занадто поширене в так званому програмному забезпеченні "якість якості". Вітаю за все наполегливе та закінчення ступеня!
Міша Брукман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.