Когда он пишет код openCL, как он работает на одноядерном компьютере без графического процессора? - PullRequest
4 голосов
/ 31 января 2011

Привет всем, я сейчас портирую raytracer с FORTRAN 77 на C. Для исследовательского проекта.

После того, как все основные компоненты перенесены, возникает вопрос, как нам перейти к распараллеливанию.
В лаборатории,У меня есть доступ к паре разных машин Opteron, с 2–8 ядрами, но без графических процессоров (на данный момент).Мы используем 64b gentoo.

Было бы (очень) желательно иметь версию GPGPU, но с одним программистом в проекте поддержание отдельных версий не-GPU и GPU не вариант.
Кроме того,код будет под лицензией GPL, и мы бы хотели, чтобы его использовали другие, у которых может быть совершенно разное оборудование.

Таким образом, вся программа должна легко компилироваться / выполняться без использования графического процессора или дажемногоядерная система.
OpenCl кажется хорошим вариантом, поскольку его можно запускать на компьютерах без графических процессоров, но как этот код будет работать в одноядерной или 32-битной системе?
Можно ли написать код втаким образом, что его можно легко скомпилировать без openCL?

Ответы [ 2 ]

8 голосов
/ 31 января 2011

В настоящее время существует четыре основных реализации OpenCL: AMD, nVidia (Cuda), Apple, Intel, и, скорее всего, скоро будет: Реализация OpenCL .OpenCL не является языком, специально предназначенным для вычислений на GPU, он был разработан как универсальный язык вычислений для разнородных устройств.Например, вы можете использовать реализацию AMD даже без графического процессора и любого другого процессора (конечно, x86).

Можно ли написать код таким образом, чтобы его можно было легко скомпилироватьбез openCL?

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

Как этот код будет работать на одноядерном или 32bsystem?

Так хорошо, как любая собственная программа будет работать.У вас есть доступ к SIMD через векторные типы OpenCL.И вы можете справиться с многопоточностью через конфигурацию рабочей группы.

Но не ожидайте, что вы сможете добиться 100% производительности на каждом устройстве с одинаковыми настройками ядра / рабочей группы.Существует множество возможностей настройки устройства ( Учебное пособие по ЦПУ OpenCL для начала ).

Я бы сказал, пойти на OpenCL.Он предоставляет больше возможностей для вашего приложения и не зависит от платформы.

2 голосов
/ 31 января 2011

Вполне может оказаться целесообразным использовать общность OpenCL и C99 и использовать препроцессор для обработки различий. Тогда у вас будет кодовая база C99 и OpenCL в одном. Такой подход используется в SmallPT-GPU

Однако реализации OpenCL для ЦП должны быть почти такими же хорошими, как и любой переносимый скалярный код C, и лучше, если вы используете векторные типы OpenCL, чтобы разрешить переносную SIMD.

...