c - 高效搜索数组中的一系列值?理想情况下 OpenCL 可用吗?

标签 c arrays search opencl

我有一个大数组需要搜索(实际上它是一个由小数组组成的大数组,但出于所有意图和目的,让我们将其视为一个大数组)。我需要找到的是一系列特定的数字。显然,一个简单的 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/

相关文章:

.net - 在 ASP.NET MVC 网站上实现搜索

c# - 从 C 到 C# 的编码(marshal)结构

python - 检查单个元素是否包含在 Numpy 数组中

C返回多个值

Azure 搜索突出显示不仅匹配 Lucene 字段范围查询中使用的字段

javascript - 禁用自动完成上的自动选择 | jQuery用户界面

c - 函数声明与原型(prototype)的替代 (K&R) C 语法

c - 基本逻辑运算符问题

c - 使用双向链表排序的问题

java - 无法在Java中使用for循环获取所有JSONObject