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

Сучасна програма, звичайно, працює не тільки в такому режимі. Більшість програм (особливо, орієнтованих на користувача), мають фронт-енд - вікно, в якому вона очікує дій - натискань на клавіші, введення даних або чого-небудь ще. Але ось те, що відбувається, коли ви натиснули на клавішу, зазвичай дуже схоже на дію програми класичної - виконується послідовність інструкцій. Потім на екрані з'являється результат.
Програмування - це, можна сказати, спроба систематизувати хаос. Ви знаєте, що повинно відбуватися на екрані, що має зберігатися, але ці поняття розпливчасті. А тепер ваша задача - перевести всі ці поняття на строгий формалізований мову програмного коду. Прикладне програмування може перетворюватися на рутинну роботу. Якщо ви вже сто разів виконували подібні завдання, то виконуєте її в сто перший на автоматі. Але наукове програмування скидається на мистецтво. Програмуючи для науки ви ніколи не впевнені в тому, що йдете правильним шляхом, що обрана модель працює краща за іншу або працює взагалі.
паралельне програмування
З відображенням результату на екрані все зрозуміло. Але ось дії, які програма повинна зробити "за кадром" іноді займають досить багато часу. Природне запитання для розробника - як прискорити виконання програми? Звичайно, можна порадити користувачеві використовувати більш швидкий комп'ютер, але це рішення дуже обмежена, та й швидкості комп'ютерів зараз несильно збільшуються. А ось що збільшується - це кількість ядер на комп'ютері.
Що дають ці ядра? Можливість незалежно запустити кілька програм так, щоб вони не заважали один одному. На чотириядерних комп'ютері ви можете одночасно запустити чотири лінійних програми, що вимагають повного завантаження, і продуктивність не впаде. Виникає питання: а чи можна так зробити, щоб одна програма стала працювати в чотири рази швидше?
Глобальна відповідь - немає. Не існує містичного способу змусити програму працювати швидше просто через те, що у процесора є кілька ядер. Чому? Та тому, що програма - це послідовність інструкцій. Комп'ютер не зможе зрозуміти, які з них потрібно виконувати одночасно.
Параллелизация програми - це завдання для розробника. І завдання зовсім нелегка, набагато за складністю перевершує програмування класичне. Для початку програміст повинен вирішити, які частини програми можуть виконуватися одночасно, яку схему паралелізації вибрати, як ці шматки будуть взаємодіяти.
Одна з найскладніших проблем при розробці паралельних програм - це налагодження. Справа в тому, що два рази запустивши програму в такому режимі, ми запросто можемо отримати різні результати. Просто шматки коду, що виконуються незалежно, можуть виконуватися з різною швидкістю, залежно від того, хто отримав більше часу від операційної системи. А через це різні події можуть наступати в різному порядку, приводячи до того, що проблема іноді виникає, а іноді - ні.
Якщо звичайне програмування - це створення жорсткої логіки, то паралельне - це управління стадом баранів, яке поводиться самим непередбачуваним чином. Все хитрі мислимі і немислимі ситуації обов'язково відбудуться. Доводиться і свій мозок розгалужувати в паралельні частини, і одночасно представляти, що може трапитися, якщо ця гілка зробить так, а ця - так.
Якщо ви збираєтеся зайнятися паралельним програмуванням, то рекомендую робити це на C, плюс встановити на свій комп'ютер Лінукс. Існують такі варіанти.
Так чи інакше, за паралельним програмуванням майбутнє. Розробники ресурсномістких програм безумовно повинні потурбуватися параллелизация своїх алгоритмів.