Я думаю, что это хороший вопрос, и я тоже пытаюсь выработать его для собственного исследования.
В настоящее время существуют серьезные ограничения в отношении возможностей графических процессоров, поскольку они требуют, чтобы отдельные потоки выполняли один и тот же код на разных наборах данных, т. Е. Проблема / алгоритм должны быть «параллельными данным». Очевидно, что проблемы параллельности данных включают симуляции Монте-Карло (где много симуляций MC выполняются параллельно), обработку изображений и менее очевидные симуляции молекулярной динамики. Числовая интеграция (Монте-Карло или другое) - это еще одно научное приложение, которое можно легко перенести на работу на графическом процессоре.
Другое основное ограничение заключается в том, что объем памяти на поток очень ограничен, и поэтому для эффективного выполнения на графическом процессоре алгоритм должен иметь высокую арифметическую интенсивность. Необходимым, но не достаточным условием для того, чтобы алгоритм был кандидатом для работы на графическом процессоре, является то, что на процессоре алгоритм должен быть сильно привязан к процессору, а не к памяти.
Я считаю, что с течением времени все больше и больше проблем будут решаться, так что их можно будет решить с помощью этой парадигмы только потому, что можно добиться такого большого прироста производительности, но, очевидно, данные о низком зависании параллельные проблемы. Массовое многоядерное программирование, на мой взгляд, будет становиться все более важным и распространенным в научных кругах в течение следующего десятилетия.
Я немного поигрался с этим и сумел перенести проблему с возвратом в подходящий формат для выполнения на GPU (используя CUDA). К вашему сведению, я описываю это в разговоре: http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf