我可以在CUDA中使用STL、iostream、new和delete吗?
我可以在CUDA中使用STL、iostream、new和delete吗?
new
和delete
。不支持STL容器、算法和iostream。让我们分解一下。
不行,在GPU上不能使用标准库代码(即在设备端代码中)。最直接的障碍是标准库没有针对CUDA编译器 - 没有指示其代码应同时编译为主机端和设备端执行。但即使这个技术问题被解决了,仍然有很多原因导致标准库的相当一部分内容不能按原样或根本不能在GPU上工作。
正如talonmies suggests所说,Thrust库提供了一些类似STL的功能,以一种有用和良好打包的方式呈现。但对于你的问题,它仍然基本上是否定的答案,因为:
不,您不能在CUDA设备端代码中使用iostream。但是我们确实有C风格的printf:printf("my_int_value is %05d\n", my_int_value);
。然而,这与标准库的printf()
非常不同,因为它需要将数据发送到PCI总线,并使驱动程序将其传递给主机端进程的输出流。
new
和 delete
new
和 delete
运算符的工作方式类似于设备上的 malloc()
和 free()
,但与主机端有所不同,并且受到一定限制;请参阅 RobertCrovella 在此问题上的 答案 及其中的链接。
然而,我建议您仔细考虑是否真的需要进行设备上的内存分配和释放;这很可能会在性能方面造成昂贵的代价,并且通常/通常情况下,您可以通过主机端 API 调用来更好地预先分配内存。