IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 在VS2022 MFC程序中调用CUDA代码 -> 正文阅读

[开发工具]在VS2022 MFC程序中调用CUDA代码

在VS2022 MFC程序中调用CUDA函数

Pre: 安装好CUDA后VS中该有的效果

首先,假设你已经安装好了CUDA,并且成功集成在VS2022中(即新建项目有CUDA项目的选项,如下图所示)。
cuda_VS2022

你已经有一个MFC项目和一份CUDA项目,且都可以成功编译运行。
目标是,在MFC项目中调用CUDA项目中的函数:例如,想在MFC程序中点击某个按钮以调用GPU处理程序。
那么,除了新增一个按钮控件并添加处理程序之外,还要将CUDA函数集成到MFC项目中。

将CUDA函数集成到MFC项目中

1. 为项目添加CUDA配置

方法一:右键单击MFC项目,选中“生成依赖项—生成自定义”,如图所示。
Build_Customizations1
方法二:单击菜单栏,选择“生成自定义”,如图所示。
Build_Customizations2
均会弹出“Visual C++生成自定义文件”对话框。如下图所示,勾选CUDA那一项,点击“确定”即可。
Build_Customization_end

2. 把cuda代码添加到项目中

首先,将所有cuda项目的源代码复制到MFC项目文件夹下,并全部添加到MFC项目中。

  • 添加方式1:可以如下图所示,右键单击项目,选择"添加-现有项",在弹出的文件选择对话框中选中要添加的文件(可多选)。
  • 添加方式2:在文件资源管理器中选中要添加的文件(可多选),拖动到解决方案资源管理器的目标项目中。
    add_cuda_code

添加完成后,在解决方案资源管理器中选中这些.cu代码,单击右键菜单选中"属性",如下图所示,选择"项类型""CUDA C/C++"(这样,在生成过程会调用nvcc编译器将它们编成.obj文件);

如果无法选择‘项类型’为‘CUDA C/C++’,则有可能是第一步没做好。

project_property_cuda
并且,选择生成64位平台代码,如下图所示。
platform_cuda

3. 导出想调用的cuda函数定义

假定要调用的GPU处理函数为 void cuda_function_tobecalled(int number);,声明在’do_somethings.cu’中。

对代码作如下编辑:

extern "C" void cuda_function_tobecalled(int n);// 在函数声明前添加'extern "C" '以导出定义
 省略部分

void cuda_function_tobecalled(int n)
{
    // 省略,gpu运算代码
}

4. 创建CUDA的调用接口(非必须)

如果不想使用cuda_transfer这一套,可以直接在调用cuda_function_tobecalled的函数的定义之前添加上extern "C"语句导入定义。

添加一个cuda_transfer.h和一个cuda_transfer.cpp到项目中。

// cuda_transfer.h
// 不能在这里包含cuda相关的头文件
int cuda_function_caller(int n, double& time_elapsed);

// cuda_transfer.cpp
// 不能在这里包含cuda相关的头文件
#include "cuda_transfer.h"
#include<chrono>
#include<iostream>
using namespace std;

extern "C" cuda_function_tobecalled(int n);// 将要被调用的cuda函数,在它声明的位置被导出,在这里被导入。


void cuda_function_caller(int n, double& time_elapsed)
{
	chrono::time_point<chrono::high_resolution_clock> _start, _end;
	_start = chrono::high_resolution_clock::now();
	cuda_function_tobecalled(n);
	_end = chrono::high_resolution_clock::now();
	time_elapsed = chrono::duration_cast<chrono::microseconds>(_end - _start).count();//计时结束
}

后续其他cuda_transfer.h可以被其他文件包含,方便使用。
至此,配置已完成,生成MFC应用程序,即可运行。

给出没做第四步的示例VS2022工程

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:03:57  更:2022-04-28 12:04:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:53:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码