数据格式如下:
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_vector
或device_vector
中?或者有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
host_vector段错误confirmed为thrust::uninitialised_copy
中的错误,并已应用修补程序进行修复。
使用device_vector
执行此操作的问题是CUDA的真正限制(没有std :: string支持),无法避免。另一种方法是使用固定长度char[]
数组作为device_vector
中的数据成员,或者使用单个大device_vector
来保存所有字符串数据,并使用第二个{{1}保存字符数组中每个子字符串的起始索引。