OpenCL: это играет хорошо с OpenMP, я могу подключить другие языки к нему и т.д.

IDE не будет создавать артефакты jar автоматически на основе файлов build.gradle.

Если вы хотите настроить некоторые специфические аспекты артефактов из сценариев Gradle, рассмотрите возможность использования gradle-idea-ext-plugin . См. Артефакты DSL в разделе документации плагина.

10
задан 10 December 2008 в 14:50
поделиться

4 ответа

OpenMP и OpenCL отличны, но могут быть сделаны сотрудничать. Ни один из них не должен "повреждать" другой.

Ради аргумента давайте предположим, что существует компромисс между уменьшением изменений в существующей кодовой базе и производительностью или вычислительной мощностью. OMP "легок" в этом, можно применить его "волшебно", чтобы смущающе быть параллельными проблемам с быстрой прагмой или два.

OpenCL представляет совершенно новые высокоуровневые понятия вне типичных моделей потоков ОС. Khronos, вероятно, не хочет заявлять это вслух, но его происхождение находится в CUDA NVIDIA. Если Вы хотите видеть, как это работает сегодня, загрузите SDK CUDA и начните играть. Если у Вас нет GPU NVIDIA, не волнуйтесь, существует программная возможность эмулятора GPU. OpenCL является удобной абстракцией GPU, который должен относиться к центральным процессорам, DSPS, "акселераторам" (псевдоним Khronos для CellBE IBM и вероятно Larrabee Intel).

OpenCL, как предполагается, "не записан непосредственно в C99". Это упоминается как расширение C99, так как его синтаксис подобен/идентичен C99 с некоторыми новыми ключевыми словами. Вы не можете назвать libc (или никакая другая библиотека) от ядра.

Вы могли использовать обоих, но теоретически, OpenCL должен быть "лучше" (в котором это портативно к большему количеству вычислительных устройств), если Вы готовы портировать свой код. Вы не можете использовать прагмы OpenMP в ядре OpenCL.

См. также:

7
ответ дан 4 December 2019 в 01:03
поделиться
  1. ?
  2. ?
  3. OpenCL, как предполагается, записан непосредственно в C99 afaik? Существуют заголовочные файлы, доступные теперь для него во всяком случае.
  4. ?
0
ответ дан 4 December 2019 в 01:03
поделиться

По большей части OpenMP и OpenCL независимы друг от друга. Они - оба способы предоставить доступ разработчика к параллелизму на их платформе.

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

OpenCL является несколько другим зверем, у которого это - действительно сияния при работе со специальными аппаратными средствами сопроцессора. Это позволит Вам разгружать часть усиленного перемалывания чисел к GPU или некоторому другому сопроцессору как в Ячейке. Однако это было также создано с идеей, что это могло использоваться для использования других главных процессоров, как теперь распространены в многоядерных компьютерах. Я полагал бы, что эта функция вторична, и если бы это - все, для чего Вы намереваетесь использовать OpenCL, я не рекомендовал бы использовать OpenCL.

Тем не менее я предположил бы, что это будет несколько сложно, хотя определенно не невозможный заставить OpenMP и OpenCL сотрудничать в той же проблеме.

Первая вещь думать о - то, что работает, Вы даете OpenCL. Это определенно было бы случаем, где Вы только захотите, чтобы OpenCL работал на GPU/Co-processor... не на других главных процессорах/ядрах, так как OpenMP является alreay, использующим их. Это не было бы (не был должен), ошибки приложения причины для выполнения OpenCL и OpenMP на том же главном процессоре но это вызовет планирование нежелательного, где и OpenMP и OpenCL, выполненный медленнее, потому что они тратят хороший блок своей временной коммутации назад и четвертый друг между другом. Это также произошло бы при выполнении какого-либо другого голодного процессора процесса на том же ядре одновременно.

Другая большая вещь думать о состоит в том, как Вы собираетесь запланировать задачи, которые действительно работают на Сопроцессоре. Его истинные, что можно подать большую работу в один из современных GPU, но существуют много вещей думать о с конвейером и использованием памяти. То, что Вы не хотели бы происходить, должно иметь 8 различных потоков OpenMP каждая попытка отправить их собственную работу на Сопроцессор одновременно. Я рекомендовал бы иметь только один поток, который управляет всеми взаимодействиями с Сопроцессором, таким образом, он может удостовериться, что подал его работа эффективным способом.

Тем не менее я уверен, что существуют программы, которые имеют несколько типов задач, происходящих одновременно, где один тип задачи мог всегда сдаваться в аренду к Сопроцессору, и другой вид задачи мог быть обработан многоядерным главным процессором. Это было бы прекрасным примером времени для смешивания OpenMP и OpenCL.

Удачи!

4
ответ дан 4 December 2019 в 01:03
поделиться

Кстати, есть работа об openMp для gpgpu с использованием CUDA.

0
ответ дан 4 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: