C ++ проти Fortran для HPC


56

У моїй докторській програмі з обчислювальної науки ми працюємо майже виключно в C ++ та Fortran. Схоже, деякі професори віддають перевагу одному над іншим. Мені цікаво, хто з них «кращий» або якщо за певних обставин один кращий за інший.


12
Поєднання мови високого та низького рівня краще, ніж виключно використання будь-якого, на мою думку. Наприклад, я використовую Python + C ++.
Faheem Mitha

2
Відповіді на це питання будуть майже суто суб’єктивними, тому я не впевнений, що це питання є доречним.
Джефф

Відповіді:


61

Як часто, вибір залежить від (1) проблеми, яку ви намагаєтеся вирішити, (2) навичок, які ви маєте, та (3) людей, з якими працюєте (якщо це не сольний проект). Я покину (3) осторонь, бо це залежить від індивідуальної ситуації кожного.

Залежність проблеми: Fortran перевершує при обробці масиву. Якщо вашу проблему можна описати в простому структурі даних та зокрема масивах, Fortran добре адаптований. Програмісти Fortran в кінцевому підсумку використовують масиви навіть у неочевидних випадках (наприклад, для представлення графіків). C ++ краще підходить для складних і дуже динамічних структур даних.

Залежність від навичок: для написання хороших програм C ++ потрібно набагато більше досвіду програмування, ніж для написання хороших програм Fortran. Якщо ви починаєте з невеликого досвіду програмування і у вас є лише стільки часу, щоб вивчити цей аспект вашої роботи, ви, ймовірно, отримаєте кращу віддачу від інвестиційного навчання Fortran, ніж навчання C ++. Припускаючи, звичайно, що ваша проблема підходить до Фортран.

Однак для програмування є більше, ніж лише Fortran та C ++. Я рекомендую всім, хто займається обчислювальною наукою, починати з динамічної мови високого рівня, наприклад, Python. Завжди пам’ятайте, що ваш час цінніший, ніж час процесора!


17
"Завжди пам’ятайте, що ваш час є більш цінним, ніж час процесора!" Як хтось, хто працює в HPC, я не згоден з цією частиною; все інше на місці.
Леві Моррісон

19
"Завжди пам'ятайте, що ваш час цінніший, ніж час процесора!" Як хтось, хто працює в наукових дослідженнях, я не міг більше погодитися з цією частиною.
decvalts

3
"Завжди пам’ятайте, що ваш час є більш цінним, ніж час процесора!" - Я хотів би кинути свої 2 центи - використання декількох сотень вузлів, кожен з 10+ ядер, щоб запустити якусь програму протягом декількох тижнів, можна розтлумачити як жахливу трату найціннішого ресурсу, якщо ще кілька тижнів могли б створити код, який працює лише за пару днів. Ці кластери HPC є рідкісним і дорогим загальним ресурсом.
Dani_l

"Завжди пам’ятайте, що ваш час цінніший, ніж час процесора!", Кодуйте на тиждень, але працюйте протягом місяця, це досить звичний сер!
фронтхем

6
"Завжди пам’ятайте, що ваш час є більш цінним, ніж час процесора!", Я вважаю за краще кодувати місяць і працювати через тиждень! - більше можна зробити після написання коду, а інші знайдуть код, який ви також пишете, і кориснішим.
Чарльз

37

Я думаю, що і C ++, і Fortran досить хороші і працюють добре.

