Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Frequently Asked Questions

Boost , Chapter 1. Boost.Compute , Chapter 1. Boost.Compute

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHome

How do I report a bug, issue, or feature request?

Пожалуйста, представьте вопрос на трекере проблем GitHub по адресуhttps://github.com/boostorg/compute/issues.

Where can I find more documentation?

Where is the best place to ask questions about the library?

Список рассылки по адресуhttps://groups.google.com/forum/#!forum/boost-compute.

What compute devices (e.g. GPUs) are supported?

Поддерживается любое устройство, которое реализует стандарт OpenCL. Это включает в себя графические процессоры от NVIDIA, AMD и Intel, а также процессоры от AMD и Intel и другие ускорители, такие как Xeon Phi.

Can you compare Boost.Compute to other GPGPU libraries such as Thrust, Bolt and VexCL?

Thrust реализует C++ STL-подобный API для GPU и CPU. Он построен с несколькими бэкэндами. NVIDIA GPU используют CUDA backend, а многоядерные CPU могут использовать Intel TBB или OpenMP backends. Однако тяга не будет работать с видеокартами AMD или другими менее известными ускорителями. Я чувствую себя лучше. Вычисления превосходны тем, что они используют нейтральную для поставщиков библиотеку OpenCL для обеспечения портативности всех типов вычислительных устройств.

Bolt - это специальная обертка AMD C++ вокруг API OpenCL, которая расширяет язык OpenCL на основе C99 для поддержки функций C++ (в первую очередь шаблонов). Он похож на библиотеку Thrust от NVIDIA и имеет тот же сбой, отсутствие переносимости.

VexCL - это библиотека линейной алгебры на основе экспрессии-темплы для OpenCL. Цели и объем немного отличаются от библиотеки Boost Compute. VexCL ближе по своей природе к библиотеке Эйгена. Компьютер ближе к стандартной библиотеке C++. Я не чувствую этого роста. Вычисления выполняют ту же роль, что и VexCL. Фактически, последние версии VexCL позволяют использовать Boost. Вычислите как один из бэкэндов, что делает взаимодействие между двумя библиотеками легким.

Also see this StackOverflow question: http://stackoverflow.com/questions/20154179/differences-between-vexcl-thrust-and-boost-compute

Why not write just write a new OpenCL back-end for Thrust?

Невозможно обеспечить тот же API, который Thrust ожидает для OpenCL. Основная причина заключается в том, что функции/функторы, передаваемые алгоритмам Thrust, являются фактическими компилируемыми функциями C++, тогда как для Boost. Вычислите эти объекты выражения формы, которые затем переводятся в код C99, который затем компилируется для OpenCL.

Why not target CUDA and/or support multiple back-ends?

CUDA и OpenCL — это две совершенно разные технологии. OpenCL работает путем компиляции кода C99 во время выполнения для генерации объектов ядра, которые затем могут быть выполнены на GPU. CUDA, с другой стороны, работает, компилируя свои ядра с помощью специального компилятора (nvcc), который затем производит двоичные файлы, которые могут выполняться на GPU.

OpenCL уже имеет несколько реализаций, которые позволяют использовать его на различных платформах (например, графические процессоры NVIDIA, процессоры Intel и т. Д.). Я чувствую, что это добавляет еще один уровень абстракции. Вычисления только усложняют и раздувают библиотеку.

Is it possible to use ordinary C++ functions/functors or C++11 lambdas with Boost.Compute?

К сожалению, нет. OpenCL полагается на наличие исходного кода C99, доступного во время выполнения, чтобы выполнять код на GPU. Таким образом, скомпилированные функции C++ или лямбды C++11 не могут быть просто переданы в среду OpenCL для выполнения на GPU.

Именно по этой причине я и написала книгу. Вычислите библиотеку лямбда. В основном он принимает выражения лямбда C++ (например, _1 * sqrt(_1) + 4) и преобразует их в фрагменты исходного кода C99 (например, & #8220; input[i] * sqrt(input[i]) + 4) & #8221;), которые затем передаются на Boost. Вычислите алгоритмы в стиле STL для выполнения. Хотя он не идеален, он позволяет пользователю писать код ближе к C++, который все еще может быть выполнен через OpenCL.

Также ознакомьтесь с макросом BOOST_COMPUTE_FUNCTION() Функции OpenCL определяются в соответствии с кодом C++. Пример можно найти в примере monte_carlo.

What is the command_queue argument that appears in all of the algorithms?

Очереди команд определяют контекст и устройство для выполнения алгоритма. Для всех стандартных алгоритмов параметр Command_queue является необязательным. Если не предусмотрено, для устройства GPU по умолчанию будет создана командная строка по умолчанию, и алгоритм будет выполняться там.

How can I print out the contents of a buffer/vector on the GPU?

Это можно легко скомпилировать с помощью общего алгоритма boost::compute::copy() вместе со std::ostream_iterator< T>Например:

std::cout << "vector: [ ";
boost::compute::copy(
    vector.begin(), vector.end(),
    std::ostream_iterator<int>(std::cout, ", "),
    queue
);
std::cout << "]" << std::endl;

Does Boost.Compute support zero-copy memory?

Нулевая копия памяти позволяет Ядра OpenCL напрямую работают на областях памяти хоста (при поддержке платформы).

Повышаю. Компьютер поддерживает память с нулевой копией несколькими способами. Низкоуровневый интерфейс обеспечивается выделением<buffer>объектов с флагом<CL_MEM_USE_HOST_PTR>. Интерфейс высокого уровня обеспечивается классом<mapped_view<T>>, который обеспечивает интерфейс типа std::vector в область памяти хоста и может использоваться непосредственно со всем Boost. Вычислить алгоритмы.

Is Boost.Compute thread-safe?

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

Для составления Boost. Вычислить в безвредном режиме определяют<BOOST_COMPUTE_THREAD_SAFE>перед включением любого из Boost. Вычислите заголовки. По умолчанию для этого потребуется связать ваше приложение / библиотеку с Boost. Библиотека ниток.

What applications/libraries use Boost.Compute?

Повышаю. Компьютер используется рядом библиотек и приложений с открытым исходным кодом, включая:

  • [ORIG_END] -->
  • [ORIG_END] -->
  • [ORIG_END] -->
  • [ORIG_END] -->

Если вы используете Boost. Вычислите в своем проекте и хотите, чтобы он был указан здесь, пожалуйста, отправьте электронное письмо Кайлу Лутцу (kyle.r.lutz@gmail.com).

How can I contribute?

Мы активно ищем дополнительных разработчиков C++ с опытом работы в GPGPU и параллельных вычислениях.

Пожалуйста, отправьте электронное письмо Кайлу Лутцу (kyle.r.lutz@gmail.com) для получения дополнительной информации.

Также смотрите руководствои проверьте список вопросов по адресу:https://github.com/boostorg/compute/issues.


PrevUpHome

Статья Frequently Asked Questions раздела Chapter 1. Boost.Compute Chapter 1. Boost.Compute может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Boost.Compute ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 18:47:32/0.0075769424438477/0