OpenCL 中的 HashMap?

标签 hashmap opencl

是否可以在 OpenCL 中创建一个简单的 HashMap?例如。其中所有键的类型均为 long 且所有值的类型为 int,并且无需修改(即以只读方式传递给内核)。

HashMap 的构造可能需要时间(是否在 CPU 上完成一次,就不再需要修改),但读取访问会很频繁,因此 get(long key, *hashmap H)应该很便宜。

OpenCL 中是否有任何已知的实现?我没能找到他们。如果我必须从头开始编写一个 HashMap 实现,哪种 HashMap 实现最适合这种用途?

最佳答案

我认为使用 open addressing 实现一个简单的哈希表可以在这里满足您的要求:

  • 本质上它存储在单个缓冲区中,因此传输到内核很简单。
  • 这样就可以很容易地在内核中编写 getter 逻辑,特别是当您不需要任何同步(只读)时。

因此,传递一个 long2 的缓冲区或一个 struct { long key; 的缓冲区;整数值; },当第一项是键,第二项是值时,还传递缓冲区大小;现在编写一个常规的开放地址 getter。

关于OpenCL 中的 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773880/

相关文章:

java - Hashmap 查找返回 null

java - 对HashMap java的绝对值求和

java - 使用 Java 8 获取 Two+ HashMap 的平均值

Java HashMap 实现哈希码问题

java - 如何自动增加 HashMap 中的键?

c++ - OpenCL:返回 std::future 而不是使用 clFinish 进行阻塞

c - 在 Linux 上编译 OpenCL ICD 加载程序时出错

opengl - `GLfloat` 和 `cl_float` 是否保证具有相同的大小?

c++ - OpenCL/OpenGL 纹理互操作/windows 的问题

c - 在运行时收到 "cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)"警告