当我使用cuda时如何从std :: map中搜索值?

时间:2018-03-07 08:49:11

标签: c++ stl cuda gpu thrust

我有一些存储在std :: map中的东西,它将字符串映射到vector。它的键和值看起来像

 key      value
 "a"-----[1,2,3]
 "b"-----[8,100]
"cde"----[7,10]

对于每个线程,它需要处理一个查询。查询看起来像

["a", "b"]

["cde", "a"]

所以我需要从地图中获取值,然后做一些其他工作,比如组合它们。因此对于第一个查询,结果将是

[1,2,3,8,100]

问题是,线程如何访问地图并通过密钥查找值?

起初,我试图将其存储在全局内存中。但是,看起来它只能将数组从主机传递到设备。

然后我尝试使用推力,但我只能用它来存储矢量。

还有其他方法可以使用吗?或许我忽略了推力中的一些方法?谢谢!

** Ps:我不需要修改地图,我只需要从中读取数据。

1 个答案:

答案 0 :(得分:1)

我相信你不可能在GPU上做任何这样的事情,除非你有大量的查询,这些查询可以同时为你提供,或者至少可以批量使用。

如果您有那么多查询,那么只是传输数据(无论其确切的格式/结构)都可能是浪费。

如果你有那么多查询,那么好处仍然完全不清楚,并且取决于很多参数。你一直试图用std::map做任何事情的事实表明(见下面的原因)你到目前为止还没有认真考虑过表现。如果情况确实如此,那就不要使用GPU让生活变得困难。

那么std::map有什么不对?没什么,但它是extremely slow even on the CPU,这在GPU上更糟糕。