void GPU::merge(uint32_t *input, size *positions, size n) const{ cl::make_kernel<cl::Buffer&,cl::Buffer&,cl::Buffer&> merge(this->kmerge); cl::make_kernel<cl::Buffer&,size,size> updatePositions(this->kupdatePositions); cl::CommandQueue queue(context,dev); size len=positions[n]; cl::Buffer inputBuffer(context, CL_MEM_READ_WRITE, sizeof(uint32_t)*len); queue.enqueueWriteBuffer(inputBuffer, false, 0, sizeof(uint32_t)*len, input); cl::Buffer outputBuffer(context, CL_MEM_READ_WRITE, sizeof(uint32_t)*len); cl::Buffer positionsBuffer(context, CL_MEM_READ_WRITE, sizeof(size)*(n+1)); queue.enqueueWriteBuffer(positionsBuffer, false, 0, (n+1)*sizeof(size), positions); if(n%2) queue.enqueueCopyBuffer(inputBuffer, outputBuffer, sizeof(uint32_t)*positions[n-1],sizeof(uint32_t)*positions[n-1], (positions[n]-positions[n-1])*sizeof(uint32_t)); //kopiowanie ostatniego fragmentu, który przez pewien czas mo
C++ updatePreview函数代码示例
C++ updatePos函数代码示例