VSCode之C++ & CUDA极简环境配置(更新跨平台支持)

5 篇文章 0 订阅
2 篇文章 0 订阅
  1. 背景
    想要了解CUDA并行计算原理,同时针对深度学习中出现一些“不支持算子”可能需要手写的需要,配置一个简单的CUDA编译环境,探索CUDA编程的范式【注:CUDA环境配置略】。
  2. 结果展示
    在这里插入图片描述
  3. 示例代码
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>

__global__ void VecAdd(int* A, int* B, int* C)
{
	int i = threadIdx.x;
	C[i] = A[i] + B[i];
}

void test_cuda(){
   // define data
    const int size = 3;
	int a[size] = { 1,2,3 };
	int b[size] = { 10,20,30 };
	int c[size] = { 0 };

	// define device
	int* dev_a = 0;
	int* dev_b = 0;
	int* dev_c = 0;
	// set cuda state
	cudaError_t cudaStatus;
	// select cuda device
	cudaStatus = cudaSetDevice(0);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "GPU device error");
		return;
	}
	// allocate memory on cuda
	cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int));
	if (cudaStatus != cudaSuccess)
		fprintf(stderr, "device_c allocate error");
	cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int));
	if (cudaStatus != cudaSuccess)
		fprintf(stderr,  "device_a allocate error");
	cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int));
	if (cudaStatus != cudaSuccess)
		fprintf(stderr,  "device_b allocate error");
	// copy data from cpu to gpu
	cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr,  "device_a copy error");
	}
	// copy data from cpu to gpu
	cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "device_b copy error");
	}
	// core gpu operation
	VecAdd <<<1, size>>> (dev_a, dev_b, dev_c);
	// get error state
	cudaStatus = cudaGetLastError();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "VecAdd call error: %s\n", cudaGetErrorString(cudaStatus));
	}

	cudaStatus = cudaDeviceSynchronize();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaDeviceSynchronize not sucess %d!\n", cudaStatus);
	}
	// copy data from cuda to cpu
	cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "copy result to host error");
	}
	printf("{1,2,3} + {10,20,30} = {%d,%d,%d}\n", c[0], c[1], c[2]);
	cudaFree(dev_a);
	cudaFree(dev_b);
	cudaFree(dev_c); 
}

int main() {
	test_cuda();
	return 0;
}
  1. 小结
  1. NVCC编译cuda命令与g++编译C++较为相似,从而借鉴引入对应的include,实现Windows下cmake编译CUDA代码;
  2. 示例代码展示了从CPU读取数据,在GPU端进行计算,最终传输给CPU的过程,与深度学习数据加载过程类似,是较为通用的过程;
  3. 理解C++到CUDA的过渡、预加载过程,进一步从底层了解CUDA。
  1. 更新(同时支持Window和Linux)
    新增跨平台编译的CMakelists.txt
cmake_minimum_required(VERSION 3.0.0)
project(demo VERSION 0.1.0)

if(MSVC)
    set(CMAKE_CUDA_COMPILER "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2/bin/nvcc.exe")
    set(CUDACXX "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.2/bin/nvcc.exe")
    enable_language(CUDA)
    # set (CMAKE_CUDA_ARCHITECTURES "60;72;75" )
    set (CUDA_INCLUDE_DIRS )
else()
    # set(CUDA_PATH /usr/local/cuda-11.3)
    # set(CMAKE_CUDA_COMPILER /usr/local/cuda-11.3/bin/nvcc)
    find_package(CUDA REQUIRED)
    enable_language(CUDA)
endif()


add_library(a SHARED a.cu)
# add_library(advance_reduce advance_reduce.cu)
add_executable(main main.cu)
target_link_libraries(main a)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用VSCode配置C++环境时,你需要进行以下步骤: 1. 首先,你需要通过VSCode远程连接到阿里云服务器。这个过程可以跳过,因为你已经在本地笔记本上使用VSCode远程连接阿里云服务器了。\[1\] 2. 安装C++所需的插件。主要有四个插件,其中一个是CMake。CMake是一个跨平台的项目构建工具,可以描述所有平台的编译过程并生成相应的makefile或project文件。你可以从CMake的官方网站下载对应你本地操作系统的版本,并将其解压到合适的目录中。然后,设置环境变量,可以通过右击计算机(此电脑)-> 属性 -> 高级系统设置 -> 环境变量来进行设置。\[2\] 3. 安装MinGW。你可以从MinGW的官方网站下载安装程序,并按照指示进行安装。注意,如果你选择直接下载编译好的二进制文件,需要将其替换到之前的安装路径下。同时,还需要配置环境变量,用户级的环境变量优先级高于系统级的环境变量。\[3\] 通过以上步骤,你就可以成功配置C++环境了。希望对你有帮助! #### 引用[.reference_title] - *1* [vscode配置C++环境](https://blog.csdn.net/qq_36819661/article/details/126102070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [VSCode 配置 C++ 环境](https://blog.csdn.net/neuzhangno/article/details/126444179)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值