- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是新使用推力库。我有我的 CUDA C 代码,它使用全局 2D 数组。我在代码中使用内核函数初始化它。
我必须知道是否可以使用 thrust::device_vector
或 thrust::fill
来初始化和填充二维数组。
例如:
// initialize 1D array with ten numbers in a device_vector
thrust::device_vector<int> D(10);
可以给..
thrust::device_vector<int> D[5][10];
如果可能的话,我将如何使用 thrust::fill
函数。
我的目标是使用推力库优化代码。
最佳答案
在 STL 和推力中,vector是数据元素的容器,遵循严格的线性序列,因此它本质上基本上是一维的。简而言之,这些数据元素可以是普通类型,甚至可以是结构体和对象,但不能是其他 vector (与 STL 不同)。
您可以创建一个 vector 数组,但通常需要对数组中的每个 vector 逐一进行推力操作。
关于语法,你不能这样做:
thrust::device_vector D[5][10];
你可以这样做:
thrust::device_vector<int> D[5][10];
但是,这将创建一个二维 vector 数组,我认为这不是您想要的。
在许多情况下,二维数组可以被“展平”以像一维数组一样进行处理,并且在不了解更多关于您的情况的情况下,这就是我建议调查的内容。例如,如果您可以使用指针索引将二维数组视为一维数组,那么您可以使用单个推力::fill调用来填充整个数组。
我还建议熟悉推力 quick start guide .
这里是一个工作示例,显示了主机上具有基本扁平化的 2D 数组:
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/sequence.h>
#define H 5
#define W 10
__global__ void kernel(int *data, int row, int col) {
printf("Element (%d, %d) = %d\n", row, col, data[(row*W)+col]);
}
int main(void)
{
int h[H][W];
thrust::device_vector<int> d(H*W);
thrust::copy(&(h[0][0]), &(h[H-1][W-1]), d.begin());
thrust::sequence(d.begin(), d.end());
kernel<<<1,1>>>(thrust::raw_pointer_cast(d.data()), 2, 3);
cudaDeviceSynchronize();
return 0;
}
关于c - 是否可以在 CUDA 中使用推力库将推力::device_vector 和推力::fill 用于 2D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15682254/
我编写了一些以这种方式初始化成员指针的仿函数: struct A { A() { thust::device_vector d_vect(3); d_vect[
当我在main函数中使用thrust::device_vector时,可以正确的传递给内核函数,代码如下: thrust::device_vector device_a(2); thrust::h
我有一个需要在设备上多次引用的浮点数组,所以我相信存储它的最佳位置是 __ 常量 __ 内存(使用 this reference )。数组(或向量)在初始化时需要在运行时写入一次,但由多个不同的函数读
有没有办法确定 thrust::device_vector 的最大尺寸?您可以安全地分配? 最佳答案 据我所知,没有一种直接的方法。我通常的做法是做这样的事情: const size_t MB = 1
我在正确创建仿函数以访问设备 vector 时遇到了一些问题。基本上,我有两个我想在仿函数中使用的设备 vector 。在 for_each 期间调用仿函数。 这是我的仿函数: struct like
我正在尝试使用 thrust::transform从 device_vector 的每个元素中递减一个常数值.如您所见,最后一行是不完整的。我正在尝试从所有元素中减少常量 fLowestVal但不知
这个问题在这里已经有了答案: is there a better and a faster way to copy from CPU memory to GPU using thrust? (1 个回
推力::device_vector 值 推力::设备向量键; 初始化后,keys 包含一些等于 -1 的元素。我想删除键中的元素和值的相同位置。 但是不知道水货怎么处理呢? 最佳答案 可能有很多方法可
为什么下面的代码在主程序结束时会崩溃? #include thrust::device_vector v; int main(){ v.resize(1000); return 0;
我使用推力设备向量分配了一些空间,如下所示: thrust::device_vector s(10000000000); 我如何明确和正确地释放这个空间? 最佳答案 device_vector当超出范
我正在编写一个程序来计算三角形网格数据的许多属性。其中一些属性,我想使用 thrust::方法计算,其他属性需要使用 CUDA 内核中的原始内存指针来计算。 为了将数据传输到 GPU,我在 trans
我有一个推特device_vector。我想将其转换为原始指针,以便可以将其传递给内核。我该怎么办? thrust::device_vector dv(10); //CAST TO RAW kerne
我了解如何从 vector 到原始指针,但我跳过了如何向后的节拍。 // our host vector thrust::host_vector hVec; // pretend we put dat
我有一个 vector 的 vector : thrust::device_vector weights_; 这是一个连续的内存量,其中每 w 个项目,表示一个 vector 。 在我的一个函数中,我
我创建了一个结构来构造一个表,其中的列是 thrust::device_vectors 并且 gcc 提示我没有传递模板参数。 struct table { thrust::device_ve
这个问题在这里已经有了答案: Thrust inside user written kernels (4 个答案) 关闭 6 年前。 我是 CUDA 的新手,正在尝试学习用法。有人可以帮忙吗?我在主
我有一个定义为 typedef InitialState float[12] 的数据类型.我有一个包含由 std::vector h_initials 定义的几个初始状态的 vector . 我把它做
我目前正在将代码从本地 C++ 传输到 CUDA,同时使用 thrust::device_vector。现在有一个计算梯度的函数,我不仅需要访问当前元素,还需要访问周围的元素。在原始代码中我写了以下内
我正在尝试传递结构的device_vector struct point { unsigned int x; unsigned int y; } 以下列方式传递给一个函数: void
似乎在创建新的推力 vector 时默认情况下所有元素都为 0 - 我只是想确认情况总是如此。 如果是这样,是否还有一种方法可以绕过负责此行为的构造函数以提高速度(因为对于某些 vector 我不需要
我是一名优秀的程序员,十分优秀!