cmake 生成 cuda 项目

cmake 生成的cuda 好处就是跨平台,少去各种配置。

1. CMakeLists.txt 代码如下:

# CMakeLists.txt for G4CU project
project(test_cuda_project)
# required cmake version
cmake_minimum_required(VERSION 2.8)
# packages
find_package(CUDA)

if(${CUDA_FOUND})
	include_directories(${CUDA_INCLUDE_DIRS})
	link_directories($ENV{CUDA_PATH}/lib/x64)
else(${CUDA_FOUND})
	MESSAGE(STATUS "cuda not found!")
endif(${CUDA_FOUND})
# nvcc flags
#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)
# 添加要编译的库
#add_library(gpu SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES})
set_source_files_properties(test.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ)
file(GLOB_RECURSE CURRENT_HEADERS  *.h *.hpp *.cuh)
file(GLOB CURRENT_SOURCES  *.cpp *.cu .cc)
source_group("Include" FILES ${CURRENT_HEADERS})
source_group("Source" FILES ${CURRENT_SOURCES})

CUDA_ADD_EXECUTABLE(test ${CURRENT_HEADERS} ${CURRENT_SOURCES})
target_link_libraries(test cuda.lib cudart_static.lib)
复制代码


2. nvcc 是cuda的编译器,有兴趣的自己看看。

nvcc test.cpp main -x=cu
复制代码

下面这句非常关键,就是告诉编译器这个文件有cuda的语法,不然会无法编译通过。

set_source_files_properties(test.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ)复制代码

link_directories($ENV{CUDA_PATH}/lib/x64) 复制代码
$ENV{CUDA_PATH} 是环境变量,一般在安装cuda会自动添加。复制代码

3. 链接库

target_link_libraries(test_cuda_project cuda.lib cudart_static.lib)复制代码

添加项目的链接库,一般 添加 cudart_static.lib就够了,如果一些cuda的api需要其他库,可以手动加进去,重新cmake.

4. 生成项目

在 vs2015下 

cmake -G "Visual Studio 14 2015 Win64" .复制代码

在 linux 没试过,估计 

cmake . 复制代码

5. 测试代码

#include <iostream>
#include <cuda_runtime_api.h>
bool InitCUDA()
{
	int count;

	cudaGetDeviceCount(&count);//获得cuda设备的数量

	if (count == 0)
	{
		std::cout << "There is no device.\n";
		return false;
	}

	int i;

	for (i = 0; i < count; i++)
	{
		cudaDeviceProp prop;//cuda设备属性对象

		if (cudaGetDeviceProperties(&prop, i) == cudaSuccess)
		{
			std::cout << "device name:" << prop.name << "\n";
			std::cout << " 1 compute value:" << prop.major << "\t" << "2 compute value:" << prop.minor << "\n";
			std::cout << "hz:" << prop.clockRate << "\n";

			std::cout << "processor nums:" << prop.multiProcessorCount << "\n";
			std::cout << "GPU is support muti p run:" << prop.concurrentKernels << "\n";
		}
	}

	cudaSetDevice(i);//启动设备

	return true;
}

int main()
{
	if (!InitCUDA())
	{
		return 0;
	}
	_sleep(10000);
	std::cout << "cuda !\n";
	return 0;
}
复制代码


转载于:https://juejin.im/post/5be3cbdae51d451ad034aab8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值