推力装置矢量<int> </int>的推力装置矢量

时间:2014-08-24 21:04:13

标签: c++ vector cuda iterator thrust

我在CUDA中使用这种向量方法向量,因为我仍习惯于Matlab和Python风格的编程环境。我能够从设备向量中的主机端提取数据,但现在我不确定如何访问该数据,例如,用于打印。我尝试使用迭代器,但我得到错误,说device_reference没有成员&#34;开始&#34;或者&#34;结束&#34;。

(使用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内核。是否有其他图书馆/容器可供我这样做?

2 个答案:

答案 0 :(得分:3)

AFAIK在CUDA后端存在限制,阻止了矢量矢量的使用。

不确定这是否已在CUDA 6.0中解决,但在CUDA 5.0中是surely wasn't

你必须线性化你的矢量。

答案 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;
}