Классvectorхранит динамический массив значений. Внутренне данные хранятся в буферном объекте OpenCL.
Векторный класс является предпочтительным контейнером для хранения и доступа к данным на вычислительном устройстве. В большинстве случаев его следует использовать вместо непосредственного обращения с буферными объектами. Если требуется буфер для удаления, к нему можно получить доступ с помощью метода get_buffer().
Внутреннее хранилище выделяется в определенном контексте OpenCL, который передается в качестве аргумента конструктору при создании вектора.
Например, для создания вектора на устройстве, содержащем пространство для десяти<int>значений:
Выделение и передача данных также могут быть выполнены в один этап:
// values on the hostintdata[]={1,2,3,4};// create a vector of size four and copy the values from databoost::compute::vector<int>vec(data,data+4,queue);
Boost.Compute скачать<vector>класс обеспечивает STL-подобный API и моделируется после класса<std::vector>из стандартной библиотеки C++. Он может быть использован с любым из STL-подобных алгоритмов, предоставляемых Boost.<copy()>,<transform()>и<sort()>(среди многих других).
Например:
// a vector on a compute deviceboost::compute::vector<float>vec=...// copy data to the vector from a host std:vectorboost::compute::copy(host_vec.begin(),host_vec.end(),vec.begin(),queue);// copy data from the vector to a host std::vectorboost::compute::copy(vec.begin(),vec.end(),host_vec.begin(),queue);// sort the values in the vectorboost::compute::sort(vec.begin(),vec.end(),queue);// calculate the sum of the values in the vector (also see reduce())floatsum=boost::compute::accumulate(vec.begin(),vec.end(),0,queue);// reverse the values in the vectorboost::compute::reverse(vec.begin(),vec.end(),queue);// fill the vector with onesboost::compute::fill(vec.begin(),vec.end(),1,queue);
Creates a vector with space for count elements in context.
Note that unlike std::vector's constructor, this will not initialize the values in the container. Either call the vector constructor which takes a value to initialize with or use the fill() algorithm to set the initial values.
Creates a vector with space for count elements and sets each equal to value.
Например:
// creates a vector with four values set to nine (e.g. [9, 9, 9, 9]).boost::compute::vector<int>vec(4,9,queue);
Составляет вектор с пространством для значений в диапазоне [first, last) и копирует их в вектор с queue.
Например:
// values on the hostintdata[]={1,2,3,4};// create a vector of size four and copy the values from databoost::compute::vector<int>vec(data,data+4,queue);
Например:
// values on the hostintdata[]={1,2,3,4};// create a vector of size four and copy the values from databoost::compute::vector<int>vec(data,data+4,queue);
Вставляетvalueв конце вектора (размер, если необходимо).
Обратите внимание, что вызовpush_back()для вставки значений данных по одному за раз неэффективен, поскольку при выполнении передачи данных на устройство имеются нетривиальные накладные расходы. Обычно лучше хранить набор значений на хосте (например, вstd::vector), а затем передавать их оптом с помощью методаinsert()или алгоритма копирования ().
voidpush_back(constT&value);
Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.
Статья Class template vector раздела Chapter 1. Boost.Compute Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.