
C语言与C++源代码如何调用cuda核函数
发布日期:2021-05-10 05:58:27
浏览次数:29
分类:原创文章
本文共 1857 字,大约阅读时间需要 6 分钟。
.c与.cpp是C与C++源代码,.cu是cuda源代码,核函数是GPU计算用的函数,用__global__标记
.c或.cpp是不可以使用直接调用“add <<<1,3 >>> (a_gpu, b_gpu, c_gpu, num);”类似这样来调用__global__核函数,如果想调用,可以在 .cu 文件中封装一层,就是在 .cu 文件中写一个传同样参数的核函数调用函数addKernel(int *a, int *b, int *c, int size),即在addKernel(int *a, int *b, int *c, int size)函数中调用核函数add<<<2, 128>>>(dev_a, dev_b, dev_c,size),然后在外边main.cpp文件中用调用普通函数的方法调用addKernel(int *a, int *b, int *c, int size)函数
#include "cuda_runtime.h"#include "addfunc.cuh"#include "device_launch_parameters.h"#include <stdio.h>#include <time.h>int main(void){ // init data int num = 10; int a[10], b[10], c[10]; int* a_gpu, * b_gpu, * c_gpu; for (int i = 0; i < num; i++) { a[i] = i; b[i] = i * i; } cudaMalloc((void**)&a_gpu, num * sizeof(int)); cudaMalloc((void**)&b_gpu, num * sizeof(int)); cudaMalloc((void**)&c_gpu, num * sizeof(int)); // copy data cudaMemcpy(a_gpu, a, num * sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(b_gpu, b, num * sizeof(int), cudaMemcpyHostToDevice); addKernel(a_gpu, b_gpu, c_gpu, num); //printf("%d + %d = %d\n", a_gpu[0], b_gpu[0], c_gpu[0]); // get data cudaMemcpy(c, c_gpu, num * sizeof(int), cudaMemcpyDeviceToHost); // visualization for (int i = 0; i < num; i++) { printf("%d + %d = %d\n", a[i], b[i], c[i]); } return 0;}//int main()//{// getThreadNum();//}
#include "cuda_runtime.h"#include "addfunc.cuh"#include "device_launch_parameters.h"#include <stdio.h>#include <time.h>#define CUDA_KERNEL_LOOP(i, n) \ for (int i = blockIdx.x * blockDim.x + threadIdx.x; \ i < (n); \ i += blockDim.x * gridDim.x)__global__ void add(int* a, int* b, int* c, int num){ int i = threadIdx.x; CUDA_KERNEL_LOOP(i, num) { if (i < num) { c[i] = a[i] + b[i]; } }}//中间过渡函数void addKernel(int* a_gpu, int* b_gpu, int* c_gpu, int num){ add <<<1,3 >>> (a_gpu, b_gpu, c_gpu, num);}//int main()//{// getThreadNum();//}
上述是C++项目,如果是C语言项目,可以参照如下文章
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月23日 21时48分18秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux系统时间与硬件时间及时间同步
2019-03-15
Spring 和 DI 依赖注入
2019-03-15
中序线索二叉树的遍历
2019-03-15
文字策略游戏 android studio(学习intent,textview,等等)
2019-03-15
laravel server error 服务器内部错误
2019-03-15
17_注册Github账号
2019-03-15
Linux驱动实现GPIO模拟I2C读写操作
2019-03-15
iJ配置Maven环境详解
2019-03-15
仿QQ登陆界面
2019-03-15
什么题目的暂时还没想好
2019-03-15
N皇后问题解法(递归+回朔)
2019-03-15
面试题 08.01. 三步问题
2019-03-15
剑指 Offer 11. 旋转数组的最小数字
2019-03-15
word文档注入(追踪word文档)未完
2019-03-15
作为我的第一篇csdn博客吧
2019-03-15
ajax异步提交失败
2019-03-15
一道简单的访问越界、栈溢出pwn解题记录
2019-03-15
ubuntu18.04.4版本安装docker教程
2019-03-15