windows 环境 Visual Studio 2022 新建 cmake 工程测试 cuda 代码编译

news2024/12/26 11:01:40

1. 参考博客:

        1. 【CUDA】CUDA编译:https://blog.csdn.net/u011285477/article/details/104408296

2. 项目文件夹结构:        

c_cuda/
    cuda/
        CMakeLists.txt
        foo.cu
        foo.cuh
    CMakeLists.txt
    main.cpp
    

3. 完整代码:

        1. c_cuda/CMakeLists.txt:

# CMakeLists.txt for G4CU project
 
project(project)
 
# required cmake version
cmake_minimum_required(VERSION 2.8)
 
add_subdirectory(cuda)
set (EXTRA_LIBS ${EXTRA_LIBS} gpu)
 
ADD_EXECUTABLE(project main.cpp)
 
target_link_libraries (project ${EXTRA_LIBS})


        2. c_cuda/main.cpp:

#include <stdio.h>
#include <iostream>
 
extern "C" void useCUDA();
 
int main()
{
    std::cout<<"Using C++"<<std::endl;
    useCUDA();
    return 0;
}

        3. c_cuda/cuda/CMakeLists.txt:

# CMakeLists.txt for G4CU project
 
project(gpu)
 
# required cmake version
cmake_minimum_required(VERSION 2.8)
 
# packages
find_package(CUDA)
 
#include_directories ("${PROJECT_SOURCE_DIR}")
 
# nvcc flags
# set(CUDA_NVCC_FLAGS -O3;-G;-g;-allow-unsupported-compiler)
set(CUDA_NVCC_FLAGS -G;-g;-allow-unsupported-compiler)
 
#set(CUDA_NVCC_FLAGS -gencode arch=compute_20,code=sm_20;-G;-g)
#set(CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52;-G;-g)
 
file(GLOB_RECURSE CURRENT_HEADERS  *.h *.hpp *.cuh)
file(GLOB CURRENT_SOURCES  *.cpp *.cu)
 
source_group("Include" FILES ${CURRENT_HEADERS}) 
source_group("Source" FILES ${CURRENT_SOURCES}) 
 
#cuda_add_library(gpu SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES})
cuda_add_library(gpu STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES})

        4. c_cuda/cuda/foo.cu:

#include "foo.cuh"
 
#define CHECK(res) { if(res != cudaSuccess){printf("Error :%s:%d , ", __FILE__,__LINE__);   \
printf("code : %d , reason : %s \n", res,cudaGetErrorString(res));exit(-1);}}
 
__global__ void foo()
{
    printf("CUDA!\n");
}
 
void useCUDA()
{
    foo<<<1,5>>>();
    CHECK(cudaDeviceSynchronize());
}

        5. c_cuda/cuda/foo.cuh:

#ifndef FOO_CUH
#define FOO_CUH
 
#include <stdio.h>
 
extern "C" 
void useCUDA();
 
#endif

4. 使用 Visual Studio 2022 打开 c_cuda 工程:

        1. 双击桌面图标 "Visual Studio 2022"

        2. 点击 "继续但无需代码( W ) ->"

        3. 点击左上角 "文件" --》"打开"--》"CMake",选中 c_cuda/CMakeLists.txt,点击 "打开"

        4. 等就绪后,没有报错信息,c_cuda 下生成了 out\build\x64-Debug 文件夹:

        5. 点击 Visual Studio 2022 顶部导航栏的 "生成" --》"全部生成",成功生成了 project.exe:

         6. 执行 project.exe:

可以将 xxx 中的:

__global__ void foo()
{
    printf("CUDA!\n");
}

修改为 :

__global__ void foo()
{
    while( true ){
        printf("CUDA!\n");
    }
}

重新编译、运行,鼠标移动到屏幕下方,右键 --》"任务管理器"--》切换到 "性能" tab页,发现确实是在吃 GPU。

可能报错的解决方法:

        1. 如果报如下错:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\include\crt/host_config.h(153): 
