Существуют ли известные проблемы / алгоритмы в научных вычислениях, которые нельзя ускорить распараллеливанием?


27

Существуют ли какие-либо известные проблемы / алгоритмы в научных вычислениях, которые нельзя ускорить распараллеливанием? Во время чтения книг по CUDA мне кажется, что большинство вещей может быть.


Двоичный поиск не может быть ускорен (значительно, т.е. фактором) даже при рассмотрении иерархии памяти.

Алгоритм Грамма Шмидта: en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process

3
@Anycorn Нет, левый классический Грам-Шмидт и правый модифицированный Грам-Шмидт хорошо работают параллельно. Есть много других параллельных алгоритмов QR, включая недавно популярный TSQR.
Джед Браун

@ Рафаэль: Я думаю, что возможно ускорить бинарный поиск с помощью фактора log (n), n = # процессоров. Вместо того, чтобы делить интервал поиска на части и проверять, где продолжить, разделите интервал на n частей. Возможно, есть более эффективные способы, я не знаю.
miracle173

Ответы:


32

CTCTCTTNClogT

Примеры

  • C=T
  • m×mT=N=O(m2)C=m=T
  • T=NC=logT
  • τ(0,1)dk=τ/ΔtτN1/dC=kT=kN=τN(d+1)/dP=T/C=NN1/d

Формальная сложность

NC=P



9

Начните с нарушения закона Амдала . В принципе все, что связано с большим количеством последовательных шагов, получит незначительную выгоду от параллелизма. Вот несколько примеров: синтаксический анализ, регулярное выражение и сжатие с наибольшим соотношением.

Кроме того, ключевым вопросом часто является узкое место в пропускной способности памяти. В частности, с большинством графических процессоров ваши теоретические провалы значительно превышают количество чисел с плавающей запятой, которые вы можете получить в своих ALU, поскольку такие алгоритмы с низкой арифметической интенсивностью (провалы / ошибки кэширования) будут тратить огромное количество времени на ожидание ОЗУ.

Наконец, всякий раз, когда фрагмент кода требует ветвления, маловероятно, что он получит хорошую производительность, поскольку логика ALU обычно превышает числовую.

В заключение, действительно простой пример того, что было бы трудно получить выигрыш в скорости от графического процессора, - это просто подсчет количества нулей в массиве целых чисел, так как вам, возможно, придется часто переходить, самое большее, выполнить одну операцию (увеличение на 1) в случае, если вы найдете ноль и сделаете хотя бы одну выборку памяти за операцию.

Примером отсутствия проблемы ветвления является вычисление вектора, который является кумулятивной суммой другого вектора. ([1,2,1] -> [1,3,4])

Я не знаю, считаются ли они «известными», но, безусловно, существует большое количество проблем, с которыми параллельные вычисления вам не помогут.


3
Приведенный вами «пример без ветвления» - это префикс-сумма, который на самом деле имеет хороший параллельный алгоритм: http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html Расчет числа нулей должен быть эффективным по аналогичным причинам. Хотя арифметической интенсивности нет иного пути ...
Макс Хатчинсон

Круто. Я исправлен в этом.
meawoppl

8

(Известный) метод быстрого марширования для решения уравнения Эйконала нельзя ускорить распараллеливанием. Существуют другие методы (например, быстрые методы развертки) для решения уравнения Эйконала, которые в большей степени поддаются распараллеливанию, но даже здесь потенциал (параллельного) ускорения ограничен.

Проблема с уравнением Эйконала состоит в том, что поток информации зависит от самого решения. Грубо говоря, информация течет вдоль характеристик (то есть световых лучей в оптике), но характеристики зависят от самого решения. И поток информации для дискретизированного уравнения Эйконала еще хуже, требующий дополнительных приближений (например, неявно присутствующих в методах быстрого свипирования), если требуется какое-либо параллельное ускорение.

Чтобы увидеть трудности с распараллеливанием, представьте себе хороший лабиринт, как в некоторых примерах на веб-странице Сетиана . Количество ячеек на кратчайшем пути через лабиринт (вероятно) является нижней границей для минимального числа шагов / итераций любого (параллельного) алгоритма, решающего соответствующую задачу.

(Я пишу «(вероятно) есть», потому что общеизвестно, что нижние границы трудно доказать и часто требуют некоторых разумных допущений относительно операций, используемых алгоритмом.)


Хороший пример, но я не верю вашей заявленной нижней границе. В частности, многосеточные методы могут быть использованы для решения уравнения эйконала. Как и в случае с многосеточной системой для высокочастотного Гельмгольца, основные проблемы заключаются в проектировании подходящих грубых пространств. В случае лабиринта стратегия агрегации графов должна быть эффективной, причем грубое представление должно определяться путем решения локальных (и, следовательно, независимых) задач для сегментов лабиринта.
Джед Браун

В целом, когда многосеточные методы работают хорошо, это означает, что степень детализации задачи ниже, чем дескритизация, и непропорциональный «объем правильного ответа» исходит из этапа решения задачи. Просто наблюдение, но нижняя граница для такого рода вещей хитрая!
meawoppl

@JedBrown С практической точки зрения многосетка для высокочастотного Гельмгольца является довольно сложной задачей, вопреки тому, что, по-видимому, подразумевает ваш комментарий. И использование multigrid для уравнения эйконала является «редкостью», если не сказать больше. Но я вижу ваше «теоретическое» возражение против предложенной нижней границы: смещения времени из различных точек внутри лабиринта могут быть вычислены до того, как станет известно время достижения этих точек, и добавлены параллельно после того, как недостающая информация станет доступной. Но на практике параллельные эйкональные решатели общего назначения счастливы, если они действительно приближаются к пределу.
Томас Климпел

Я не хотел подразумевать, что это было легко, грубые пространства волнового луча действительно очень технические. Но, я думаю, мы согласны с тем, что уже существует возможность параллелизма в открытых регионах, в то время как в узких «лабиринтах» (которые демонстрируют очень мало параллелизма стандартными методами) проблема масштабирования более поддается решению.
Джед Браун

@JedBrown Slide 39 из www2.ts.ctw.utwente.nl/venner/PRESENTATIONS/MSc_Verburg.pdf (из 2010) говорит о таких вещах, как «Расширить решатель с 2D на 3D» и «Адаптировать метод к задачам с сильно меняющимися волновыми числами». Таким образом, многосетка с волновыми лучами может быть многообещающей, но «еще не созревшая» представляется более подходящей, чем «очень техническая», для описания ее текущих проблем. И это на самом деле не высокочастотный решатель Гельмгольца (потому что это решатель "полной волны"). Существуют и другие «достаточно зрелые» многосеточные решатели Гельмгольца («полноволновые» решатели), но даже они все еще являются «активными исследованиями».
Томас Климпел

1

Другим классом проблем, которые трудно распараллелить на практике, являются проблемы, чувствительные к ошибкам округления, где числовая стабильность достигается сериализацией.

Рассмотрим, например, процесс Грама – Шмидта и его последовательную модификацию. Алгоритм работает с векторами, поэтому вы можете использовать параллельные векторные операции, но это плохо масштабируется. Если число векторов велико, а размер вектора невелик, использование классического параллельного метода Грамса-Шмидта и реортогонализация могут быть стабильными и более быстрыми, чем у одного модифицированного Грамма-Шмидта, хотя это требует выполнения в несколько раз больше работы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.