thrust::d evice_vector 未正确更新
thrust::device_vector is not updated properly
>我正在尝试将 CUDA 内核方法的结果保存在设备向量中 下面是我的内核代码,当我打印它时,数据将进入 int* out 和 int* outTwo 数组。
template <typename T>
struct KernelArray
{
T* _array;
int _size;
};
template <typename T>
KernelArray<T> convertToKernel(thrust::device_vector<T>& dVec)
{
KernelArray<T> kArray;
kArray._array = thrust::raw_pointer_cast(&dVec[0]);
kArray._size = (int)dVec.size();
return kArray;
}
__global__ void CompareVector(KernelArray<CollisionSet> inArrayA, KernelArray<CollisionSet> inArrayB,
int* out,int* outTwo, unsigned int numColVec)
{
unsigned int index = __umul24(blockIdx.x, blockDim.x) + threadIdx.x;
if (index >= numColVec) return;
for (int i = 0; i < numColVec; i++) {
if (inArrayA._array[index].one == inArrayB._array[i].one)
{
if (inArrayA._array[index].two == inArrayB._array[i].two) {
out[index]= inArrayA._array[i].one;
outTwo[index] = inArrayA._array[i].two;
printf("out %d, outTwo %d, index %dn", out[1], outTwo[1], index);
}
}
}
}
但是,它不会更新为device_vector
void SweepandPrune() {
device_vector<CollisionSet> ColVectorX, ColVectorY, ColVectorZ;
device_vector<int> one, two;
one.push_back(-1);
two.push_back(-1);
int* d_one = thrust::raw_pointer_cast(&one[0]);
int* d_two = thrust::raw_pointer_cast(&two[0]);
ColVectorX = ProjectVector(0);
ColVectorY = ProjectVector(1);
ColVectorZ = ProjectVector(2);
CompareVector << <1, 256>> > (convertToKernel(ColVectorX), convertToKernel(ColVectorY), d_one, d_two, ColVectorY.size());
}
当我打印device_vector尺寸时,它仍然是 1(因为我最初放入了 -1(
我已经搜索了这个 https://gist.github.com/docwhite/843f17e33e4c1f2b531a14a4bdfe90ec 我认为raw_pointer_cast应该有效。我错过了什么?
提前谢谢。
我想我得到了答案。 进入内核的向量需要特定于大小。 所以我在声明它时增加了device_vector的大小。 它有效。
这里没有魔法:推力矢量的大小不会改变,因为代码中没有你试图改变它们的地方。除了将 -1 推入它们之外,您不做任何可能改变它们大小的事情。所以显然它保持不变。
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 在运行时使用范围更新结果
- 用非原子更新原子变量,反之亦然