fatal error C1189: #error:  -- unsupported Microsoft Visual Studio version! 
Only the versions between 2017 and 2022 (inclusive) are supported! 
The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; 
however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. 
Use at your own risk.

        可能是因为 c_cuda/cuda/CMakeLists.txt 中的 set(CUDA_NVCC_FLAGS  后面没加 -allow-unsupported-compiler 标记

        2. 如果点击 "生成" --》"全部生成" 时,报如下错:

  可能是因为 c_cuda/cuda/CMakeLists.txt 中的 set(CUDA_NVCC_FLAGS  后面加了 -O3 标记,去掉就行了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

只有IP地址怎么部署HTTPS证书

只有IP地址可以申请部署SSL证书。SSL证书不仅能够通过域名进行申请&#xff0c;还可以通过IP地址进行申请和部署。在两种情况下&#xff0c;SSL证书的主要作用是确保网站或服务器与客户端之间的数据传输安全。以下是对SSL证书的相关介绍&#xff1a; 一、选择证书服务商并注册…

初普,stop,射频美容仪拆机图

初普&#xff0c;stop&#xff0c;射频美容仪拆机图

新手教程——HyperMesh静力学分析步骤

仿真技术的飞速发展&#xff0c;为产品在产前进行风险技术性评估&#xff0c;保证设计质量、提高产品设计水平提供了广阔的舞台。而有限元分析已经成为机械类产品仿真分析的关键手段。通过应用有限元分析&#xff0c;在生产制造前的设计阶段&#xff0c;运用现代技术充分反映设…

vue给数组对象赋值改变对象里面的数据,数据没有更新this.$set

替换数组startTime的值&#xff1a; 原数据 this.serviceTimeList.push({serviceTimeName: 服务时间段,startTime: this.startTime,endTime: this.endTime,currentDateStart: this.currentDate,currentDateEnd: this.currentDate}) this.$set(this.array, index, newValue); …

springboot 基于mybatis plus 整合clickHouse以及mysql (多数据源)

一.服务安装 docker安装clickhouse数据库_docker 安装clickhouse-CSDN博客 使用idea链接clickHouse 执行创建数据库 create database student; -- auto-generated definition create table web_visits (date Date default toDate(datetime),datetime DateTime def…

【Dash】Dash链接 csv/excel 文件

一、Dash如何连接csv数据&#xff1f; There area many ways to add data to an app: APIs, external databases, local .txt files, JSON files, and more. In this example, we will highlight one of the most common ways of incorporating data from a CSV sheet. # Imp…

使用 useState 管理响应式状态

title: 使用 useState 管理响应式状态 date: 2024/8/1 updated: 2024/8/1 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了在Nuxt3框架中使用useState进行响应式状态管理的方法&#xff0c;包括其基本概念、优势、使用方法、共享状态实现以及性能优化技巧。useSt…

职业教育大数据实验实训室建设应用案例

大数据作为一种重要的信息技术&#xff0c;对各行各业产生了深远的影响。职业教育作为培养应用型人才的摇篮&#xff0c;建设大数据实验实训室&#xff0c;对于提高学生的数据分析能力和解决实际问题的能力具有重要意义。唯众作为一家专注于教育技术领域的企业&#xff0c;凭借…

职场成功全攻略:从简历到薪资谈判的秘诀分享

进入职场是一场漫长而精彩的旅程&#xff0c;它不仅仅是一份工作&#xff0c;更是个人成长、技能提升和实现价值的过程。本篇博客旨在为正在求职或期望在职场更进一步的您提供全面指导&#xff0c;内容涵盖简历制作、面试准备、薪资谈判、职场规划、技能评估到求职策略等多个方…

非递归的快速排序

其实&#xff0c;我们快速排序还有一种更加快的方法就是不采用递归的方法&#xff0c;那就是非递归&#xff0c;所以这一篇文章我们就研究这个非递归到底怎么实现。 首先&#xff0c;我们先思考一个问题&#xff1a;递归的时候&#xff0c;我们存到栈里面的到底是什么&#xf…

密码模块学习笔记(GMT0028)

GMT 0028-2014《密码模块安全技术要求》 GM/T 0028 四个安全等级 11个安全域&#xff1a;密码模块规格&#xff1b;密码模块接口&#xff1b;角色、服务和鉴别&#xff1b;软件/固件安全&#xff1b;运行环境&#xff1b;物理安全&#xff1b;非入侵式安全&#xff1b;敏感安…

学习3dMax需要多久才能从入门到高级3D建模师

学习3dMax需要多久才能从入门到高级3D建模师 学习3dMax从入门到成为高级3D建模师的时间因个体差异而不同&#xff0c;没有一个固定的时间框架。这取决于多种因素&#xff0c;包括你的学习能力、先前是否有相关软件或艺术的经验、投入的时间和精力、以及你学习的深度和广度。不过…

七夕送礼物首选:浪漫实用又出圈,有谁能拒绝?

七夕不知道送什么的看过来&#xff0c;那今天给大家安利一个女生收到都会疯狂爱上的节日礼物——华为FreeBuds Lipstick 2 口红耳机。既浪漫、时尚又实用高级&#xff0c;节日和生日、纪念日送都很合适。 外观包装&#xff1a;精致如她&#xff0c;一见倾心 为什么首选推荐这…

QListView实现自定义的控件展示(可以根据选中与否置顶展示)

文章目录 0 问题引入1、方案1&#xff1a;使用QListwidget自定义的widget1.1 效果1.1 思路 2、方案2&#xff1a;使用QListView自定义model自定义delegate2.1.浅谈2.2.实现 3、总结4、引用 0 问题引入 问题&#xff1a;有人问我如何实现上图的功能&#xff0c;当时我脑海里有了…

kerberos认证流程

kerberos 认证3步骤 1&#xff0c;生活场景 你进入某公司要见领导 首先第一次跟保安打交道&#xff0c;沟通完了&#xff0c;保安告诉你助理的办公室位置和一封信&#xff08;你看不懂&#xff0c;助理看的懂&#xff09; 2&#xff0c;你到了助理办公司&#xff0c;助理拿你的…

【LLM微调】Llama3.1-8B模型中文版!OpenBuddy发布新一代跨语言模型

简介&#xff1a; 7月23日&#xff0c;Meta发布了新一代开源模型系列&#xff1a;Llama3.1。其中405B参数的版本刷新了开源模型性能的上限&#xff0c;在多种指标上的测试成绩接近GPT-4等闭源模型的水平&#xff0c;甚至在部分基准测试中展现出来了超越头部闭源模型的潜力。 本…

折叠想象,「天池AI IP形象征集大赛」火热进行中!

天池十周年&#xff0c;我们诚挚邀请各路创作人才围绕「天池平台Al形象」进行创意施展&#xff0c;借助AIGC技术&#xff0c;创造属于天池的独一无二的Al IP形象。我们渴望见到充满“活力、创新、智能〞风格的Al IP设计浮出水面&#xff0c;它将成为天池平台的Al 官方形象&…

Python 中的 NotImplemented 和 NotImplementedError

前言 Python 中的 NotImplemented 和 NotImplementedError 很像&#xff0c;都用来表示没有实现的意思。它们具体有什么区别呢&#xff1f; NotImplemented NotImplemented 是 Python 中的一个特殊常量&#xff0c;注意它不是一个异常类&#xff0c;是一个值。所以它是用在 …

TCP 和 UDP 之间的区别?

从 连接&#xff0c;可靠性&#xff0c;传输方式等方面&#xff1a; TCP 是面向连接的协议&#xff0c;在发送数据的时候需要先通过 TCP 的三次握手&#xff0c;而 UDP 是无连接的协议&#xff0c;可以直接传输数据TCP 通过超时重传&#xff0c;流量控制和拥塞控制等方法保障了…

聚芯前行|美格智能亮相2024 ChinaJoy骁龙主题馆,展现数字娱乐的无限可能

7月26日&#xff0c;2024中国国际数码互动娱乐展览会&#xff08;ChinaJoy&#xff09;在上海新国际博览中心正式拉开帷幕。美格智能携手高通公司亮相骁龙主题馆&#xff0c;以5G-A毫米波MiFi解决方案及高算力AI模组&#xff0c;共同为广大玩家和粉丝打造了一个前沿技术赋能、充…