При написании кода openCL, как он работает на одноядерной машине без графического процессора?

Привет всем! В настоящее время я переношу трассировщик лучей с FORTRAN 77 на C для исследовательского проекта.

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

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

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


person Emanuel Ey    schedule 31.01.2011    source источник


Ответы (2)


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

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

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

Как этот код будет работать в одноядерной или 32-битной системе?

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

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

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

person tauran    schedule 31.01.2011

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

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

person grrussel    schedule 31.01.2011
comment
Звучит неплохо. Я проверю SmallPT-GPU более подробно, чтобы увидеть, как он работает - спасибо! - person Emanuel Ey; 31.01.2011