gpt4 book ai didi

vector - CUDA 内核中的 STD 类

转载 作者:行者123 更新时间:2023-12-02 06:50:47 25 4
gpt4 key购买 nike

我知道在 CUDA 内核中无法使用 std 类,例如字符串、向量、映射或集合。然而,没有它们就很不舒服。我必须在 CUDA 内核中编写大量代码,所以我想至少使用字符串和向量。我不是在谈论诸如推力之类的东西。我希望能够写出这样的东西:

__global__ void kernel()
{
cuda_vector<int> a;
for(int i=0;i<10;i++)
a.push_back(i);
}

int main()
{
kernel<<<1,512>>>();
return 0;
}

这应该创建 512 个线程,在每个线程中我想创建 cuda_vector 类并将其用作 std::vector。我在互联网上没有找到任何解决方案,我开始编写自己的类(class)。这个类的每个函数都被定义为“__ host __”和“__ device __”函数,这样我就可以在CPU和GPU上使用它。理论上是可以实现的,但只能在费米架构上实现。因为,我们需要动态分配内存。我有 GTX 580 并开始编写自己的 Vector。但很累,需要很多时间。没有我可以使用的实现吗?我不敢相信没有。这么多软件开发人员在没有 CUDA 的情况下编写代码吗?没有人尝试编写他/她自己的版本?

最佳答案

你找不到像 cuda 的 std::vector 这样的东西的原因是性能。您的传统矢量对象不太适合 CUDA 模型。如果您计划仅使用 512 个线程,并且每个线程都管理一个类似 std::vector 的对象,那么您的性能将比在 CPU 上运行相同的代码更差。

GPU 线程与 CPU 线程不同,它们应该尽可能轻。使用线程 block 和共享内存让线程进行协作。如果您正在操作字符串,则每个线程应该处理一个字符,如果您在 CPU 中使用向量,则将其数组传递给 GPU,并让每个线程处理一个元素。基本上,考虑如何使用 CUDA 编程模型解决问题,而不是使用 CPU 方法解决问题,然后将其转换为 CUDA。

关于vector - CUDA 内核中的 STD 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com