cuda学习笔记1 - hello world实战

写在前面

       因为要用TensorRT写自定义层,一定会用到cuda,所以学一下。

目录结构

       – <my_dir> – fuc.cu
                               fuc.h
                               test.cu
                               CMakeLists.txt

完整代码

#include <stdio.h>
#include "fuc.h"

__global__ void kernel()
{
    printf("hello world!");
}
  • fuc.h
extern __global__ void kernel();
#include <stdio.h>
#include "fuc.h"

int main(void)
{
    kernel<<<1,1>>>();
    cudaDeviceSynchronize();
    printf("hello world!\n");
    return 0;
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(helloworld C CXX)

# find_package(<Name>)命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式
# QUIET 可选字段,表示如果查找失败,不会在屏幕进行输出(但是如果指定了REQUIRED字段,则QUIET无效,仍然会输出查找失败提示语)
find_package(CUDA QUIET REQUIRED)
# 下面这行注释掉的代码和上面那行代码起到一样的作用
# include(/usr/share/cmake-3.5/Modules/FindCUDA.cmake)

set(CUDA_INCLUDE_DIRS /usr/local/a-9.0/include)
set(CUDA_LIBRARY_DIRS /usr/local/cuda-9.0/lib64)

include_directories(${CUDA_INCLUDE_DIRS})
link_directories(${CUDA_LIBRARY_DIRS})

cuda_add_executable(helloworld test.cu fuc.cu)

运行过程

  • cd <my_dir>
  • mkdir build && pushd build
  • cmake ..
  • make
  • ./helloworld 得到如下图输出:
    在这里插入图片描述
  • popd

碰到的坑

  • 不要把test.cu文件命名为test.cpp,因为cpp文件会使用c++编译器来处理,我们在test.cpp中include了func.h,同时在func.h中声明了__global__函数。
  • 使用如下CMakeLists.txt在make的时候会报“main函数重复定义”的错误,我还没懂是为什么。
cmake_minimum_required(VERSION 2.8)
project(helloworld C CXX)
find_package(CUDA QUIET REQUIRED)

set(CUDA_INCLUDE_DIRS /usr/local/a-9.0/include)
set(CUDA_LIBRARY_DIRS /usr/local/cuda-9.0/lib64)

include_directories(${CUDA_INCLUDE_DIRS})
link_directories(${CUDA_LIBRARY_DIRS})

# 原:
# cuda_add_executable(helloworld test.cu fuc.cu)

# 改为以下两行: 
file(GLOB_RECURSE CURRENT_INCLUDE ./*.h ./*.hpp ./*.cuh)
cuda_add_executable(cuda_test ${CURRENT_INCLUDE})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值