推力矢量的推力矢量

问题描述 投票:1回答:2

由于我仍然习惯于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内核。还有其他允许我这样做的图书馆/容器吗?

c++ vector cuda iterator thrust
2个回答
3
投票

AFAIK在CUDA后端存在限制,导致无法使用向量载体。

不确定是否在CUDA 6.0中解决了此问题,但在CUDA 5.0中解决了surely wasn't

您必须线性化向量。


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.