Я работаю в области медицинской визуализации и обработки изображений.
Мы работаем с несколькими ядрами практически так же, как мы работали с одноядерными - у нас уже есть несколько потоков в приложениях, которые мы пишем, чтобы иметь отзывчивый пользовательский интерфейс.
Однако, поскольку теперь мы можем, мы внимательно следим за реализацией большинства наших операций по обработке изображений в CUDA или OpenMP. Компилятор Intel предоставляет множество хороших примеров кода для OpenMP и является гораздо более зрелым продуктом, чем CUDA, и предоставляет гораздо большую установленную базу, поэтому мы, вероятно, собираемся пойти на это.
То, что мы склонны делать для дорогих (т. Е. Более, чем за секунду) операций, - это раскошелиться на эту операцию, если мы можем. Таким образом, основной интерфейс остается отзывчивым. Если мы не можем или просто слишком неудобно или медленно перемещать такой объем памяти, операция все еще находится в потоке, а затем эта операция сама может порождать несколько потоков.
Ключ для нас заключается в том, чтобы не допустить узких мест параллелизма. Мы разрабатываем в .NET, что означает, что обновления пользовательского интерфейса должны выполняться из вызова Invoke для пользовательского интерфейса, чтобы основной поток обновлял пользовательский интерфейс.
Может быть, я ленивый, но на самом деле, я не хочу тратить слишком много времени на выяснение многих вещей, когда речь идет о распараллеливании таких вещей, как инверсия матриц и тому подобное. Многие действительно умные люди потратили много времени на то, чтобы сделать это быстро, как закись, и я просто хочу взять то, что они сделали, и назвать это. Что-то вроде CUDA имеет интересный интерфейс для обработки изображений (конечно, именно для этого он и предназначен), но он все еще слишком незрелый для такого вида программирования по принципу «включай и работай». Если у меня или другого разработчика будет много свободного времени, мы можем попробовать. Поэтому вместо этого мы просто воспользуемся OpenMP, чтобы ускорить нашу обработку (и это определенно входит в план развития на следующие несколько месяцев).