0
我试图用Thrust创建设备仿函数,它将存储对设备数据结构的引用作为它们的状态。函子然后会被传入thrust::transform()
和朋友。问题是我收到关于在仿函数的return
声明呼吁从设备码中的主机功能错误:用Thrust创建和使用设备仿函数
// Compile with:
// nvcc --std=c++11 device_functor.cu -o device_functor
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/complex.h>
#include <iostream>
#include <iomanip>
struct my_functor {
my_functor(thrust::device_vector<unsigned char> &octets_) :
octets(octets_) {};
__device__
unsigned char operator()(int idx) const {
return octets[idx];
}
private:
thrust::device_vector<unsigned char> &octets;
};
int main() {
thrust::device_vector<unsigned char> d_octets (4);
my_functor foo(d_octets);
d_octets[0] = 0x00;
d_octets[1] = 0x01;
d_octets[2] = 0x02;
d_octets[3] = 0x03;
std::cout << "0x" << std::hex << std::setfill('0') << std::setw(2) << static_cast <int> (foo(2)) << std::endl;
return 0;
}
其中一个在做这个正在访问该位的最终目标在octets
以各种方式的转变,例如抓住第三组三位,第十组四位等,这一切都很容易,一旦我可以得到函子的工作。
这有根本不可能工作,因为函子内device_vector的机会。这是错误的根源,并且没有办法解决它。 – talonmies
为什么不只是发布一个答案,而不是用包含答案的“编辑1:”修改你的问题?或者,如果您愿意,我可以将其标记为其他推力问题的重复,询问如何直接在设备代码中使用推力矢量。 –
将做出此修复并标记回答的问题。我没有把它看作是一个重复的东西,因为有一个问题是关于在设备代码中创建推力矢量,而另一个则是在设备代码中使用它们。 –