24 #ifndef ACLSUBVECTOR_H
25 #define ACLSUBVECTOR_H
32 #include "aslUtilities.h"
39 template <
typename T>
class Subvector:
public MemBlock
43 static const string prefix;
44 static unsigned int id;
46 shared_ptr<Array<T> > vector;
47 cl_buffer_region buffer_create_info;
51 unsigned int offset_);
53 virtual string str(
const KernelConfiguration & kernelConfig)
const;
55 virtual string getTypeSignature(
const KernelConfiguration & kernelConfig)
const;
58 std::vector<Element> & localDeclarations)
const;
68 unsigned int offset_):
74 queue = vector_->getQueue();
75 if ( (offset +
size) > vector->getSize() )
77 errorMessage(
"Subvector::Subvector() - (offset + size) > vector->getSize()");
81 buffer_create_info.origin = offset *
sizeof(T);
82 buffer_create_info.size =
size *
sizeof(T);
94 *buffer = vector->getBuffer().createSubBuffer(CL_MEM_READ_WRITE,
95 CL_BUFFER_CREATE_TYPE_REGION,
98 errorMessage(status,
"Subvector::Subvector() - createSubBuffer()");
110 template <
typename T>
string Subvector<T>::str(
const KernelConfiguration & kernelConfig)
const
112 return name +
"[" +
INDEX +
"]";
118 return "__global " + typeToStr<T>(kernelConfig.vectorWidth) +
" *" + name;
129 template <
typename T>
131 std::vector<Element> & localDeclarations)
const
136 template <
typename T>
140 status = kernel.
setArg(argumentIndex, *buffer);
146 #endif // ACLSUBVECTOR_H