我在CUDA中使用这种向量方法向量,因为我仍习惯于Matlab和Python风格的编程环境。我能够从设备向量中的主机端提取数据,但现在我不确定如何访问该数据,例如,用于打印。我尝试使用迭代器,但我得到错误,说device_reference没有成员"开始"或者"结束"。
(使用VS 2010 with 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内核。是否有其他图书馆/容器可供我这样做?
答案 0 :(得分:3)
答案 1 :(得分:0)
使用它作为示例代码。
#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;
}