Класс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);
Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.