c++ 和cuda混合编程 VS2015 C++ 调用 cuda

2023-11-12

1 新建一个C++ 项目

2 右键添加一个cuda C/C++ file

3 添加下面 lib 库

右键项目->属性->链接器->输入->附加依赖项目:

cudart_static.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

4 关键一步 添加自定义生成

右键项目->属性->生成依赖项->自定义生成:

5. cuda.cu文件内容

#include <stdio.h>
#include <random>


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

__global__ void
vectorAdd(const float *A, const float *B, float *C, int numElements)
{
	int i = blockDim.x * blockIdx.x + threadIdx.x;

	if (i < numElements)
	{
		C[i] = A[i] + B[i];
	}
}


int mainCuda(void)
{
	// Error code to check return values for CUDA calls
	cudaError_t err = cudaSuccess;

	// Print the vector length to be used, and compute its size
	int numElements = 50000;
	size_t size = numElements * sizeof(float);
	printf("[Vector addition of %d elements]\n", numElements);

	// Allocate the host input vector A
	float *h_A = (float *)malloc(size);

	// Allocate the host input vector B
	float *h_B = (float *)malloc(size);

	// Allocate the host output vector C
	float *h_C = (float *)malloc(size);

	
	// Initialize the host input vectors
	for (int i = 0; i < numElements; ++i)
	{
		h_A[i] = rand() / (float)RAND_MAX;
		h_B[i] = rand() / (float)RAND_MAX;
	}

	// Allocate the device input vector A
	float *d_A = NULL;
	err = cudaMalloc((void **)&d_A, size);

	// Allocate the device input vector B
	float *d_B = NULL;
	err = cudaMalloc((void **)&d_B, size);

	// Allocate the device output vector C
	float *d_C = NULL;
	err = cudaMalloc((void **)&d_C, size);


	// Copy the host input vectors A and B in host memory to the device input vectors in
	// device memory
	printf("Copy input data from the host memory to the CUDA device\n");
	err = cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);

	err = cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);

	// Launch the Vector Add CUDA Kernel
	int threadsPerBlock = 256;
	int blocksPerGrid = (numElements + threadsPerBlock - 1) / threadsPerBlock;
	printf("CUDA kernel launch with %d blocks of %d threads\n", blocksPerGrid, threadsPerBlock);
	vectorAdd <<<blocksPerGrid, threadsPerBlock >>>(d_A, d_B, d_C, numElements);
	err = cudaGetLastError();

	// Copy the device result vector in device memory to the host result vector
	// in host memory.
	printf("Copy output data from the CUDA device to the host memory\n");
	err = cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);

	// Verify that the result vector is correct
	for (int i = 0; i < numElements; ++i)
	{
		if (fabs(h_A[i] + h_B[i] - h_C[i]) > 1e-5)
		{
			fprintf(stderr, "Result verification failed at element %d!\n", i);
			exit(EXIT_FAILURE);
		}
	}

	printf("Test PASSED\n");

	// Free device global memory
	err = cudaFree(d_A);

	err = cudaFree(d_B);

	err = cudaFree(d_C);


	// Free host memory
	free(h_A);
	free(h_B);
	free(h_C);

	printf("Done\n");
	return 0;
}

6. Main.cpp 文件内容

#include <stdio.h>
#include <stdlib.h>



extern int mainCuda(void);

