2015-08-16 5 views
1

Могут ли функции Boost (сортировать и т. Д.) Работать на массивах, которые уже находятся в буфере устройства?Буфер сортировки и буфер OpenCL

Например, У меня есть массив точек в vbo на устройстве, на котором я работаю с функцией ядра; Я бы хотел их отсортировать, но не каждый раз перетаскивать все данные взад и вперед.

Или это единственный вариант, чтобы написать полное ядро ​​сортировки?

+0

ли Повысьте Compute адрес это? – Jeff

+0

Я не уверен, вы можете объяснить? –

ответ

2

Вы можете создать boost::compute::buffer(cl_mem m);

Это займет владение буфера по умолчанию (увеличивающиеся реф). Поэтому вы можете просто позвонить clReleaseMemObject() после этого. (Или, если вы находитесь на C++, просто позвольте деструктору cl :: Buffer избавиться от ссылки).

Но настоящая проблема заключается в том, что оба контекста должны быть одинаковыми. Поэтому вам нужно установить контекст boost в тот же контекст, который вы используете вне повышения. Используя boost::compute::context(cl_context c);

Опять же, счетчик ref будет автоматически увеличиваться, поэтому вы можете продолжать использовать conetext одинаково и называть тот же clReleaseContext().

После что сделано, вы можете просто вызвать нормальные функции подталкивания выполнить сортировку, и т.д ..

+0

Звучит довольно много. Я пытаюсь найти обработанный пример в документальном фильме, но не повезло; можете ли вы указать мне на одного? –

+0

здесь выглядит хорошо? http://boostorg.github.io/compute/boost_compute/interop.html#boost_compute.interop.opengl –

+0

Буфер: http://boostorg.github.io/compute/boost/compute/buffer.html#idp50686528-bb Контекст: http://boostorg.github.io/compute/boost/compute/context.html#idp51913184-bb – DarkZeros

Смежные вопросы