Вирішено, яку мову вибрати Форум з розробки та програмування
Навігація
Дослідницькі зв’язки
Оголошення
DVD-диски Ubuntu, USB-накопичувачі та футболки доступні в магазині "Безкоштовний продаж"

Якщо у вас є проблеми з підтримкою зв’язку, від’єднайте, а потім знову підключіться до цього посилання, встановивши прапорець
Авторизуйся автоматично під час наступних відвідувань.
- Додому
- »Форум
- »Розробка та програмування
- " [Вирішено] Яку мову вибрати ?
# 1 27.04.2009 о 14:13
[Вирішено] Яку мову вибрати ?
На даний момент я перебуваю на стажуванні (протягом 6 місяців), і мене змусять кодувати хорошу дрібницю (вам доведеться забути акценти, я не можу поставити їх за допомогою своєї німецької клавіатури!).
Моєму додатку доведеться сегментувати хороше велике тривимірне зображення (порядку 3-4 Гб), потім виконати статистичну обробку та оцінити функціонали Мінковського зображення. Потім потрібно буде витягти N зразків з хорошого великого зображення і повторити те саме, тобто (обробка статів + Мінковського).
Потім я повинен мати можливість запускати різні обчислення за допомогою багатопроцесорів.
Отже, а мова? C ++, Fortran або Python/Fortran ?
По правді кажучи, у мене є такі треки, як C ++ і Fortran, це йде швидше, або використовувати ITK (що далеко не є обов'язком, оскільки я хочу зробити "просте" порогове значення на чорно-білому). Я також боюся управління пітонічною пам’яттю (як я боюся, що в кінцевому підсумку я отримаю 1235x мого 3 Гб файлу в пам’яті! Навіть якщо машина має 16 Гб оперативної пам'яті, це може швидко пошкодити)
Дякую, що люб'язно пролили світло на мій такий темний ліхтар на цю тему (я за фахом не інформатик!)
Востаннє відредаговано Swaraj (Le 12/05/2009, о 10:58)
No2 27.04.2009 о 14:20
Re: [Вирішено] Яку мову вибрати ?
Загалом, коли ми виконуємо обробку зображень, замість цього ми використовуємо C.
Об'єктне програмування займає багато пам'яті порівняно з імперативним програмуванням .
Кожен екземпляр об'єкта переписує методи в пам'яті проти 1 одиничного запису для функції
Загалом у зображеннях ми, як правило, хочемо трохи зменшити обсяг даних, що обробляються, часто використовуваним рішенням є перехід на 256 кольорів на піксель і, отже, кодування їх на символі, а не на int. Зрештою це економить багато пам’яті.
[редагувати] Меа Кульпа, мені подобається цілком слушно вказаний просторовий гном, його слід читати імперативно і нефункціонально. Мене соромно і бентежить цей обмін термінами [/ редагувати]
Востаннє відредаговано tar_NeFyS (Le 28/04/2009, о 00:23)
# 3 27.04.2009 о 14:41
Re: [Вирішено] Яку мову вибрати ?
Якщо я все зрозумів правильно, в C, спочатку я викликаю своє зображення в пам'ять, а потім виконую обробку функціями, які мають для вказівників параметрів на зображення?
І я можу зробити щось у форматі mm на FORTRAN або Python + FORTRAN (те, що мені погано) ?
Рішення, яке часто використовується, полягає в тому, щоб перейти до 256 кольорів на піксель і, отже, кодувати їх на символі, а не на int
Це щось змінює на швидкість виконання ?
# 4 27.04.2009, о 15:19
Re: [Вирішено] Яку мову вибрати ?
Кожен екземпляр об'єкта переписує методи в пам'яті проти 1 одиничного запису функції
Це дійсно дуже швидко сказано, я хотів би знати, на чому ви базуєтесь, щоб сказати це. У будь-якому випадку не на хорошому компіляторі. Не тому, що на рівні коду методи та поля інкапсульовані, код буде продубльовано під час компіляції.
По-друге, C не є функціональною мовою. Він підтримує структуроване імперативне програмування, а не функціональне програмування. LISP, OCaml та Haskell - це приклади мов, що підтримують функціональне програмування.
Отже, а мова? C ++, Fortran або Python/Fortran ?
Очевидно, у вас будуть проблеми з продуктивністю, тому уникайте інтерпретованої мови: зі свого боку, я раджу не використовувати Python. Фортран, С або С ++ можуть підійти: я б зробив це на С ++, але перш за все використовую ту мову, яку ви найкраще знаєте.
Космічний гном
Востаннє відредаговано Le Farfadet Spatial (Ле 27.04.2009 о 15:20)
# 5 27.04.2009 о 15:52
Re: [Вирішено] Яку мову вибрати ?
У будь-якому випадку не на хорошому компіляторі. Не тому, що на рівні коду методи та поля інкапсульовані, код буде продубльований під час компіляції.
Чи можете ви навести приклад хорошого компілятора для C ++ та/або Fortran? В іншому випадку, про всяк випадок, чи можу я завантажити зображення в основну програму і використовувати вказівники на зображення як атрибути об’єкта ?
І ще одна остання порада, чи можу я використовувати ITK (бібліотеку шаблонів C ++) з кодом FORTRAN ?
Я визнаю, коливаючись між C ++ та Fortran раптово !
# 6 27.04.2009 о 20:26
Re: [Вирішено] Яку мову вибрати ?
Насправді це залежить від архітектури вашої багатопроцесорної машини та від управління пам'яттю: пам'ять, спільно використовувана між процесорами, чи ні.
мовами, що використовуються на багатопроцесорних машинах, часто є C з бібліотеками MPI/PVM або FORTRAN, а іноді і ада.
"- Сидячий інтелектуал заходить менше, ніж ходячий ривок".
Моріс Біро - таксі для Тобрука
Мішель Одіяр
# 7 27.04.2009 о 22:14
Re: [Вирішено] Яку мову вибрати ?
Ви можете навести мені приклад хорошого компілятора для C ++ та/або Fortran ?
Gcc чудово підходить для C ++ (для використання через G ++). Щодо Fortran, то на той час G95 виявився досить непоганим. Сказавши це, для Fortran я повинен сказати, що я, як правило, використовую компілятор, наданий конструктором машин. Що стосується архітектури IBM, я дуже оцінив Xlf. Що стосується архітектури Intel, Ifort настійно рекомендується.
мовами, що використовуються на багатопроцесорних машинах, часто є C з бібліотеками MPI/PVM або FORTRAN, а іноді і ада.
Це теж мій досвід. Однак ви можете робити речі, які добре працюють на C ++. Єдине, що вивчення C ++ займає набагато більше часу.
В іншому випадку, про всяк випадок, чи можу я завантажити зображення в основну програму і використовувати вказівники на зображення як атрибути об’єкта ?
Хо! Так. Ви можете робити ще більш дивні речі. Однак це не обов'язково негайно.
І ще одна остання порада, чи можу я використовувати ITK (бібліотеку шаблонів C ++) з кодом FORTRAN ?
Хм С ++, як і Fortran, може використовувати код із С, тому ви можете спільно використовувати бібліотеки між цими двома мовами через це. Тим не менш, із шаблонами це стане важко: нам доведеться бути хитрими.
Я визнаю, коливаючись між C ++ та Fortran раптово !
Давайте будемо зрозумілі: один Добре програміст на мовах C, C ++ та Fortran отримає подібні виступи з цими трьома мовами за аналогічний час розробки. Питання в тому, якою мовою вам найбільше комфортно і чи є у вас вже бібліотеки, які допоможуть вам, якщо так, якою мовою.
C ++ вимагає тривалого часу навчання, ніж інші мови: це мова, яка приховує свою складність. Ваше стажування не триватиме вічно, ви повинні бути максимально ефективними. Апріорі, я б скоріше порадив вам використовувати Fortran - через ваші запитання у мене складається враження, що це мова, яка вам найбільше знайома, --- але якщо у вас є бібліотеки на C ++, які дозволять вам для ефективного та чистого кодування останній вибір може бути найкращим.
Космічний гном
# 8 28.04.2009 о 00:46
Re: [Вирішено] Яку мову вибрати ?
Дійсно, в моїх публікаціях вислизнула помилка терміна, дякую, що ви це підкреслили.
Обов’язковою умовою є власне програмування процесора, воно працює так. OOP (об'єктно-орієнтоване програмування) використовується, оскільки він має набагато інтуїтивніший підхід до програміста. Це ще простіше створює архітектуру великих проектів.
Моє пояснення було навмисно спрощено для пояснювальних цілей. Справді, екземпляр об'єкта не копіює всі методи як цілі числа, але копіює певну кількість з них. Об'єкт явно більший за власний тип, що містить ту саму інформацію. Не дарма кодери та ядра операційних систем знаходяться на C.
Економія виконання. Об'єктно-орієнтований стиль по суті менш ефективний, ніж процедурний. У чисто об’єктно-орієнтованому стилі кожна процедура має бути (віртуальним) методом. Це вводить додаткові опосередкування через таблиці методів і запобігає оптимізаціям, таким як вбудовування. Традиційне рішення цієї проблеми (аналіз та компіляція цілих програм) порушує модульність і не застосовується до бібліотек.
@swaraj:
в зображенні/відео обмежуючим фактором часто є пам'ять. Коли вам доводиться починати писати у свопі, ви витрачаєте багато часу.
Розмір символу становить 1 байт, якщо ви поміщаєте його в знак без знака, у вас є значення від 0 до 255.
Int у класичному процесорі становить 4 байти, в беззнаковому - до 4 294 967 295
візьмемо класичне зображення 640 * 400 у форматі RGB або YCbCr. Вам потрібно 3 значення на піксель для кольорового кодування.
помістивши їх у беззнаковий знак: ви зберігаєте своє зображення у 640 * 400 * 3 * 1 = 768000 байт
в int: 640 * 400 * 3 * 4 = 3072000 байт.
Це безглуздо, але з силою пам’яті, яку він їсть, майже нічого не здобути, оскільки в YCbCr на танках ми вже маємо супер кольорову роздільну здатність. Це дуже класичний процес обробки зображень. Тоді, якщо ви просто хочете зробити порогове значення, ми зазвичай зберігаємо компонент Y (рівень сірого), щоб далі розділити розмір зображення на 3.
# 9 28.04.2009 о 09:30
Re: [Вирішено] Яку мову вибрати ?
Обов’язковою умовою є власне програмування процесора, воно працює так.
З одного боку, це вже насправді не так: процесори тепер суперскалярні, а архітектури масово паралельні. Цей паралелізм і ця піпелінізація на всіх поверхах віддаляють їх від імперативу. З іншого боку, вже давно, навіть якщо в C, навіть у Fortran, компілятори не задовольняються буквальним перекладом коду: тепер компілятори є оптимізаторами.
Дійсно, екземпляр об’єкта не копіює всі методи як цілі числа, але копіює певну кількість з них.
Знову ж, мені цікаво, на чому ви базуєтесь, кажучи це. Не про ваше джерело, яке говорить не про повторне копіювання, а про непряме, яке дуже різне. Крім того, ваше джерело не помиляється, але все одно потрібно загартувати, тому що технологія компіляторів значно еволюціонувала, зокрема щодо компіляції мов об'єктів, і тепер вона здатна багато оптимізувати. Нарешті, ваше джерело говорить про чистий об’єкт, або C ++ не є чистим об’єктом: він підтримує об’єктно-орієнтоване програмування, серед інших парадигм (а C ++ підтримує багато).
ядра операційних систем знаходяться в C.
Справді. Більше того, проект HURD відмовляється від ядра Маха, кодованого на мові C, для ядра L4, кодованого на мові C ++, саме тому, що останнє є більш гнучким та більш ефективним (http://magnux.free.fr/hurd/archi. html).
Космічний гном
# 10 28.04.2009 о 10:14
Re: [Вирішено] Яку мову вибрати ?
Апріорі, я б скоріше порадив вам використовувати Fortran - через ваші запитання у мене складається враження, що саме ця мова вам найбільш знайома,
Пропав! Я робив дуже мало Fortran, з іншого боку я робив C та Java! Моє запитання вийшло скоріше з культури, яка хоче, щоб вчені кодували у Fortran та інших на C ++, а також із "фону" людей, з якими я працюю.
В іншому випадку вибір на даний момент - C ++/ITK. Я проведу невеликий тест на зображенні jpg, щоб побачити, як це виглядає !
tar_NeFyS, у вас є якісь інші поради чи ресурс з обробки зображень? Можливо, це заслуговує на те, що я відкриваю другу тему.
# 11 28.04.2009 о 10:24
Re: [Вирішено] Яку мову вибрати ?
Привіт усім,
Коротше кажучи, я використовую пару Python/Fortran для цифрового моделювання. Це передбачає обробку великих обсягів даних (кілька десятків ГБ), переважно ітеративні обчислення, і досить важку пост-обробку (вилучення даних, відображення великих сіток).
Перш ніж йти далі, я вказую, що я взагалі не знаю C++.
Здавалося б, ви "боїтеся" Піхтона, я думаю, з міркувань ефективності (мова з інтерпретацією). Я використовую його щодня для трьох завдань:
1. Попередня обробка
2. Автоматизація розрахунків
3. Подальша обробка
Більшість обчислень проводяться підпрограмами Fortran, що викликаються безпосередньо в скриптах Python з F2PY (http://cens.ioc.ee/projects/f2py2e/).
На мій погляд (це точка зору вченого, а не комп’ютерного спеціаліста), великою силою Python є простота досягнення багатьох речей та велика кількість доступних модулів:
- Попередня обробка: таблиці, комплекси, ШПФ, статистика.: все це робиться дуже просто і безпосередньо з використанням різних модулів.
- Автоматизація: роблячи статистичні обчислення, я виконую тисячі однакових обчислень з різними наборами вхідних даних, і все це паралельно на двох машинах (2x4 процесори), включаючи один пульт. Завдяки різним модулям все це виконується кількома десятками рядків: розпаралелювання (pypi.python.org/pypi/pprocess), мережеві модулі дозволяють отримувати результати на моїй машині, надсилати нові дані та запускати обчислення на віддаленої машини. Все це автоматично. Ці розрахунки працюють ідеально вже більше 3 місяців 24/24.
- Пост-обробка: я використовую matplotlib (http://matplotlib.sourceforge.net/) та прив'язки VTK (http://www.imaging.robarts.ca/
Для зберігання моїх даних Python підтримує формат HDF5 (http://h5py.alfven.org/) та формат Matlab (зручний для обміну даними).
Все це говорить про те, що для вченого Python - справжнє задоволення у використанні. Цей список не є вичерпним, але ми вже охопили 90% загальних потреб науковця.
Я намагався деякий час тому кодувати все на Python: висновок ясний: Python явно не відповідає Fortran (і, звичайно, C ++, але я не знаю), коли мова йде про важкі обчислення. Розробники Python вирішили цю проблему, дозволивши прозоро викликати Fortran (ми імпортуємо підпрограми Fortran як прості модулі Python).
На закінчення я б сказав, що пара Python/Fortran є прекрасним вибором для вченого, якщо ми маємо на увазі, що Python не призначений для дуже інтенсивних обчислень, як Fortran не призначений для ненаукових завдань (мережі, дисплей, автоматизація).
Ще одна перевага Python/Fortran: дві мови вимагають небагато часу на навчання.
EDIT: для інформації, компілятори Fortran та C ++ Intel є безкоштовними в Linux для некомерційного використання (http://software.intel.com/en-us/article… velopment /)
Сподіваюся, це допоможе, гарного дня,
Востаннє відредаговано Tom_L (28.04.2009 о 10:28)