我使用推力的一個項目,它似乎乘設備向量是缺少一些基本的功能: -通過不斷
在C++中,由一個常數乘以一個向量的最簡單方法是使用std::transform
和std::bind1st
像所以:
std::transform(vec.begin(), vec.end(), vec.begin(),
std::bind1st(std::multiplies<double>(),myConst));
但顯然bind1st
和bind2nd
不與推力工作。
那麼,有沒有一種簡單的方法來乘以一個常數推力矢量?
PS:目前,我用我自己的仿函數做乘法像這樣:
thrust::for_each(vec.begin(), vec.end(), multiplyByConstant<double>(myConst))
其中
template< typename T >
struct multiplyByConstant
{
const T constant;
multiplyByConstant(T _constant) : constant(_constant) {}
__host__ __device__
void operator()(T& VecElem) const
{
VecElem=VecElem*constant;
}
};
但寫一個函子做一個簡單的乘法,似乎有點小題大做。肯定有一個更簡單的方法。
並非是一個CUDA傢伙(和嫉妒的*所有*您抽出時間到信封踢屁股平臺),被lamdas支持與工具鏈? (並且如果它是一個天真的問題,但它似乎是天作之合)。 – WhozCraig
Thrust是基於__標準模板庫的實現。這並不奇怪,它不支持一切。請注意,bind1st等已被棄用,並被綁定取代。 –