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

How to store data of a file using thrust::host_vector or device_vector?

数据的格式是这样的:

TGCCACAGGTTCCACACAACGGGACTTGGTTGAAATATTGAGATCCTTGGGGGTCTGTTAATCGGAGACAGTATCTCAACCGCAATAAACCC
GTTCACGGGCCTCACGCAACGGGGCCTGGCCTAGATATTGAGGCACCCAACAGCTCTTGGCCTGAGAGTGTTGTCTCGATCACGACGCCAGT
TGCCACAGGTTCCACACAACGGGACTTGGTTGAAATATTGAGATCCTTGGGGGTCTGTTAATCGAAGACAGTATCTCAACCGCAATAAACCT
TGCCACAGGTTCCACACAACGGGACTTGGTTGAAATATTGAGATCCTTGGGGGTCTGTTAATCGAAGACAGTATCTCAACCGCAATAAACCT

每一行包含一个序列,我想做一对(key ,value),key是一个序列,value是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 中?或者有什么办法可以解决这个问题?

host_vector 段错误 confirmed 作为 thrust::uninitialised_copy 中的错误,已应用补丁修复它。

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