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

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

Деякі з ключових проблем паралельних обчислень включають:

  • Балансування навантаження: у паралельних обчисленнях завдання розподіляються між кількома процесорами або комп’ютерами. …
  • Залежності даних: багато алгоритмів і обчислень мають залежності між різними елементами даних або завданнями.

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

Рішення паралельних обчислень приймає до тих пір, як його послідовні завдання плюс найдовші з його паралельних завдань. Прискорення паралельного рішення вимірюється часом, який знадобився для послідовного виконання завдання, поділеним на час, який знадобився для виконання завдання, виконаного паралельно.

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