Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在CUDA中使用std容器作为内核输入的可能性_Algorithm_Cuda_Std - Fatal编程技术网

Algorithm 在CUDA中使用std容器作为内核输入的可能性

Algorithm 在CUDA中使用std容器作为内核输入的可能性,algorithm,cuda,std,Algorithm,Cuda,Std,我的代码严重依赖std算法。可以通过一些接口将std::map的数据用作CUDA内核的输入吗?例如,使用 std::map<int, vector<float>> std::map 是否可以使用GPU在地图中进行搜索,而不是在主机中进行搜索。tl;医生:你不能这么做,如果你可以的话,那也帮不了你。 大多数标准库容器的代码都是特定于CPU的,并且没有一个容器的非特定于CPU的部分标有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我的代码严重依赖std算法。可以通过一些接口将std::map的数据用作CUDA内核的输入吗?例如,使用

std::map<int, vector<float>> 
std::map
是否可以使用GPU在地图中进行搜索,而不是在主机中进行搜索。

tl;医生:你不能这么做,如果你可以的话,那也帮不了你。 大多数标准库容器的代码都是特定于CPU的,并且没有一个容器的非特定于CPU的部分标有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因此,从技术上讲,没有。(注意:在C++20中,使用无处不在的
constexpr
ing,事情会变得更复杂一些。)

此外,这些容器中的大多数在设计时都没有考虑并行或并发执行:通过两个非序列化CPU或GPU线程向
std::vector
std::map
添加或删除元素很可能会导致数据损坏,甚至更糟。所以,即使在CPU上,你也不想这样做

另一点要记住的是内存分配,这在GPU和CPU上是不同的;而且,您主要希望避免GPU内核中的动态内存分配

但是,你问,使用矢量图的原始数据而不是代码怎么样


好吧,如果你在主系统内存中有一个向量数据结构图,你将不会从使用GPU搜索它中得到任何加速。更一般地说,使用离散GPU不太可能加快对主存结构的搜索速度:在通用硬件平台上,CPU为主存访问提供了比GPU更高的带宽和更低的延迟,而搜索通常是零星的非连续内存访问,因此您的希望将落空。

通常,否。说明了限制。其中一个原因是,这些标准库通常依赖于为主机编译的函数,即为x86处理器编译的库,而GPU不是。你也许可以自己实现一些东西。例如,对设备代码的映射函数进行了引用。我不能担保。您可能会发现其他示例,其中所有容器类都采用
std::allocator
,传入分配托管内存的自定义分配器并不太困难。但是,由于分配器是模板的一部分,这意味着使用容器修改所有代码。正如Robert Crovella已经指出的,这只会将原始数据获取到设备上,而容器类的所有方法仍然只能从主机调用。在将现有代码移植到GPU时,我主要将其用于过渡版本。此外,由于您提到“在地图中搜索”,您的问题可以说是该问题的重复。