我有一个大数组需要搜索(实际上它是一个由小数组组成的大数组,但出于所有意图和目的,让我们将其视为一个大数组)。我需要找到的是一系列特定的数字。显然,一个简单的 for 循环就可以了:
Pseudocode:
for(x = 0; x++) {
if(array[x] == searchfor[location])
location++;
else
location = 0;
if(location >= strlen(searchfor))
return FOUND_IT;
}
问题是我希望它是高效的。在一个完美的世界中,我不想从 OpenCL 内核返回准备好的数据并执行简单的搜索循环。
我对非 OpenCL 的想法持开放态度,但我可以在 64 人的工作组中实现目标数组长度为 1024 的想法是理想的。
我正在考虑各种想法(将目标拆分到工作项中,比较每个项目,循环,针对每个目标,如果匹配,则设置一个标志。在所有工作项完成后,检查标志。虽然在我写的时候,这听起来效率很低)但我确定我遗漏了一些东西。
另一个想法是,由于目标数组是 uchar,所以将它作为一个 double 组合在一起,并一次检查 8 个索引。不确定我能否在 opencl 中轻松做到这一点。
还尝试用一些快速的东西对搜索目标进行哈希处理,可能是 MD5,然后一次获取 strlen(searchtarget) 个字符,对其进行哈希处理,然后查看它是否匹配。不过,不确定哈希会在多大程度上降低我的搜索速度。
哦 - 代码在 C 中,所以没有 C++ 映射(我在谷歌搜索时发现的东西似乎有帮助?)
最佳答案
根据上面的评论,对于 future 的搜索,似乎一个简单的循环扫描范围是在给定 OpenCL 实现的情况下查找匹配项的最有效方法。
关于c - 高效搜索数组中的一系列值?理想情况下 OpenCL 可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495866/