如何使用thrust :: host_vector或device_vector存储文件的数据?

时间:2015-11-11 03:40:50

标签: cuda thrust

数据格式如下:

TGCCACAGGTTCCACACAACGGGACTTGGTTGAAATATTGAGATCCTTGGGGGTCTGTTAATCGGAGACAGTATCTCAACCGCAATAAACCC
GTTCACGGGCCTCACGCAACGGGGCCTGGCCTAGATATTGAGGCACCCAACAGCTCTTGGCCTGAGAGTGTTGTCTCGATCACGACGCCAGT
TGCCACAGGTTCCACACAACGGGACTTGGTTGAAATATTGAGATCCTTGGGGGTCTGTTAATCGAAGACAGTATCTCAACCGCAATAAACCT
TGCCACAGGTTCCACACAACGGGACTTGGTTGAAATATTGAGATCCTTGGGGGTCTGTTAATCGAAGACAGTATCTCAACCGCAATAAACCT

每行包含一个序列,我想要一对(键,值),键是一个序列,值是1.然后使用reduce_by_key计算每个序列的数量。

但我发现thrust::host_vector只能存储一个序列,如果我push_back程序崩溃的第二个序列。 这是我的代码:

int main()
{
    ifstream input_subset("subset.txt");
    thrust::host_vector < string > h_output_subset;

    string s;
    while (getline(input_subset, s)) {
        h_output_subset.push_back(s);
    }
    cout << h_output_subset.size() << endl;
    return 0;
}

是否可以将所有数据存储在host_vectordevice_vector中?或者有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

host_vector段错误confirmedthrust::uninitialised_copy中的错误,并已应用修补程序进行修复。

使用device_vector执行此操作的问题是CUDA的真正限制(没有std :: string支持),无法避免。另一种方法是使用固定长度char[]数组作为device_vector中的数据成员,或者使用单个大device_vector来保存所有字符串数据,并使用第二个{{1}保存字符数组中每个子字符串的起始索引。