【发布时间】:2013-05-30 03:58:28
【问题描述】:
我正在使用 CUDA 和 Thrust。我发现输入thrust::transform [plus/minus/divide] 很乏味,所以我只想重载一些简单的运算符。
如果我能做到,那就太棒了:
thrust::[host/device]_vector<float> host;
thrust::[host/device]_vector<float> otherHost;
thrust::[host/device]_vector<float> result = host + otherHost;
这是+ 的示例 sn-p:
template <typename T>
__host__ __device__ T& operator+(T &lhs, const T &rhs) {
thrust::transform(rhs.begin(), rhs.end(),
lhs.begin(), lhs.end(), thrust::plus<?>());
return lhs;
}
但是,thrust::plus<?> 没有正确过载,或者我没有正确地执行它......其中之一。 (如果为此重载简单运算符是一个坏主意,请解释原因)。最初,我认为我可以用 typename T::iterator 之类的东西重载 ? 占位符,但那不起作用。
我不确定如何使用向量的类型和向量迭代器的类型来重载+ 运算符。这有意义吗?
感谢您的帮助!
【问题讨论】:
-
<?>是什么意思? -
@Elazar 这意味着我不知道该放什么。也许某种类型的
T::iterator类型或其他东西。 -
你可以说“我不知道我应该把什么作为
thrust::plus的模板参数” -
我正在尝试通过来自
thrust::host_device的模板参数获取thrust::plus的模板参数。如果不清楚,请自行编辑问题。 -
您可能对 this library 感兴趣,它已经实现了您正在尝试的内容。
标签: c++ cuda operator-keyword nvidia nvcc