2011-12-28 6 views
3

私は、奇数と奇数にアレイを分割するためにスラストパーティション機能を使用しています。しかし、デバイスベクトルを表示しようとすると、ランダムな値が表示されます。エラーがどこにあるか教えてください。私はすべてが正しいと思っています。thrust :: device_referenceはprintfで使用できません。

#include<stdio.h> 
#include <thrust/host_vector.h> 
#include <thrust/device_vector.h> 
#include<thrust/partition.h> 

struct is_even 
    { 
     //const int toCom; 
     //is_even(int val):toCom(val){} 
    __device__ 
    bool operator()(const int &x) 
    { 
     return x%2; 
    } 
    }; 

void main(){ 


    thrust::host_vector<int> H(6); 
    for(int i =0 ; i<H.size();i++){ 
     H[i] = i+1; 
    } 
    thrust::device_vector<int> D = H; 
    thrust::partition(D.begin(),D.end(),is_even()); 
    for(int i =0 ;i< D.size();i++){ 
     printf("%d,",D[i]); 
    } 


    getchar(); 

} 

答えて

5

それはPODのタイプではないので、あなたはprintfの省略記号を通じてthrust::device_referenceD[i]のすなわち、結果)を送信することはできません。 documentationを参照してください。あなたのコードは、この効果のためのコンパイラの警告を生成します。

intにキャスト:

for(int i = 0; i < D.size(); ++i) 
{ 
    printf("%d,", (int) D[i]); 
} 
+0

のGitHubに移動するので:[リンク](https://thrust.github.io/doc/classthrust_1_1device__reference.html)。 –

関連する問題