c++ - 推力位移 vector

标签 c++ cuda gpgpu thrust

我正在研究一个涉及在线(流)数据的项目。我想使用该数据的滑动窗口。例如,假设我想在我的 vector 中保存 10 个值。当值 11 出现时,我想删除值 1,将所有内容都移过来,然后将值 11 放在值 10 所在的位置。

长路会是这样的:

int n = 9;
thrust::device_vector<float> val;
val.resize(n+1,0);

// Shift left
for(int i=0; i != n-1; i++){
   val[i] = val[i+1];
}

// add the new value to the last position
val[n] = newValue;

有没有一种“快速”的方法可以用推力做到这一点?我正在查看的项目将有大约 500 个 vector 需要同时完成此操作。

谢谢!

最佳答案

正如我所说,Ring buffer是你需要的。不需要移到那里,只有一个计数器和一个固定大小的数组。

让我们想想如何处理 500 个环形缓冲区。

如果你想拥有 500(让它是 512)个滑动窗口并在 GPU 上处理它们,那么你可以将它们打包到一个大的 2D 纹理中,其中每一列都是同一时刻的样本数组。

如果您一次为每个 vector 获取新样本(我的意思是在一个处理步骤中为每 512 个缓冲区获取一个新样本),那么这个“环形纹理”(如圆柱体)只需要更新一次(在每一步上传新样本数组)你只需要一个计数器。

关于c++ - 推力位移 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300662/

相关文章:

c++ - 为什么 std::bind 和 boost::bind 在这个 Boost.Asio 教程中不能互换使用

c++ - 在同一全局内存位置并发写入

sdk - 从哪里下载 CUDA SDK

c++ - CUDA:在使用 cudaMallocPitch 分配的二维数组中查找数组索引

php - gnupg get_key 在 php 中失败

glsl - GPGPU - 有效的乒乓球技术?

c++ - 如何为 friend 函数中定义的类授予友元?

c++ - 在非操作系统 Arm 板上使用 'fopen'

c++ - 如何将位存储到用于文件输入/输出的巨大字符数组

cudaMemcpy 在简单复制期间抛出错误