У меня есть процедура обработки изображений, которая, я считаю, может быть очень параллельной очень быстро. Каждый пиксель должен иметь примерно 2k операций, выполненных на нем, таким образом, чтобы он не зависел от операций, выполняемых соседей, поэтому разделение работы на разные единицы довольно просто.Каков самый быстрый способ распараллеливать код?
Мой вопрос в том, что лучший способ приблизиться к этим изменениям, чтобы я получил быстрый ускорительный удар по доллару?
В идеале, библиотека/подход Я ищу должен отвечать следующим критериям:
- Еще быть около 5 лет. Что-то вроде варианта CUDA или ATI может быть заменено менее аппаратно-конкретным решением в недалеком будущем, поэтому мне хотелось бы что-то более надежное. Если мое впечатление от CUDA ошибочно, я приветствую исправление.
- Быть быстрым для реализации. Я уже написал этот код, и он работает в серийном режиме, хотя и очень медленно. В идеале я бы просто взял свой код и перекомпилировал его параллельно, но я думаю, что это может быть фантазия. Если я просто переписал его с использованием другой парадигмы (т. Е. Как шейдеры или что-то еще), то это тоже будет хорошо.
- Не требуется слишком много знаний об оборудовании. Я хотел бы иметь возможность не указывать количество потоков или операционных единиц, а скорее иметь что-то автоматически, чтобы все это было для меня на основе используемой машины.
- Быть работоспособным на дешевом оборудовании. Это может означать графическую карту стоимостью 150 долларов или что-то еще.
- Быть в Windows. Что-то вроде GCD может быть правильным, но клиентская база, на которую я нацеливаюсь, не скоро переключится на Mac или Linux. Обратите внимание, что это делает ответ на вопрос немного иным, чем this other question.
Какие библиотеки/подходы/языки следует искать? Я смотрел такие вещи, как OpenMP, CUDA, GCD и т. Д., Но мне интересно, есть ли другие вещи, которые мне не хватает.
Я сейчас склоняюсь к чему-то вроде шейдеров и opengl 2.0, но это не может быть правильный вызов, так как я не уверен, сколько доступа к памяти я могу получить таким образом - эти 2k операции требуют доступа ко всем соседние пиксели во многих отношениях.
У меня нет, я проверю это. – mmr