ubunt 上进行c++ cuda编程

本文通过一个简单的CUDA编程示例,介绍了如何在Ubuntu系统中进行C++与CUDA的结合使用。从CMake配置到CUDA核函数的编写,再到C++代码调用和运行结果展示,详细阐述了CUDA编程的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

概述

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 __cplusplus
 extern "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;
     else
         std::cout<<"Addition failed!"<<std::endl;
 
     return 0;
 }

运行结果

如下:

参考资料

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

代码来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哦里 哦里哦里给

你的鼓支持是我分享的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值