gpt4 book ai didi

c++ - cuda - nvcc 如何编译 __host__ 代码?

转载 作者:行者123 更新时间:2023-11-28 01:44:08 25 4
gpt4 key购买 nike

我正在尝试将我的纯 C++ 项目转换为 cuda 代码以在 GPU 上运行。

我是 cuda 编程的新手,我不知道如何处理这种情况:

如果我有一个非常复杂的类定义,现在我想将一个类实例传递给设备并在设备上执行它的一些成员函数,那么我应该重写整个 .cpp 文件.是只需要将设备上运行的那些函数转为 __host__ __device__ 还是重写所有函数?

我认为 nvcc 将没有函数类型限定符的函数视为 __host__。它如何编译主机代码?它是否像 g++ 一样编译它们?

最佳答案

If I have a very complicated class definition and now I want to pass a class instance to the device and execute some of its member functions on the device, I then should rewrite my whole .cpp file. Do I only need to turn those functions run on device to __host__ __device__ or should I rewrite all the functions?

这完全取决于您的代码。 CUDA 支持 C++ 语言功能的有限子集(完整记录 here )并且几乎不支持 C++ 标准库。所以没有通用的答案,但如果您希望在 GPU 上调用它们,您可能至少需要重写一些类成员函数代码。

I think nvcc treat functions with no function type qualifiers as __host__. How does it compile host code? Does it compile them exactly as g++ does?

首先要了解的是 nvcc 不是编译器,它是一个编译器驱动程序。默认情况下,不带 .cu 文件扩展名的文件中的纯 C++ 代码会直接传递给带有一组预定义编译器选项的主机编译器,无需修改。

.cu 扩展文件中的主机代码由 CUDA C++ 前端解析以查找 CUDA 语法,然后传递给主机编译器。此过程可能会因极其复杂的模板定义和前沿语言功能而失败。 nvcc 还自动包含 CUDA header ,这些 header 可能会与您自己的代码的内容发生冲突。但最终您的主机代码到达主机 C++ 编译器,尽管是通过不同的路径。

关于c++ - cuda - nvcc 如何编译 __host__ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902512/

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