【发布时间】:2014-03-14 05:38:52
【问题描述】:
我有一个单词列表,我的目标是匹配一个非常长的短语中的每个单词。 我在匹配每个单词时没有问题,我唯一的问题是返回一个包含每个匹配信息的结构向量。
在代码中:
typedef struct {
int A, B, C; } Match;
__global__ void Find(veryLongPhrase * _phrase, Words * _word_list, vector<Match> * _matches)
{
int a, b, c;
[...] //Parallel search for each word in the phrase
if(match) //When an occurrence is found
{
_matches.push_back(new Match{ A = a, B = b, C = c }); //Here comes the unknown, what should I do here???
}
}
main()
{
[...]
veryLongPhrase * myPhrase = "The quick brown fox jumps over the lazy dog etc etc etc..."
Words * wordList = {"the", "lazy"};
vector<Match> * matches; //Obviously I can't pass a vector to a kernel
Find<<< X, Y >>>(myPhrase, wordList, matches);
[...]
}
我已经尝试过 Thrust 库,但没有任何成功,你能建议我任何解决方案吗?
非常感谢。
【问题讨论】:
-
推力分区似乎很适合解决这个问题。
-
虽然我应该指出,这将是一个关于它是否比 CPU 快的废话。内存布局将是 AWFUL(我假设您将其布置为 GPU 内存中的 char**)。分区并不是您在美好的一天可以在 GPU 上执行的最快操作。打开和关闭复制数据将是一场噩梦(对于内存复制循环)。如果您的短语不超过几千字,我认为它不会加快您的代码速度
标签: c++ c cuda parallel-processing nvidia