void main()
{
	mainCuda();
	system("pause");
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 和cuda混合编程 VS2015 C++ 调用 cuda 的相关文章

  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • LINQ to XML - 如何正确使用 XDocument

    现在我首先要说的是 这确实是一项任务 然而 在我遇到 Linq to XML 语法之前 我几乎已经完成了它 我有 2 个课程 曲目和 CD 现在作为作业的一部分 我创建了一张 CD 然后向其中添加了一些曲目 在搜索了大量完美解释了如何从 x
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 阅读 Stack Overflow RSS 源

    我正在尝试获取未回答问题的列表the feed https stackoverflow com feeds 但我在阅读时遇到困难 const string RECENT QUESTIONS https stackoverflow com f
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • OpenMP C 程序运行速度比顺序代码慢

    我是 OpenMP 的新手 正在尝试并行化 Jarvis 的算法 然而事实证明 与顺序代码相比 并行程序花费的时间要长 2 3 倍 难道问题本身就不能并行化吗 或者我并行化它的方式有问题 这是我针对该问题的 openMP 程序 其中有 2
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再

随机推荐

  • 在数据库中如何快速查询数据,处理方法

    概述 那就是使用索引来解决此问题 索引是提高数据查询最有效的方法 也是最难全面掌握的技术 因为正确的索引可能使效率提高10000倍 而无效的索引可能是浪费了数据库空间 甚至大大降低查询性能 索引的管理成本 1 存储索引的磁盘空间 2 执行数
  • 泛微Ecology WebService API测试方法演示(带工具)

    目录 准备工具 测试步骤 准备工具 NET Web Service Studio 下载地址 测试步骤 1 打开工具窗口后 在WSDL EndPoint地址栏输入OA网址 services WorkflowService wsdl 2 点击G
  • Restful风格详解

    SpringMVC Restful风格及实例 参数的转换 一 Restful风格 1 Restful风格的介绍 Restful 一种软件架构风格 设计风格 而不是标准 只是提供了一组设计原则和约束条件 它主要用于客户端和服务器交互类的软件
  • 【华为OD机试真题 JAVA】机器人走迷宫

    标题 机器人走迷宫 时间限制 1秒 内存限制 65536K 语言限制 不限 1 房间由X Y的方格组成 例如下图为6 4的大小 每一个方格以坐标 x y 描述 2 机器人固定从方格 0 0 出发 只能向东或者向北前进 出口固定为房间的最东北
  • js实现自动打开浏览器是如何实现的?

    原理 针对不同的系统 使用Node js的子进程 child process 模块的spawn方法 调用系统的命令打开浏览器 具体命令 mac open https blog csdn net wswq2505655377 win star
  • Pytorch 图像处理中常用的注意力机制的解析与代码详解

    说在前面的前言 什么是注意力机制 代码下载 注意力机制的实现方式 1 SENet的实现 2 CBAM的实现 3 ECA的实现 注意力机制的应用 说在前面的前言 注意力机制是一个非常有效的trick 注意力机制的实现方式有许多 我们一起来学习
  • 解决pip下载慢的几种方式,最后一种一劳永逸

    我们下载模块的话 如果直接pip安装 一般下载会非常慢 运气不好 直接下载超时 因为默认是使用国外的源进行下载 不知道方法的话 直接弄一天也是有可能的 如果将下载源修改为国内的 那速度直接起飞 方法一 一般来说 我们可以直接在安装模块的时候
  • 快充技术

    为了规范快充标准 USB IF USB标准化组织 不久前发布了USB PD 3 0的重要更新 旨在一统快速充电技术规范的PPS Programmable Power Supply 以实现对高通QC4 0 3 0 联发科PE3 0 2 0 华
  • linux shell 数字等于怎么判断

    在 Linux shell 中可以使用等号 来判断一个变量是否等于某个数字 举个例子 如果要判断变量 x 是否等于 5 可以使用以下代码 if x eq 5 then echo x is equal to 5 else echo x is
  • 数据挖掘-可挖掘的数据类型

    可挖掘的数据类型 1 数据库数据 数据库系统 也成数据库管理系统 DBMS 由一组内部相关的数据 称作数据库 和一组管理和存取数据的软件程序组成 关系数据库是表的汇集 每个表都被赋予一个唯一的名字 每个表都包含一组属性 列或字段 并且通常存
  • 【Linux】用户和权限

    文章目录 前言 什么是 root 用户 su 命令和 exit 命令 sudo 命令 为普通用户配置 sudo 认证 用户 用户组管理 什么是Linux 用户和用户组 用户组管理 用户管理 创建用户 删除用户 查看用户所属组 将指定用户添加
  • SOCK_RAW PF_PACKET IPv6带物理地址发送报文

    通过link layer发送IPv4 IPv6 例子如下 http www pdbuchan com rawsock rawsock html 发送ipv4 http www pdbuchan com rawsock tcp4 ll c 发
  • onedrive的多电脑同步妙用

    序言 很多时候 一些问题与想法 必须要有多个设备的背景 概述 通过两台电脑的日常使用思考 展现OneDrive这一同步利器 以及OneDrive的理念与意义 正文 背景 三月份由于一些原因 入手了一个主机 原来的笔记本一下子变成了键盘托 想
  • svn在idea中的使用

    idea在使用svn之前需要对svn进行一下设置 svn默认是需要你去指定客户机自己安装的svn客户端 但这要求我们当初安装时需要将安装svn的 exe那个程序选上 一般大家安装时都不会安装 idea默认集成的也有svn 我们只要简单设置一
  • 6.带你入门matlab 协方差和相关系数( matlab程序)

    1 简述 协方差 V cov X V cov X flag 同上 X为矩阵 相关系数 R corr X X为矩阵 协方差和相关系数函数的使用如下 代码及运行结果 协方差 clear all X1 rand 1 5 c1 cov X1 方差
  • 常用的文件操作命令-重定向-管道符-笔记

    文件操作命令 mkdir 文件名 创建目录 mkdir 文件名 文件名 连续创建目录 mkdir p 文件名 文件名 递归创建目录 touch 文件 创建文件 rm rf 强制且不提醒删除文件 rmdir 删除目录 mv 文件名 新文件名
  • 解决Debian 11系统缺少无线网卡固件rtl8192cfw.bin

    解决Debian 11系统缺少无线网卡固件rtl8192cfw bin 一 先简单介绍解决办法 rtlwifi rtl8192cfw bin 是无线网卡的固件 其实缺少它网卡也是可以用的 只是不知道是不是这个原因导致丢包频繁 在CSDN找到
  • java 前缀树的实现,敏感词的匹配和标记

    目录 一 前缀树的介绍和定义 1 前缀树的定义 2 前缀树的结构 二 前缀树的实现 1 向前缀树中增加词语 2 向前缀树中删除词语 3 对于使用前缀树进行词语标识 4 前缀树的实现代码 三 前缀树使用及测试 1 向前缀树上增加词语 2 根据
  • 【计算机视觉

    文章目录 一 检测相关 13篇 1 1 Polygon Intersection over Union Loss for Viewpoint Agnostic Monocular 3D Vehicle Detection 1 2 Radar
  • c++ 和cuda混合编程 VS2015 C++ 调用 cuda

    1 新建一个C 项目 2 右键添加一个cuda C C file 3 添加下面 lib 库 右键项目 gt 属性 gt 链接器 gt 输入 gt 附加依赖项目 cudart static lib kernel32 lib user32 li