Однак я думаю, що Fortran краще для чисельних наукових обчислень, для алгоритмів, які можна виразити за допомогою масивів і не потребують інших складних структур даних, тому в таких областях, як кінцеві відмінності / елементи, вирішення PDE, обчислення електронних структур. Fortran - мова, що залежить від домену. Зокрема, я думаю, що простіше писати швидкі програми у Fortran, ніж в C ++, вченим (не обов'язково знавцем інформатики).

C ++ є мовою загального призначення, тому в ній можна виразити будь-який алгоритм, і це, безумовно, краще для алгоритмів, які неможливо виразити за допомогою масивів, з поля HPC, ймовірно, деякі графіки, сіткові генератори, символічні маніпуляції тощо.

Можна також писати алгоритми масиву в C ++, але, на мій досвід, це вимагає набагато більше знань з інформатики та загалом більше роботи (тобто потрібно створити або повторно використовувати класи для маніпулювання масивом, а також керувати керуванням пам'яттю вручну або за допомогою деяких бібліотека, як Teuchos з Trilinos). Неексперти схильні писати досить непогані програми Fortran, але жахливі програми C ++ (якщо говорити з власного досвіду).

Відмова: Особисто мені дуже подобається Fortran, і я віддаю перевагу над C ++ для чисельних обчислень. Я щодня проводив програмування на C ++ щодня, і майже рік програмував у сучасному Fortran щодня (у зоні кінцевих елементів). Я також дуже багато використовую Python та Cython.


1
Один за першу відповідь збалансований. Я думаю, що C ++ та Fortran - це далеко не єдині можливості сучасних HPC. Я думаю, що добре визнати силу та слабкі місця, коли ви вирішите для Fortran, C ++ або Python (або що завгодно). Я бачив 20 000 рядків Fortran в одному файлі, органічно вирощеному за кілька десятиліть. Я особисто не використовував би нічого, крім ізольованих обчислень важких масивів. Навіть ні для чого, пов'язаного з виходом. Поки що для упередженого коментаря.
шухало

6
Я не міг більше погодитися з цією відповіддю. Наш код кінцевих елементів не вдалося б записати у Fortran. Насправді він розпочався 15 років тому як суміш звичайного С та Фортран (останній був для чисельно інтенсивних частин методу), і він поступово переміщувався до чистого C, а потім до C ++ протягом декількох років. Код став послідовно коротшим, швидшим і простішим для розуміння, і він був більш здатним після кожної ітерації. Я погоджуюся з іншими, хто зазначає, що C ++ дає вам багато мотузки, щоб стріляти з себе. Виберіть мову, яка вам найбільше подобається.
Білл Барт

6
Білл, ти використовував сучасний Фортран (90 та пізніші доповнення?). Це дуже важливо (я мав би бути більш чітким у своїй відповіді з цього приводу). Звичайно, "20 000 рядків Fortran", або f77, як правило, не краще, ніж добре написані C ++.
Ondřej Čertík

1
@ OndřejČertík: Я думаю, що якщо ви вважаєте, що сучасні програми з кінцевими елементами використовують "прості" структури даних, то ви останнім часом не переглядали жодну з них. Спробуйте впровадити адаптивні кінцеві елементи, методи hp або мультирешітку на неструктурованих сітках, використовуючи прості структури даних. Білл виявився на місці, і я вважаю, що можу говорити за нього, кажучи, що використання "сучасного Фортран" мало би мало чим змінити.
Вольфганг Бангерт

6
@WolfgangBangerth, див., Наприклад, Phaml ( math.nist.gov/phaml ) для реалізації Fortran майже всього, що ви згадали.
Ondřej Čertík

31

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

Зауважте в наступному, що я буду говорити про C, а не C ++. Чому? Ну, інакше яблука та апельсини порівнюють повноцінний динамічно набраний об'єктно-орієнтований мову з чимось настільки статичним, як Фортран. Так, деякі сучасні впровадження останніх стандартів Fortran можуть зробити не тільки це, але дуже мало людей насправді ними користуються, і тому, коли ми говоримо про Fortran, ми думаємо просту, статичну та імперативну мову. Ось тут і С, тому я заміню C на C ++ на наступне.

По-перше, будь-яке обговорення Fortran / C, що має кращі компілятори, суперечить. Виділені компілятори C / Fortran - це минуле. І gcc / gfortran, і icc / ifc є просто різними передніми сторонами до одного і того ж бек-енду, тобто ваша програма буде перетворена на абстрактний опис фронтальним процесором, а потім оптимізована і зібрана бек-ендом. Якщо ви пишете, семантично, один і той же код у Fortran або C, компілятор в обох випадках створить ту саму збірку, яка буде працювати так само швидко.

Це тепер призводить до мого другого моменту: чому ми все ще бачимо відмінності? Проблема полягає в тому, що більшість порівнянь проводиться програмістами Fortran, які намагаються щось в C або навпаки. Ви коли-небудь помічали, як більшість авторів чи поетів вважають за краще писати рідними мовами? Чи хотіли б ви писати поезію мовою, якою ви не відчуваєте себе повністю впевнено чи вдома? Звичайно, ні ... Я сам вважаю С "моєю" рідною "мовою програмування. Однак я також три роки працював у групі, яка використовувала лише Фортран, в якій я досяг певного рівня володіння. Я б, однак, ніколи нічого не писав самостійно у Fortran, оскільки мені зручніше з C, і, як наслідок, отриманий код буде кращим , як би ви це не визначили.

Тож головна відмінність полягає в програмісті, а не в мові. Тож відмінностей немає? Ну, не зовсім. Ось кілька прикладів:

  • SIMD: чи це SSE, SSE3 або AltiVec, якщо ви хочете використовувати їх у Fortran, то краще сподівайтеся і моліться, щоб компілятор вгадав саме те , що ви хочете, і робить це так. Удачі. У З зазвичай у вас є внутрішні функції для кожної архітектури, або, останнім часом, загальні типи векторних SIMD в gcc . Більшість компіляторів Fortran використовуватимуть лише інструкції SIMD для розгортання циклів, але якщо у вас є ядро, яке працює на коротких векторах даних неочевидним чином, компілятор, ймовірно, не побачить його.

  • Різні апаратні архітектури: Вся архітектура CUDA побудована навколо ядер в C. Так, зараз у Portland Group є компілятор fortran, здатний на підтримку CUDA , але це комерційно, а головне, це не від NVIDIA. Те ж саме стосується OpenCL, для якого найкраще, що я міг знайти, - це недавній проект, який підтримує лише декілька основних дзвінків.

  • Паралельне програмування: Так, і MPI, і OpenMP відмінно працюють як з C, так і з Fortran. Однак, якщо ви хочете реально контролювати свої потоки, тобто якщо у вас є повністю динамічні обчислення спільної пам’яті, ви не будете холодно з Fortran. У C у вас є стандартні плівки, які, хоч і не теплі і нечіткі, все одно пройдуть вас через шторм. Загалом, більшість обчислень, які покладаються на доступ до операційної системи, наприклад, потоки, процеси, файлова система тощо ..., краще обслуговувати C. О, і не намагайтеся робити власну мережу з Fortran.

  • Простота використання: Fortran ближче до Matlab, ніж C. Після того, як ви ознайомитеся з усіма різними ключовими словами та як оголосити змінні, решта коду виглядає як Matlab, що робить його більш доступним для користувачів з обмеженим досвідом програмування.

  • Інтероперабельність: Коли ви створюєте структуру на C, макет фактичних даних є прямим та детермінованим. У Fortran, якщо ви використовуєте масиви вказівників або структуровані дані, фактичний макет даних сильно залежить від компілятора, не прямолінійно і, як правило, повністю недокументований. Ви можете зателефонувати на C з Fortran і навпаки, але не починайте думати, що передавати щось більше, ніж статичний масив з одного на інший і назад, може бути так просто.

Це все дещо вигадливі речі низького рівня, але про це високопродуктивні обчислення, про які ми говоримо, правда? Якщо вас не цікавить, як найкраще використовувати основні апаратні парадигми, тобто реалізувати та / або розробляти алгоритми, найкращі для спільної / розподіленої пам’яті, потоків, векторизації SIMD, графічних процесорів за допомогою SIMT тощо. просто займаюся математикою на комп’ютері.

Це стало набагато довше, ніж все, що я мав на увазі, тому ось короткий підсумок - набір подібних повідомлень додому:

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

5
Хороша відповідь. Я не думаю, проте ваш остаточний коментар обов'язково відповідає дійсності. Я сам програміст C, але ви отримуєте доступ до речей низького рівня у Fortran завдяки хорошим практикам програмування. Ідеальний спосіб використовувати такі речі, як SIMD ops, - це написати код, який настійно пропонує це (наприклад, блокуючи петлі), і дозволити компілятору зробити це за вас. Для нанизування рішень просто використовуйте openMP (pthreads також можна використовувати з додатковою роботою). У Fortran є все те, що ви згадуєте, це не так, лише на рівні, який має значення для типового користувача: числовий.
Reid.Atcheson

@ Reid.Atcheson: Ну, якщо ви заблокуєте все так, що компілятор це схопить, то він буде працювати автоматично і в C, і у Fortran. Проблема полягає в тому, як далеко ви хочете довіряти своєму компілятору? І чому ви хочете довіряти цьому у випадках, коли ви точно знаєте , що хочете зробити? Так, OpenMP виконує нанизування, але блочно. Ви можете ввести це в отримання різних пулів потоків, щоб робити різні речі, але це просто неправильне використання OpenMP. Pthreads для Fortran - це лише обгортки для функцій C. Я згоден, однак, що Фортран легше, якщо ти не вникаєш у деталі.
Педро

1
Впевнені, що ви не збираєтеся отримувати 99-відсоткову пікову ефективність, покладаючись на компілятор, але ви можете легко підійти досить близько. Крім цього вам потрібно використовувати внутрішні символи або вбудований ASM. Десь потрібно піти на поступки задля загальної ефективності програміста, саме тому мови програмування існують в першу чергу. На етапі, що ви насправді недостатньо божевільні, щоб вникнути в деталі внутрішньої роботи або ASM (я був декілька разів), Фортран не є милицею. Ви б знали, як зв’язати свій зібраний вручну оптимізований код.
Reid.Atcheson

@ Reid.Atcheson: Ну, я б заперечував, що для паралельних додатків HPC ви можете виявитись набагато нижче 99% пікової ефективності ... І типи векторів gcc роблять використання внутрішньої техніки непроблемним :)
Педро

1
@ Педро, блискучий пост. Абсолютно геніально. Дуже дякую за публікацію. Просто знайшов його, випадково копаючи цікаві нитки.
Запит

16

З моїх 15 років роздуму над науковим програмним забезпеченням: Якщо ваш код працює на 25% швидше, тому що ви пишете його у Fortran, але для його запису потрібно 4 рази (без STL, труднощів із застосуванням складних структур даних тощо), тоді Fortran виграє лише, якщо ви витратите значну частину дня, обертаючи великі пальці і чекаючи завершення своїх обчислень. Зважаючи на те, що майже для всіх нас найціннішим є власний час, висновок такий: використовуйте мову, яка дозволяє вам швидше розробляти, налагоджувати та перевіряти свій код, не зважаючи на те, що це може бути повільніше, ніж можливо, якщо це можливо ви написали це у Фортран.


13

Мій підхід полягав у тому, щоб використовувати C ++ для всього, крім обчислювальних ядер, які, як правило, найкраще записуються в збірку; це дозволяє купувати всі продуктивність традиційного підходу HPC, але дозволяє спростити інтерфейс, наприклад, перевантаживши обчислювальні ядра, такі як SGEMM / DGEMM / CGEMM / ZGEMM, в єдину процедуру, скажімо Gemm. Очевидно, що рівень абстракції можна підвищити набагато вище, уникаючи необмежених покажчиків та переходу на непрозорі класи, але це хороший перший крок.

Я вважаю, що найбільшим недоліком C ++ є переважно збільшення часу складання, але, на мій досвід, економія часу на розробку більше, ніж компенсувати його. Ще одним недоліком є ​​те, що у компіляторів постачальника C ++, як правило, більше помилок, ніж у компіляторів постачальника C та Fortran. Минулого року, я думаю, я натрапив на майже десять помилок у компіляторах C ++.

Зважаючи на все сказане, я вважаю, що скасування наукових пакетів, написаних на мовах низького рівня (та Fortran), - це небажання виставляти зручні інтерфейси для складних структур даних: більшість людей задоволені інтерфейсом Fortran BLAS, оскільки цього потрібно лише покажчики та основні розміри для опису матриць, але мало хто заперечує, що звичайний 40-цілий Fortran інтерфейс розрізненого прямого вирішення - це все, що є зручним (пор. UHM, SuperLU, PETSc та Trilinos).

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

Зауважте, що цей пост призвів до цього порівняння продуктивності C і Fortran на ядріy:=αx+y .


2
Чому б ви не довіряли стандартному компілятору C з відповідною оптимізацією для компіляції малих ядер? На цьому рівні розміру та складності коду різниця в тому, що компілятор може витягнути з нього, незрозуміло.
Пітер Брун

1
Я розмовляв з кількома людьми, які сказали мені, що навіть при відповідному обмеженому використанні, їхній Fortran був все-таки швидший, ніж їх C та / або C ++-код для деяких операцій, таких як явна матриця транспозиції. Я не кажу, що неможливо зробити код C або C ++ так швидко, але компілятор Fortran прагне зробити кращу роботу.
Джек Поульсон

У мене той самий досвід роботи з ключовим словом "обмежити" (мій простий код Fortran завжди був трохи швидшим). Але моя експертиза обмежена, і я просто не маю часу вкладати гроші в розуміння створеної збірки від gcc. Тому я просто використовую Fortran, це просто і це швидко.
Ondřej Čertík

@JackPoulson: Аргумент компілятора - це те, що я чую трохи від спільноти Fortran. На жаль, більшість компіляторів, наприклад, gcc або ifc / icc, використовують різні мовні передумови для одного і того ж бек-енду. Техніка, яка робить оптимізацію та генерування коду, однакова, і тому відмінності в результатах, ймовірно, пов'язані з відмінностями в ознайомленні програміста з базовою мовою ...
Педро

1
Тільки для того, щоб дати трохи погляду на часто повторюване, рідко підтверджене твердження, що Фортран швидше на числових ядрах: Якийсь час назад ми помітили, що розрядний матричний вектор розмножується в пакеті Epetra Trilinos на 30% повільніше, ніж у угода.II. Перший був написаний прямо вперед Fortran 77, останній прямо вперед С без використання "обмеження". В обох було близько 10-15 рядків коду. Сьогодні Trilinos використовує фрагмент коду, піднятий від deal.II. Я впевнений, що можна знайти багато випадків, коли F77 швидше, ніж C. Справа в тому, що сьогодні це вже не повсюдно.
Вольфганг Бангерт

8

Оскільки я тут новий, я переглянув старі питання і знайшов це. Сподіваємось, відповідати на старих не табу!

Оскільки ніхто інший цього не згадував, я подумав, що я. Fortran 2003 майже повністю підтримується більшістю основних компіляторів (intel, ibm, cray, NAG, PCG), навіть gcc з (найближчим часом) найновішим випуском 4.7. Fortran 2003 (і 2008) - об'єктно-орієнтована мова, хоча і дещо більш багатослівна, ніж C ++. Однією з речей, які я вважаю приємними щодо Фортран, є той факт, що стандартний комітет розглядає наукові обчислення як основну аудиторію (я дякую Даміану Русону за те, що він вказав мені це днями).

Я доводжу це все не для того, щоб програмісти на C ++ ставали програмістами Fortran, а для того, щоб люди Fortran знали, що тепер у них більше варіантів, крім переходу на C ++ або емуляції об'єктно-орієнтованих концепцій у Fortran 90/95.

Одним застереженням, який я додам, є те, що коштувати бути на межі кровотоку того, що реалізовано в компіляторах. Якщо ви зараз розпочали великий проект у Fortran 2003, вам наткнуться на помилки та постійно потребуватимуть оновлення компілятора (особливо якщо ви використовуєте gcc), хоча це стало значно кращим за останні кілька місяців!


7

Проблема C ++ полягає в тому, що у вас є численні шанси погіршити продуктивність, наприклад, сліпо використовувати STL, винятки, класи (віртуальні накладні витрати та проблеми з вирівнюванням), перевантаження оператора (зайві нові / видалення) або шаблони (нескінченна компіляція та криптичні помилки здаються доброякісними, але ви можете витрачати години таким чином).

Однак більше ви отримуєте кращий доступ до загальних бібліотек і, можливо, бачите ваш код (хоча це сильно залежить від поля, і у вас все ще є чистий C). І ви все ще можете компенсувати відсутність гнучкості у Fortran, загорнувши його код на такій мові сценарію, як R, Lush, Matlab / Scilab або навіть Python, Ruby або Lua.


1
Як правило, погана ідея застосовувати методи низького рівня в мовах високого рівня. Наприклад, STL призначений для роботи на дуже абстрактному рівні. Треба знати, для чого призначений інтерфейс, використовувати його для виконання цього завдання, а потім вийти з компілятора.
shuhalo

2
Я думаю, що і точки mbq, і точки Мартіна несправедливі. Так, є способи стріляти себе в ногу, якщо ви спробуєте реалізувати числовий вектор для цілей лінійної алгебри, використовуючи std :: list <double>. Але це дурний аргумент: принаймні у C ++ є клас пов'язаного списку, який ви можете використовувати, тоді як Fortran цього не робить. Це як сказати: "Автомобілі їздять з такою великою швидкістю, що ви можете врізатися в стіну і отримати травму; натомість вам слід використовувати конячі". Це просто дурна ідея смітити мову високого рівня, яка також підтримує матеріали низького рівня (наприклад, C ++) за те, що вони мають функції високого рівня.
Вольфганг Бангерт

@WolfgangBangerth Ні, тепер ви шкодите Фортран - це настільки ж "низький рівень", як бактерії "менш еволюціонують", ніж люди. Якщо ви хочете аналогію з автомобілем, це має бути більше схожим на "ви можете використовувати і джип, і лексус, щоб перетнути болотисту дорогу, але використання першої шкоди менше".
mbq

1
Я ціную вашу думку, але я
тверджу,

7

Три факти:

  • N-мірний масив у стилі F77 на C: Немає проблем із використанням CnD (безсоромний штекер, правда,)

  • Модульна система F90 погано розроблена і ворожа для створення середовищ. (Ім'я модуля не повинно відповідати назви файлу, наприклад)

  • Fortran не підтримує добре рефакторинг. Для витягування певної функції з функції потрібно торкнутися чотирьох місць: фактичний код, оголошення змінної, декларації аргументів та список аргументів. C обходиться з двома місцями для дотику. Це з’єднує ефект недостатнього керування даними (описано нижче): Оскільки дрібномодульна модульність настільки болюча, майже всі пишуть гігантські підпрограми.

Одне особисте враження:

  • Fortran не працює добре для управління даними. Спробуйте повернути вказівник на непрозору структуру даних у F77 або F90. ( transfer(), ось ми прийшли)

Привіт Андреасе! CnD цікава, я про це не знав. Ах, ти це написав. :) (f90 також підтримує нарізку, виділяється для масивів, а головне - синтаксис масиву для множення, додавання тощо). Я використовую CMake з Fortran, і він чудово працює з модулями. Що саме "аргумент список"? Я не думаю, що я їх використовую, тому для зміни потрібні лише 3 місця. У C, як правило, потрібно змінити фактичний код, параметри та файл заголовка, так що це також 3 місця (найбільш виразно в C ++). Так, передача () не дуже приємна, але зазвичай вона вам не потрібна на практиці.
Ondřej Čertík

3
Рефакторинг сучасного фортран є тривіальним при правильних ІДЕ, як Фотран у затемненні.

2
"Ім'я модуля не повинно відповідати його імені файлу, наприклад" Ви повинні жартувати, у вас може бути багато модулів в одному файлі. Деякі з них охоплюють лише пару рядків. Їх набагато простіше створити, якщо вам не доведеться створювати файл для кожного з них.
Володимир F

1
Просто хотів додати те, що @ user389 сказав, що, хоча Photran чудовий і є єдиним IDE Fortran, який дозволяє рефакторингу, його аналіз постійно провалюється. З іншого боку, не потрібно коментувати той факт, що Eclipse - це голодна пам'ять.
astrojuanlu

5

Fortran оптимізований для обчислень масиву / матриці і є ретельним болем для роботи з будь-яким типом розбору тексту. C і C ++ можуть не збігатися з Fortran у числових обчисленнях (це близько), але мені здається, що набагато простіше обробляти текст і впорядковувати дані (тобто спеціальні структури даних) за допомогою C / C ++.

Як уже згадували інші, не враховуйте динамічні інтерпретовані мови (Python et al). Вони можуть не пропонувати швидкість плавлення обличчя Fortan вперед, але вони дозволяють зосередитися більше на вирішенні вашої обчислювальної задачі, ніж на всіх деталях впровадження. Часто ви можете реалізувати рішення в Python, і якщо продуктивність неприйнятна, зробіть кілька профілів, визначте проблемні області та або оптимізуйте цей код за допомогою Cython, або повторно реалізуйте всю програму компільованою мовою. Після того, як у вас буде розроблена логіка вирішення проблем, решта - це лише реалізація, і, добре розуміючи основи обчислень, слід легко представити в будь-яких різноманітних мовах програмування.


Це вірно. Для розбору тексту я також використовую Python.
Ondřej Čertík

Ви також можете реалізувати частину сценарію Python на компільованій мові, наприклад, C ++ та підключити його. Наприклад, Boost Python, Swig тощо
Faheem Mitha

4

Зараз я працюю в одному з національних лабораторій. Більшість людей навколо мене - інженери-механіки. Спілкуючись з деякими з груп HPC, вони роблять здебільшого Linux та переважно C ++. Група, в якій я зараз перебуває, в основному працює на настільних додатках, і ми використовуємо Windows у порядку зменшення: C #, FORTRAN, Python, VBA та VB (6, не .NET). Деякі симулятори, які ми використовуємо, були написані в інших національних лабораторіях у FORTRAN.


4

Вибачте, що викопав стару нитку, але, здається, навіть у 2015 році Fortran багато використовується.

Я щойно натрапив на цей (альтернативне посилання ) список, який в основному являє собою список з 13 кодів, затверджених засобом OCLF DOE для запуску на 300-petaFLOPS Summit-машині, яка буде доступна для дослідників у 2018 році. Я намагався знайти основну мову, що використовується для коду (на основі швидкого пошуку в Google) і ось що я знайшов:

XGC Fortran

SPECFEM Fortran

ACME Fortran (Bunch of climate codes)

DIRAC Fortran (Mostly)

FLASH Fortran

GTC Fortran

HACC C/C++

LS-DALTON Fortran (some C)

NAMD C/C++

NUCCOR Fortran

NWCHEM Fortran

QMCPACK C++

RAPTOR Fortran

Отже, з 13 кодів, принаймні 10 (на основі мого швидкого пошуку), здається, написані у Фортран. Непогано для мови 50 років.

ПРИМІТКА. Я добре знаю, що порівняння мов марно, але враховуючи кількість людей (особливо користувачів C ++), які непогано поживаються на Fortran, я вважав, що це варто згадати.


3
Я не згоден, тому що мій досвід роботи в національних лабораторіях був, навпаки, навпаки. Більшість нових проектів, які я бачу у Лоуренса Лівермора, написані на C ++, а більшість нових (або активно підтримуваних) сучасних бібліотек з відкритим кодом у вирішенні ODE, дискретності FEM та наукових бібліотек загального призначення. здається, є в C або C ++. Здається, Fortran в основному використовується в проектах, які використовують існуючі / застарілі бібліотеки; Я не бачу багато великих проектів, що використовують Fortran, незалежно від того, що я думаю про мову.
Джефф Оксберрі

Деякі коди теорії функціональної щільності, написані також у Fortran, включають VASP та CASTEP , хоча, як вказує @GeoffOxberry, нові проекти, можливо, мають тенденцію до C ++.
dr.blochwave

@blochwave Як ви можете прочитати за посиланням, проекти призначені для нової машини (з прискорювачами тощо), яка з’явиться в Інтернеті в 2018 році. Тому не так, як вони беруть код на 25 років і складають його, сподіваючись запустити з хорошим виконання. Я впевнений, що велика частина кодів у наведеному вище списку є або переписана, як у новому коді. Ряд "нових" кліматичних кодів також є у Фортран і використовуються багатьма агенціями в ряді країн.
stali

0

Думаю, що намагається сказати Джек П., - це те, що ви повинні змішуватись і поєднуватися. Гарний фрагмент програмного забезпечення ретельно шарується. Різні шари можуть відображатись більш природно чи ефективно на різних мовах. Ви повинні вибрати найбільш відповідну мову для кожного шару. Ви також повинні розуміти, як мови можуть взаємодіяти, що може впливати на мову, яку ви обираєте для якого шару.

Краще питання - які приклади чудово розробленого програмного забезпечення там варто вивчити, щоб дізнатись, як розробити шаруваті програми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.