我有一些存储在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:我不需要修改地图,我只需要从中读取数据。
答案 0 :(得分:1)
我相信你不可能在GPU上做任何这样的事情,除非你有大量的查询,这些查询可以同时为你提供,或者至少可以批量使用。
如果您不有那么多查询,那么只是传输数据(无论其确切的格式/结构)都可能是浪费。
如果你做有那么多查询,那么好处仍然完全不清楚,并且取决于很多参数。你一直试图用std::map
做任何事情的事实表明(见下面的原因)你到目前为止还没有认真考虑过表现。如果情况确实如此,那就不要使用GPU让生活变得困难。
那么std::map
有什么不对?没什么,但它是extremely slow even on the CPU,这在GPU上更糟糕。