Cuda 如何从代码的主机部分获得GPU的当前计算能力?
我试图使用Cuda 如何从代码的主机部分获得GPU的当前计算能力?,cuda,visual-studio-2017,compile-time,nvcc,preprocessor-directive,Cuda,Visual Studio 2017,Compile Time,Nvcc,Preprocessor Directive,我试图使用\uuuu CUDA\u ARCH\uuuu,但我在某个地方读到,这只适用于代码的设备部分。 之后,我在github上遇到了以下代码: 有没有更好的方法来实现这一点 我这样问是因为我想确定(在主机代码上)GPU是否支持统一内存,在这种情况下,cudaMallocManaged将发生,或者cudaMallocs&&cudaMemcpys将发生 我想做的示例: int main() { // IF CUDA >= 6.0 && COMPUTE CAPABILITY
\uuuu CUDA\u ARCH\uuuu
,但我在某个地方读到,这只适用于代码的设备部分。
之后,我在github上遇到了以下代码:
有没有更好的方法来实现这一点
我这样问是因为我想确定(在主机代码上)GPU是否支持统一内存,在这种情况下,cudaMallocManaged将发生,或者cudaMallocs&&cudaMemcpys将发生
我想做的示例:
int main() {
// IF CUDA >= 6.0 && COMPUTE CAPABILITY >= 3.0
// USE cudaMallocManaged
// ELSE
// USE cudaMallocs && cudaMemcpys
// END IF
return 0;
}
这里似乎涉及两个问题:
#include <cuda_runtime_api.h>
...
// test for CUDA version of 6.0 or higher
#if CUDART_VERSION >= 6000
// safe to use e.g. cudaMallocManaged() here
#else
// e.g. do not use managed memory API here
#endif
#包括
...
//测试CUDA 6.0或更高版本
#如果CUDART\U版本>=6000
//可安全使用,例如此处的cudaMallocManaged()
#否则
//例如,此处不要使用托管内存API
#恩迪夫
cudamalocmanaged
之前测试对托管内存的支持。deviceQuery
表示在运行时测试功能的一般方法(例如,使用测试managedMemSupported
属性)我认为SDK中有一个获得计算能力的代码示例。@PaulR所以你建议我应该使用
\uuuuu host\uucudaError\u t cudaGetDeviceProperties(cudaDeviceProp*prop,int设备)
并从managedMemSupported
变量读取值。如果我想用一些旧的CUDA API编译完全相同的代码,而这些API甚至没有什么cudamalocmanaged
的定义,那该怎么办?我不知道-我已经很久没有用CUDA做过任何工作了-我只记得SDK中有一个代码示例报告了计算能力,仅此而已。@PaulR哦,好的!无论如何,谢谢!;)注意:通过cudaGetDeviceProperties()
和查询计算能力之间存在差异:前者给出了设备的实际计算能力,而后者给出了设备代码编译的计算能力。如果不同的计算能力设备是二进制兼容的,或者如果PTX代码被驱动程序转换为实际的体系结构,它们可能会有所不同。