第一个cuda程序

 随便写个纪念下。新建一个工程,右键单击该工程Custom Build Rules里面选择Cuda Runtime API Build Rule(v4.1)。另外点击该项目的右键,属性的linker->input右侧有Additional Dependencies添加cudart.lib cutil32D.lib。添加新项目比如cudatest.cpp,重命名为cudatest.cu

 

cudaError_t cudaGetDeviceCount (int * count  ) 

此函数返回计算能力>=1的设备数量

Returns in *count the number of devices with compute capability greater or equal to 1.0 that are available for execution. If there is no such device then cudaGetDeviceCount() will return cudaErrorNoDevice. If no driver can be loaded to determine if any such devices exist then cudaGetDeviceCount() will return cudaErrorInsufficientDriver.

Parameters:
count - Returns the number of devices with compute capability greater or equal to 1.0
Returns:
cudaSuccess , cudaErrorNoDevice , cudaErrorInsufficientDriver
Note:
Note that this function may also return error codes from previous, asynchronous launches

 

#include<stdio.h>

bool InitCUDA()  
{  
	
	int count;  
	//获取计算能力>=1.0的设备数量
	cudaGetDeviceCount(&count);  
	printf("%d\n",count);

	if(count == 0)  
	{  
		fprintf(stderr, "There is no device.\n");  
		return false;  
	}  
	int i;  
	for(i = 0; i < count; i++)  
	{  //指定设备的属性
		cudaDeviceProp prop;  
		if(cudaGetDeviceProperties(&prop, i) == cudaSuccess)  
		{  
			//输出设备名称
			char *c=prop.name;
			printf("%s\n",c);
			//定义设备计算能力的主要修订编号
			printf("%d",prop.major);
			//定义设备计算能力的次要修订编号
			printf("%d",prop.minor);
			if(prop.major >= 1)  
			{  
				break;  
			}  
			
		}  
	}  
	if(i == count)  
	{  
		fprintf(stderr, "There is no device supporting CUDA 1.x.\n");  
		return false;  
	}  
	//把设备设置为调用主线程的当前设备
	cudaSetDevice(i);  
	return true;  
}  
int main()  
{  
	if(!InitCUDA())  
	{  
		return 0;  
	}  
	printf("HelloWorld, CUDA has been initialized.\n");  
	int j;
	scanf("%d",&j);
	return 0; 
	
	
}  


结果输出显卡名称,我的显卡为8600M GT,因此输出了8600MGT

### Linux 上 CUDA 的安装 为了在Linux系统上成功安装CUDA工具包并运行首个CUDA程序,需遵循一系列特定的操作指南。 #### 准备工作 确保操作系统满足最低版本需求,并已更新至最新状态。对于大多数现代Linux发行版而言,建议先移除任何旧版本的NVIDIA驱动或CUDA软件包[^1]。 #### 下载与安装 NVIDIA 驱动 访问[NVIDIA官方网站](https://www.nvidia.com/)下载适用于当前系统的图形驱动程序。按照官方说明完成驱动安装过程,在此期间可能需要重启计算机以使更改生效。 #### 获取 CUDA 工具包 前往[CUDA Toolkit Archive页面](https://developer.nvidia.com/cuda-toolkit-archive),挑选适合操作环境的具体版本进行下载。推荐采用.run文件形式而非.deb/.rpm包来规避潜在依赖冲突问题。 #### 执行安装脚本 通过命令行界面执行所下载的CUDA安装器(.run文件), 使用`sudo sh cuda_<version>_linux.run`指令启动安装向导。过程中可根据提示选择组件以及同意许可协议等内容。 ```bash $ sudo sh cuda_11.8.0_520.61.05_linux.run ``` #### 设置环境变量 编辑~/.bashrc或其他shell配置文件,添加如下路径设置以便于后续编译链接: ```bash export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH ``` 保存修改后的配置文件并通过source重新加载使之立即生效: ```bash $ source ~/.bashrc ``` #### 编写并测试第一个 CUDA C/C++ 程序 创建名为vectorAdd.cu的新源码文件,输入以下简单矢量加法示例代码片段: ```cpp #include <stdio.h> __global__ void add(int n, float *x, float *y) { int index = threadIdx.x; int stride = blockDim.x; for (int i = index; i < n; i += stride) y[i] = x[i] + y[i]; } int main(void) { int N = 1<<20; float *x, *y; // Allocate Unified Memory – accessible from CPU or GPU cudaMallocManaged(&x, N*sizeof(float)); cudaMallocManaged(&y, N*sizeof(float)); for (int i = 0; i < N; i++) { x[i] = 1.0f; y[i] = 2.0f; } // Run kernel on one CUDA device int blockSize = 256; int numBlocks = (N + blockSize - 1) / blockSize; add<<<numBlocks, blockSize>>>(N, x, y); // Wait for GPU to finish before accessing on host cudaDeviceSynchronize(); printf("%f + %f = %f\n", x[0], y[0], y[0]); cudaFree(x); cudaFree(y); } ``` 利用nvcc编译上述代码生成可执行二进制文件,最后执行该程序验证一切正常运作: ```bash $ nvcc vectorAdd.cu -o vectorAdd $ ./vectorAdd ``` 如果看到预期输出,则表明CUDA开发环境搭建完毕且能够正常使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值