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语言项目,可以参照如下文章

 

 

 

上一篇:VS报错:不能将 “const char *“ 类型的值分配到 “char *“ 类型的实体
下一篇:如何确定cuda程序的block数量和线程数量

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月23日 21时48分18秒