由于我仍然习惯于Matlab和Python风格的编程环境,因此我在CUDA中使用了这种向量方法。我能够从设备矢量的主机端提取数据,但是现在我不确定如何访问该数据,例如进行打印。我尝试使用迭代器,但收到错误消息,指出device_reference没有成员“ begin”或“ end”。
((将VS 2010与CUDA Toolkit 5.0一起使用)
thrust::device_vector<thrust::device_vector<int>> kmers;
//Do some stuff here to fill kmers
//
//
thrust::device_vector<thrust::device_vector<int>>::iterator ii;
thrust::device_vector<int>::iterator i;
for (ii = kmers.begin();ii!=kmers.end();++ii)
{
for (i = (*ii).begin(); i != (*ii).end(); i++){
std::cout << (*i) << "\n";
}
}
有什么建议吗?编辑:我知道推力容器当前不能直接传递到CUDA内核。还有其他允许我这样做的图书馆/容器吗?
使用它作为示例代码。
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
using namespace std;
void spausdintiRez(thrust::host_vector<int> rezultatai) {
std::cout << rezultatai[0] << std::endl;
}
void sudetis(thrust::device_vector<int> d,thrust::device_vector<int> &rez)
{
for (int i = 0; i < 10; i++)
{
for(int j=0; j<10;j++)
{
rez[0]+=d[i+j];
}
}
}
int main()
{
thrust::host_vector<int> duom(100);
thrust::host_vector<int> rezultatai;
thrust::device_vector<int> d;
thrust::device_vector<int> rez(1);
for(int i=0;i<100;i++)
duom[i]=i;
d = duom;
sudetis(d, rez);
rezultatai = rez;
spausdintiRez(rezultatai);
return 0;
}