是否可以在 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/