检查代码是否在GPU或CPU上运行
Check whether the code is running on the GPU or CPU
有人知道如何检查代码是否在GPU或CPU上运行使用Cuda吗?
__device__ __host__ double count_something(double variable) {
if (RUN_ON_GPU) {
use_cuda_variables();
} else {
use_cpu_variables();
}
}
没有办法运行时检查一段代码运行在哪个体系结构上,但是也没有必要知道,因为它可以在编译时确定并相应地处理。nvcc
定义了几个预处理器符号,这些符号可用于在编译代码时解析编译轨迹。关键符号为__CUDA_ARCH__
,编译主机代码时不定义,编译设备代码时定义。
所以可以这样写一个函数:
__device__ __host__ float function(float x)
{
#ifdef __CUDA_ARCH__
return 10.0f * __sinf(x);
#else
return 10.0f * sin(x);
#endif
}
将根据它是为GPU还是主机编译而发出不同的代码。你可以在这个Stack Overflow问题或CUDA编程指南的C语言扩展部分中阅读关于编译引导的更深入的讨论。
我不能在注释中添加适当的代码标记-决定添加完整的答案。仅使用__CUDA_ARCH__
定义检查是不完全正确的。在某些情况下,这段代码不起作用——在我找到解决方案之前,我花了很多时间调试(CUDA文档现在没有提到它)。
即使在主机代码中也可以定义__CUDA_ARCH__
,但在这种情况下它被定义为0。因此,正确的检查应该是这样的:
__device__ __host__ float function(float x)
{
#if (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ > 0))
// device code here
return 10.0f * __sinf(x);
#else
// host code here
return 10.0f * sin(x);
#endif
}
相关文章:
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 以编程方式在运行时检测 CPU 体系结构
- C++多线程算法创建在同一 CPU 线程上运行的多个线程
- 我的OpenCL测试的运行速度不超过CPU
- 在我的CUDA运行时间计划中,CPU和GPU可以异步计算,但不能合作地计算
- 如何在运行SDL程序时降低CPU使用率
- 着色器中实现双精度cos()的结果是NaN,但在CPU上运行良好.出了什么问题
- 使用C++将CPU专用于在1个核心上运行进程
- 在运行时查找特定线程的CPU核心
- 在具有 64 位 CPU 的 32 位 Win8 上运行 32 位 Orwell Dev-C++ - 输入指针返回不正确
- 如何控制 Microsoft C 运行时库使用的 CPU 指令
- GPU 调用后,CPU 代码运行缓慢
- 如何禁止任何应用程序的所有线程在特定的CPU内核上运行,除非我指定了线程
- 计算并行程序的运行时间和cpu时间
- 如何找出我的进程Id正在哪个物理CPU上运行
- 如何在GPU上而不是在CPU上运行qt应用程序
- openmp是否可以在同一个cpu(核心)上运行不同的线程?
- 如何在一个CPU上运行c++程序
- 检查代码是否在GPU或CPU上运行
- OpenCV CUDA运行速度比OpenCV CPU慢