目录

概述

cmake代码:

头文件代码:

头文件对应的cuda代码实现:

c++的代码:

运行结果

参考资料


概述

首先先通过一个简单的demo来演示cuda编程是怎么进行的。

cmake代码:

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)project(helloC++)find_package(CUDA REQUIRED)include_directories(${PROJECT_SOURCE_DIR}/include) # 通过源码根目录来定位include2
cuda_add_executable (helloworld helloworld.cpp addition.cu)

注意添加了include文件夹,cmake写法要注意:

include_directories(include1) # 注意当前CMakeLists.txt和include1相对路径关系, 此时必须是在同一个目录下
include_directories(${PROJECT_SOURCE_DIR}/include2) # 通过源码根目录来定位include2

头文件代码:

修饰符extern "C"是CUDA和C++混合编程时必须的。

 /** addition.h**/#ifndef INCLUDES_ADDITION_H_#define INCLUDES_ADDITION_H_/*check if the compiler is of C++*/#ifdef __cplusplusextern "C" bool addition(int a, int b, int *c);#endif#endif /* INCLUDES_ADDITION_H_ */

头文件对应的cuda代码实现:

#include <addition.h>__global__ void add(int *a, int *b, int *c){*c=*a+*b;}extern "C" bool addition(int a, int b, int *c){int *d_a, *d_b, *d_c;int size=sizeof(int);cudaMalloc((void **)&d_a, size);cudaMalloc((void **)&d_b, size);cudaMalloc((void **)&d_c, size);cudaMemcpy(d_a, &a, size, cudaMemcpyHostToDevice);cudaMemcpy(d_b, &b, size, cudaMemcpyHostToDevice);add<<<1,1>>>(d_a, d_b, d_c);cudaMemcpy(c, d_c, size, cudaMemcpyDeviceToHost);cudaFree(d_a); cudaFree(d_b); cudaFree(d_c);return true;
}

其中,带有__global__修饰符的函数称为”核函数“,它负责处理GPU内存里的数据,是并行计算发生的地方。而bool addition(int a, int b, int *c)充当了CPU和GPU之间数据传输的角色。也就是Host和Device之间的数据传输。

最后的是

c++的代码:

/** helloworld.cpp**/#include <iostream>#include <addition.h>int main(int argc, char** argv){int a=1,b=2,c;if(addition(a,b,&c))std::cout<<"c="<<c<<std::endl;elsestd::cout<<"Addition failed!"<<std::endl;return 0;}

运行结果

如下:

参考资料

CMake 添加头文件搜索路径 include_directories, target_include_directories - 明明1109 - 博客园

代码来源

ubunt 上进行c++ cuda编程相关推荐

  1. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  2. cuda编程_CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  3. GPU — CUDA 编程模型

    目录 文章目录 目录 GPGPU CUDA 编程模型 CUDA 的架构 CUDA 的工作原理 Grid.Block.Thread Warp GPGPU GPU 起初是用来处理图像的,但是后来人们发现其 ...

  4. 【CUDA编程】Warp Divergence分析

    Warp CUDA编程中,warp是调度和运行的基本单元,目前,每个warp包含32个threads.软件逻辑上,程序员的所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的threa ...

  5. 深入浅出CUDA编程

    标签: cuda编程threadfloatconflictexpress 2010-12-10 13:29 44960人阅读 评论(7) 收藏 举报 CUDA 是 NVIDIA 的 GPGPU 模型, ...

  6. CUDA编程指南阅读笔记

    随着多核CPU和众核GPU的到来,并行编程已经得到了业界越来越多的重视,CPU-GPU异构程序能够极大提高现有计算机系统的运算性能,对于科学计算等运算密集型程序有着非常重要的意义.这一系列文章是根据& ...

  7. CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识

    作者丨科技猛兽 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读.综述盘点.调参攻略.面试经验等干货~ 目录 1 C ...

  8. CUDA 编程实例:计算点云法线

    程序参考文章:http://blog.csdn.net/gamesdev/article/details/17535755  程序优化2 简介:CUDA ,MPI,Hadoop都是并行运算的工具.CU ...

  9. 【转载】cuda编程入门

    目录 1.什么是CUDA 2.为什么要用到CUDA 3.CUDA环境搭建 4.第一个CUDA程序 5. CUDA编程 5.1. 基本概念 5.2. 线程层次结构 5.3. 存储器层次结构 5.4. 运 ...

最新文章

  1. 人力资源部如何运用OKR?看三大层面最新OKR模板
  2. 培养组学对已分离人类细菌和古菌物种库的贡献
  3. 2016/07 — 周年记录
  4. VTK:PolyData之InterpolateMeshOnGrid
  5. 数字证书 - Java加密与安全
  6. 移动Web体验月报(6月):MIP 核心代码升级,增加基于 Vue 开发能力
  7. Android 布局练习
  8. java ceilingentry_java.util.TreeMap.ceilingKey()方法实例
  9. 想要配置文件生效 需要通过添加到web.xml加载到内存中
  10. 设计一个程序,完成(英雄)商品的购买(界面就是第一天打印的界面) 展示商品信息(折扣)->输入商品价格->输入购买数量->提示付款 输入付款金额->打印购买小票
  11. 手机号码校验正则表达式
  12. EDEM后处理导出颗粒信息
  13. 2022G3锅炉水处理上岗证题库及答案
  14. 【Netty-进阶】学习笔记
  15. photo2cartoon环境搭建-真人头像卡通画-写实
  16. 【公众号】公众号网页跳转关注微信公众号
  17. mysql:timestamp时间戳
  18. Mysql数据库使用规范
  19. css前端知识分享—页面布局分析
  20. 3通道高清视频编码电路 转接IC GM7123:TTL转VGA芯片

热门文章

  1. 【字节青训营】微服务架构原理核心服务治理与具体实践
  2. flutter与node.js的前后端项目
  3. 如何判断一棵树是不是另一棵树的子树
  4. C语言large函数的作用,LARGE函数是什么
  5. MATLAB-逻辑运算
  6. C语言入门篇 初识C语言
  7. 语音播报功能的几种实现办法(包含TTS)
  8. 个人博客注册,申请,美化流程
  9. vscode(二)好用的Settings文件
  10. 大连理工大学Python选修课作业训练5