c++ - CUDA 内核和数学函数的显式命名空间
问题描述
我正在做一个项目,其中有多个基本数学函数(cos、sin、exp、log、sqrt、...)的定义为各种对象重载。我包含多个具有此类定义的标题(例如<cmath>
,<cuda.h>
和我自己的标题)并不少见。为了完全确定使用了正确的实现,我想明确写出命名空间,例如std::sqrt()
. 这让我想知道两个相关的事情:
问:如何确保我使用<cuda.h>
了特定函数的实现,即是否可以显式写出命名空间?
问:我是否会std::sqrt()
在使用 CUDA 内核时遇到问题(比如性能问题,因为它通常是主机功能)?
解决方案
在 cuda 内核中,您只能使用具有__device__
属性的函数。这保证了不会使用std::
或cmath
不会使用任何内容。
error: calling a constexpr __host__ function("sqrt") from a __global__ function("kernel") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
推荐阅读
- c# - 连接时密码中的分号 (;) 会导致“参数无效”
- python - ValueError:在 midi 中找不到子字符串
- php - 发送 POST 到 URL
- r - 在 R 中定义具有 2 个变量的函数时出现意外的“{”
- c# - 对象引用未设置为对象:但是在哪里
- swagger - 招摇 ApiResponse 示例
- python - 如果元素存在,则在列表列表中查找列表
- php - 在 Heroku 上部署时 Symfony 3.4 应用程序中的 Ckeditor 出现问题
- python - 验证来自 input() 函数的字符串输入时遇到问题
- iphone-standalone-web-app - Web 应用程序不再独立打开 (iOS 13)