cuda编程笔记1(c++调用cuda库函数printHello.cu)

这篇博客详细记录了如何在C++项目中使用CUDA库函数,通过创建cuda程序、编译printHello.cu文件,然后在C++主函数中调用CUDA的helloKernel和printHello函数,实现多行打印'Hello CUDA!'。在过程中,作者遇到了无法解析外部符号的错误,通过添加cudart.lib和修改项目设置成功解决问题。


在这里插入图片描述

用cuda核函数打印多行hello CUDA!

创建C++可使用的cuda程序:

步骤
1)创建1个c++空项目,在解决方案中添加新cuda项目
2)编译printHello.cu
3)c++调用的printHello.cu库


1. 创建项目:

项目工程

2.编译cuda程序:

printHello.cu程序代码


#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>

__global__ void helloKernel(int numElements)
{

	int i = blockDim.x*blockIdx.x + threadIdx.x;

	if (i < numElements)
	{
		printf("%d: Hello, CUDA!\n ", i);
	}

}

extern "C" void printHello(int numPrint)
{
	int threadsPerBlock = 256;
	int blocksPerGrid = (numPrint + threadsPerBlock - 1) / threadsPerBlock;
	helloKernel << <threadsPerBlock, blocksPerGrid >> > (numPrint);
	
	cudaDeviceSynchronize();
	
	cudaError_t cudaStatus = cudaGetLastError();
	if (cudaStatus != cudaSuccess)
	{
		fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));
	}
}


int main()
{
	printHello(10);
	return 0;
}

运行结果:
在这里插入图片描述

3.C++调用cuda库函数:

在printHello.cu中去掉main主函数,只保留helloKernel和printHello函数。
在c++的hello项目源文件添加printHello.cu,main.cpp,如图所示:
main.cpp中一个主函数,一个要调用的cuda函数声明。
在这里插入图片描述

直接运行会报无法解析外部符号的bug如下

在这里插入图片描述
添加cudart.lib
在这里插入图片描述

选中解决方案中的c++项目,【项目】一>【生成自定义】一>【CUDA】
在这里插入图片描述

printHello.cu选中CUDA C/C++,
在这里插入图片描述
运行结果:
在这里插入图片描述

若还存在问题,请按如下更改。
在【工具】一>【选项】一>【文本编辑器】一>【文件扩展名】添加扩展名cu
在【工具】一>【选项】一>【VC++ 项目设置】一>【要包括的扩展名】添加.cu;
在这里插入图片描述
在这里插入图片描述

作者: LEDyexu
博客: https://blog.csdn.net/LEDyexu
更新ing…

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值