Чи є відомі проблеми / алгоритми в наукових обчисленнях, які не можна прискорити паралелізацією? Мені здається, що читаючи книги про CUDA, це може бути більшість речей.
Чи є відомі проблеми / алгоритми в наукових обчисленнях, які не можна прискорити паралелізацією? Мені здається, що читаючи книги про CUDA, це може бути більшість речей.
Відповіді:
Центральне питання довжина критичного шляху по відношенню до загальної кількості обчислень Т . Якщо C пропорційний T , то паралелізм пропонує в кращому випадку постійну швидкість. Якщо C асимптотично менший, ніж T , виникає можливість для більшого паралелізму, оскільки розмір проблеми збільшується. Для алгоритмів, у яких T є поліном на вхідному розмірі N , найкращий випадок - C ∼ log T, оскільки дуже мало корисних величин можна обчислити за менший, ніж логарифмічний час.
Клас складності NC характеризує ті проблеми, які можна ефективно вирішити паралельно (тобто в полілогіармічний час). Невідомо, чи , але широко вважається хибним. Якщо це дійсно так, то P-завершення характеризує ті проблеми, які "є за своєю суттю послідовними" і не можуть бути суттєво усунені паралелізмом.
Почніть з обрізання закону Амдаля . В основному все, що має велику кількість серійних кроків, виграє від паралелізму незначно. Кілька прикладів включають розбір, регулярне вираження та стиснення більшості.
Крім цього, ключовим питанням часто є вузьке місце в пропускній здатності пам'яті. Зокрема, для більшості GPU ваші теоретичні флопи значно перевищують кількість цифр з плаваючою комою, які ви можете дістати до своїх ALU, оскільки такі алгоритми з низькою арифметичною інтенсивністю (flops / cache-miss) витратять величезну частину часу на очікування оперативної пам'яті.
Нарешті, будь-який час, коли фрагмент коду вимагає розгалуження, навряд чи отримає хорошу ефективність, оскільки типово логіка ALU зазвичай перевершує.
На закінчення, дійсно простий приклад того, що важко отримати приріст швидкості від GPU - це просто підрахунок кількості нулів у масиві цілих чисел, як, можливо, вам доведеться часто розгалужувати, щонайбільше виконувати 1 операцію (приріст на один) у випадку, якщо ви знайдете нуль, і зробіть принаймні один збір пам’яті за операцію.
Приклад без проблеми розгалуження - обчислити вектор, який є сукупною сумою іншого вектора. ([1,2,1] -> [1,3,4])
Я не знаю, чи вважаються вони "відомими", але, безумовно, існує велика кількість проблем, з якими паралельні обчислення вам не допоможуть.
(Відомий) швидкий маршируючий метод для розв’язання рівняння Ейконана не можна прискорити паралелізацією. Існують і інші методи (наприклад, швидкі розгортки) для вирішення рівняння Ейконала, які піддаються паралелізації, але навіть тут потенціал для (паралельного) прискорення обмежений.
Проблема рівняння Ейконала полягає в тому, що потік інформації залежить від самого рішення. Вкрай кажучи, інформація протікає за характеристиками (тобто світловими променями в оптиці), але характеристики залежать від самого рішення. А потік інформації для розрізненого рівняння Ейконала ще гірший, вимагає додаткових наближень (як неявно присутні в методах швидкого розгортання), якщо бажане паралельне прискорення.
Щоб побачити труднощі паралелізації, уявіть собі приємний лабіринт, як у деяких прикладах на веб-сторінці Сетьяна . Кількість комірок на найкоротшому шляху через лабіринт (ймовірно) є нижньою межею для мінімальної кількості кроків / ітерацій будь-якого (паралельного) алгоритму, що вирішує відповідну задачу.
(Я пишу "(ймовірно) є", тому що нижчі межі, як відомо, важко довести, і часто вимагають певних розумних припущень щодо операцій, які використовуються алгоритмом.)
Іншим класом проблем, які важко паралелізувати на практиці, є проблеми, чутливі до помилок округлення, де числова стійкість досягається серіалізацією.
Розглянемо для прикладу процес Грама - Шмідта та його послідовну модифікацію. Алгоритм працює з векторами, тому ви можете використовувати паралельні векторні операції, але це не дуже масштабує. Якщо кількість векторів велика, а розмір вектора невеликий, використовуючи паралельну класичну Грам-Шмідта, реортогоналізація може бути стабільною та швидшою, ніж одномодифікований Грам-Шмідт, хоча це передбачає виконання в кілька разів більше роботи.