我知道在内核中只调用__device__
函数是有限制的。这使我无法在内核中调用strcmp()
等标准函数
在这一点上,我无法理解/找到原因。在内联中调用strcmp()
时,编译器是否只能跟随strings.h中的每个包含等等?我想我寻找的原因很简单,我在这里遗漏了一些东西
它是重新实现内核计算中所需的所有函数和数据类型的唯一方法吗?是否存在具有此类重新实现的代码库?
答案 0 :(得分:3)
是的,从内核使用stdlib函数的唯一方法是重新实现它们。但我强烈建议您重新考虑这个想法,因为它高度不太可能需要在GPU上运行使用strcmp()
的代码。请添加有关您的问题的其他详细信息,以便提出更好的解决方案(我非常怀疑GPU上的串行字符串比较是您真正需要的)。
几乎不可能简单地重新编译GPU的所有stdlib,因为它很大程度上取决于某些系统调用(如内存分配),而这些调用无法在GPU上使用(嗯,在最新版本的CUDA工具包中你可以从内核分配设备内存,但它不是“cuda-way”,只有最新的硬件支持,并且非常对性能不利)。 此外,大多数功能的CPU版本远不是GPU的“好”。因此,在绝大多数情况下,为GPU编译普通CPU函数会导致无效,因此编译器甚至都没有尝试过。
答案 1 :(得分:2)
尚未为CUDA架构编译strcmp()
等标准函数。我还没有看到任何CUDA的标准C库。