OpenCL: универсальность и высокая производительность или не так все просто?

На Хабре уже были статьи об OpenCL, CUDA и GPGPU со сравнениями производительности, базовыми понятиями и примерами, поэтому рассказывать об основах и принципах работы я тут не буду, даже код не покажу. Но я хочу описать в чем заключаются реальные трудности при использовании GPU (про ограничения и их последствия), почему нельзя сравнивать производительность CPU и GPU, а также про то насколько “универсален” OpenCL на самом деле.

Предисловие

Мое знакомство с GPGPU началось 1,5 года назад и продолжается до сих пор в виде активной разработки исследовательского проекта. Тогда у меня был выбор: OpenCL или CUDA, разницы в выборе особо, на тот момент, не было, но в университете начали читать курс про OpenCL, так я его и выбрал. Сразу скажу, что писал я только для карт с архитектурой от NVidia, поэтому буду говорить про нее (чаще всего о Fermi).

В этом месте был большой абзац об истории и состоянии дел в области расчетов на GPU, но после описания проблем пост оказался слишком длинным и абзац был жестоко урезан (есть надежда, что он вернется в следующей части). Поэтому перейдем сразу к тому, почему портированные на GPU алгоритмы далеко не всегда работают быстро, т.е. дают на практике 0.5Х-10Х прироста производительности вместо обещанных 20Х-100Х относительно CPU (иначе бы уже каждое приложение его использовало).

Читать

Настройка Nvidia CUDA 2.3 на Ubuntu 9.04

Технология CUDA позволяет производить вычисления на видеокарте. Для некоторых задач скорость вычислений ускоряется в десятки раз. CUDA 2.3 официально поддерживает Ubuntu 9.04 . Но тем не менее есть ньюансы. Предлагаю ознакомиться с моим успешным опытом.

Читать