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

Thrust device vector of thrust device vector<int>

本文关键字:装置 gt int lt      更新时间:2023-10-16

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

(使用vs2010与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内核。是否有其他库/容器允许我这样做?

当然,CUDA后端有一些限制,使得向量的向量无法使用。

不确定CUDA 6.0中是否解决了这个问题,但CUDA 5.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;
}