gpt4 book ai didi

cuda - CUDA Thrust 与原始内核相比如何?

转载 作者:行者123 更新时间:2023-12-01 10:19:09 24 4
gpt4 key购买 nike

我是 GPU 编程的新手,不确定什么会导致最高效的代码。使用 Thrust 与编写自定义内核和自己管理内存的优缺点是什么?

如果有助于详细说明我的目标是什么:我有一个大矩阵,对于每个值,我需要执行一些向量运算。我知道我需要动态并行来完成这项任务,并且目前有一个自定义内核来通过将调用其他内核的矩阵。我正在考虑是否应该用 Thrust 调用(例如thrust::for_each)替换内核和/或是否应该在内核中使用 Thrust 进行向量操作。

最佳答案

在过去的大约 12 个月里,我从主要编写 CUDA 内核转变为主要使用 Thrust,然后又回到主要编写 CUDA 内核。一般来说,编写自己的 CUDA 内核应该提供更好的原始性能,但在更简单的测试用例中,差异应该可以忽略不计。

Thrust 模仿 C++ STL,因此它具有许多与 STL 相同的优点和缺点。也就是说,它旨在以非常通用的方式对数据向量进行操作。从这个角度来看,Thrust 在某些方面比 CUDA 更好,但不应被视为一种万能的解决方案。 Thrust 的主要优势在于抽象和可移植性等领域;您不必考虑 block 大小,并且很容易编写同样适用于设备或主机上的数据的仿函数,而显然 CUDA 内核只能在设备内存上运行。它还有许多非常有用的算法;不必编写自己的归约或排序算法真是太好了,因为 Thrust 提供了非常有效的实现。但是在幕后,您的数据访问模式可能不会轻易匹配 Thrust 的设计目标,并且 Thrust 往往会执行大量临时内存分配(这在性能环境中通常不好;您可以破解其内存管理模型来缓存这些临时分配,但我不建议实际这样做,只需编写内核并自己完全控制内存使用)。

我现在首选的工作模式是几乎所有事情都使用 CUDA,但针对特定算法(例如排序)、原型(prototype)代码或我希望实现在主机或设备上同样良好工作的代码浸入 Thrust 算法.

关于cuda - CUDA Thrust 与原始内核相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56961349/

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