首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于CUDA宏__CUDA_ARCH__的几个问题

关于CUDA宏__CUDA_ARCH__的几个问题
EN

Stack Overflow用户
提问于 2021-12-30 15:06:33
回答 1查看 564关注 0票数 0

我在ttt.cu中有一个简单的cuda代码

代码语言:javascript
复制
#include <iostream>
__global__ void example(){
   printf("__CUDA_ARCH__: %d \n", __CUDA_ARCH__);
}
int main(){
example<<<1,1>>>();
}

使用CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.18)
project(Hello)
find_package(CUDA REQUIRED)

cuda_add_executable(sss ttt.cu)

然后我得到了错误:identifier "__CUDA_ARCH__" is undefined。我想知道为什么会发生这种情况,我应该怎么做才能使__CUDA_ARCH__有效?我们能否在头__CUDA_ARCH__文件中的主机代码中使用有效的.h

更新:

我打算使用下面的cmake来生成750个cuda,但是,这总是导致__CUDA_ARCH__ = 300 (2080ti和Cuda10.1)。我尝试了set_propertytarget_compile_options,但都失败了。

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.18)
project(Hello)
find_package(CUDA REQUIRED)
cuda_add_executable(oounne ttt.cu)
set_property(TARGET oounne PROPERTY CUDA_ARCHITECTURES 75)
#target_compile_options(oounne PRIVATE  $<$<COMPILE_LANGUAGE:CUDA>:-gencode 
arch=compute_75,code=sm_75>)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-30 15:29:38

__CUDA_ARCH__是一个编译器宏。

我们能在主机代码中使用有效的__CUDA_ARCH__吗?

不,是仅用于设备代码

主机代码(非GPU代码)不能依赖它。

不能以想象的方式打印编译器宏。它不是C++中定义的普通数值变量。您可以执行类似的操作,但这将在编译时打印,而不是在运行时打印。

要在运行时打印,您可以这样做:

代码语言:javascript
复制
$ cat t2.cu
#include <cstdio>
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

__device__ void print_arch(){
  const char my_compile_time_arch[] = STR(__CUDA_ARCH__);
  printf("__CUDA_ARCH__: %s\n", my_compile_time_arch);
}
__global__ void example()
{
   print_arch();
}

int main(){

example<<<1,1>>>();
cudaDeviceSynchronize();
}
$ nvcc -o t2 t2.cu

$ ./t2
__CUDA_ARCH__: 520
$

请注意,这里在讨论__CUDA_ARCH__cuda标记上有很多问题,您可能希望回顾其中的一些问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70533382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档