0
デバイスデータ構造への参照を状態として格納するThrustを使用してデバイスファンクタを作成しようとしています。ファンクタはthrust::transform()
と友達に渡されます。変換中に、さまざまな方法でoctets
のビットにアクセスしているこれを行うで終了目標の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;
}
ワン:問題は、私はファンクタのreturn
声明で、デバイスコードからホスト機能を呼び出すことについて、エラーを取得していますされます例えば、3番目のビットの5番目のセット、4番目のビットの10番目のセットなどを取得するなど、私はファンクタを動作させることができます。
これが原因ファンクタ内device_vectorのこれまでの作業のチャンスを持っていません。それがエラーの原因であり、修正する方法はありません。 – talonmies
答えを含む「編集1:」であなたの質問を修正するのではなく、単に回答を投稿するのはなぜですか?または、好きな場合は、これを、デバイスコードで推力ベクトルを直接使用することを頼む他の推力質問の重複としてマークすることができます。 –
この修正を行い、質問に回答します。 1つの質問がデバイスコードでの推力ベクトルの作成とデバイスコードでの推力ベクトルの作成について質問していたので、重複としては見えませんでした。 –