【首次】Clion +VS2010 +CUDA7.5 +Cmake3.23.4 成功编译CUDA程序

2 篇文章 0 订阅
1 篇文章 0 订阅

Clion +VS2010 +CUDA7.5 +Cmake3.23.4 成功编译CUDA程序【首次 重要】

项目结构:

根目录的CMakeLists.txt文件

 # CMakeLists.txt for G4CU project
 ​
 project(project)
 ​
 # required cmake version
 cmake_minimum_required(VERSION 2.8)
 ​
 ​
 add_subdirectory(cuda)
 set (EXTRA_LIBS ${EXTRA_LIBS} gpu)
 ​
 ​
 ADD_EXECUTABLE(project main.cpp)
 ​
 ​
 target_link_libraries (project ${EXTRA_LIBS})
 ​

main.cpp

 #include <stdio.h>
 #include <iostream>
 ​
 extern "C"
 void useCUDA();
 ​
 int main()
 {
   std::cout<<"Hello C++"<<std::endl;
   useCUDA();
   return 0;
 }
 ​

cuda\CMakeLists.txt

 # CMakeLists.txt for G4CU project
 ​
 project(gpu)
 ​
 # required cmake version
 cmake_minimum_required(VERSION 2.8)
 ​
 ​
 # packages
 find_package(CUDA)
 ​
 #include_directories ("${PROJECT_SOURCE_DIR}")
 ​
 # nvcc flags -g for debug
 #set(CUDA_NVCC_FLAGS -O3;-G;-g)
 ​
 #set(CUDA_NVCC_FLAGS -gencode arch=compute_20,code=sm_20;-G;-g)
 #set(CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52;-G;-g)
 ​
 file(GLOB_RECURSE CURRENT_HEADERS  *.h *.hpp *.cuh)
 file(GLOB CURRENT_SOURCES  *.cpp *.cu)
 ​
 source_group("Include" FILES ${CURRENT_HEADERS})
 source_group("Source" FILES ${CURRENT_SOURCES})
 ​
 #cuda_add_library(gpu SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES})
 cuda_add_library(gpu STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES})
 ​

cuda\foo.cu

 #include "foo.cuh"
 ​
 ​
 #define CHECK(res) { if(res != cudaSuccess){printf("Error :%s:%d , ", __FILE__,__LINE__);   \
 printf("code : %d , reason : %s \n", res,cudaGetErrorString(res));exit(-1);}}
 ​
 ​
 __global__ void foo()
 {
   printf("CUDA!\n");
 }
 ​
 ​
 void useCUDA()
 {
 ​
   foo<<<1,5>>>();
   CHECK(cudaDeviceSynchronize());
 ​
 }
 ​

cuda\foo.cuh

 #ifndef FOO_CUH
 #define FOO_CUH
 ​
 ​
 #include <stdio.h>
 ​
 ​
 extern "C"
 void useCUDA();
 ​
 ​
 #endif
 ​

配置Toolchains

配置Cmake

编译 / 加载Cmake项目

编译/ build

输出

####################################################

第二种方案,代码理解

根目录CMakeLists.txt:

```

cmake_minimum_required(VERSION 2.8)
project(project)
add_subdirectory(cuda111)

```

cuda111的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(cuda111)

INCLUDE_DIRECTORIES(.)
INCLUDE_DIRECTORIES("C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include")
INCLUDE_DIRECTORIES("C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/include")

# packages
find_package(CUDA)
# nvcc flags -g for debug
set(CUDA_NVCC_FLAGS -O3;-G;-g) //设置NVCC的编译优化;
file(GLOB_RECURSE CURRENT_HEADERS  *.h *.hpp *.cuh) //哪些cu文件需要被编译,添加到CURRENT_HEADERS变量里
file(GLOB CURRENT_SOURCES  *.cpp *.cu)
cuda_add_library(foo STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES}) //采用nvcc编译cu文件,生成foo.lib

ADD_EXECUTABLE(cuda111 main.cpp)  //生成cuda111.exe
target_link_libraries (cuda111 foo) //需要link上foo.lib

main.cpp放在cuda111文件夹下

混合编译的本质时:

1、使用NVCC编译CU和cuh文件,生成xxxx.lib ;

2、使用VS2010的编译器(cl.exe)编译cpp文件生成,xxx.lib ;

3、最后将xxx.lib和xxxx.lib link到一起生成exe;

---------------------------------

第三种方案:
cmakelist修改为 CUDA_ADD_EXECUTABLE

cmake_minimum_required(VERSION 2.8)
project(cuda111)

INCLUDE_DIRECTORIES(
        .
        "C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include"
        "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/include"
)

# packages
find_package(CUDA)

file(GLOB_RECURSE CURRENT_HEADERS *.cuh) #哪些cu文件需要被编译,添加到CURRENT_HEADERS变量里
file(GLOB CURRENT_SOURCES *.cu)

CUDA_ADD_EXECUTABLE(cuda111
        main.cpp
        ${CURRENT_HEADERS}
        ${CURRENT_SOURCES}
)  #生成cuda111.exe

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值