C++多线程及CUDA编程(一)

一、前言

       这是我的第一篇博客,目的是记录在研究生阶段进行的多线程并行计算,主要用到的是VS2013与CUDA8.0,前者安装比较方便,后者配置起来有些麻烦,会遇到一些小问题导致无法进行Debug。希望我所分享的经验能够让我牢记其用法以及给对这方面有兴趣的人一些启发。

二、CUDA8.0的安装及配置

(1)首先请去点击打开链接下载CUDA8.0,选择合适版本。特别注意的network与local的区别,network是先下一个安装器,但是安装的时候需要联网下载,需要很长时间(博主连接超时),local就是下载完整的本地安装文件。

(2)开始安装请选择自定义安装并勾掉Driver components(如果不是3D绘图一类),然后进行安装。如果没有错误恭喜你,你非常幸运,你将会跳过如下步骤。

       如果显示安装失败,首先要记住软件CUDA Setup Package的存放目录,将此目录内的CUDAVisualStudioIntegration文件夹拷贝出来放到一个自己好找的地方,然后请勾掉CUDA->visual stdio integration这项进行安装。 如下图:

                         

       安装完毕后我们要完善Visaul Studio Integation的安装,打开VS2013我们发现,虽然上述VS已可以正常编译,但毕竟不是完整安装CUDA,因此缺失了VS中“新建CUDA解决方案”的功能,如下图:

       这时候只需要将之前保存的CUDAVisualStudioIntegration\extras\visual_studio_integration下的CudaProjectVsWizards文件夹整体拷贝到“D:\ProgramFiles\Microsoft Visual Studio 12.0\Common7\IDE\Extensions”下即可(请参考自己的目录),其中加粗部分为VS安装路径。重启VS,问题解决 。

       最后的最后,还可以把CUDAVisualStudioIntegration下的NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.2.0.16321安装一下,它是CUDA给VS2013提供的一个调试插件。

(3)环境变量的设置。有关内容可以百度,并不困难。可参考此链接点击打开链接

(4)VS2013内配置CUDA。可参考此链接点击打开链接

       到此为止VS2013已经配置上CUDA了,可以愉快的进行CUDA之旅了。可以建立一个CUDA8.0的工程,添加一个.cu文件,进行简单的CUDA编程测试。例如简单的Hello World程序。

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

__global__ void HelloFromGPU(void)
{
	printf("Hello World From GPU!\n");
}

int main(void)
{
	printf("Hello World From GPU!\n");

	HelloFromGPU <<<1, 10>>>();

	cudaDeviceReset();


	while (true)
	{
		
	}
	return 0;
}

三、C++11中的多线程

        针对多线程,首先要介绍几个定义,方便对多线程编程的理解。

      (1)并发,即多个任务同时执行,广泛用于提高吞吐率或提高响应能力;

      (2)线程(thread),线程是计算的概念在计算机硬件层面的抽象。在C++程序中多个任务需要并发执行时,就可以使用线程thread;

      (3)互斥量(mutex),互斥量是一种同步原语,是一种线程同步的手段,用来保护多线程同时访问的共享数据; 

       (4)原子变量(atomic),C++11提供了一个原子类型std::atomic<T>,可以使用任意类型作为模板参数,使用原子变量就不需要使用互斥量来保护变量,运用更加简洁。

        在开始多线程编程之前我们需要对thread库有一个了解,这个库包含了对线程的创建于管理。可以查阅这个网站了解有关知识http://www.cplusplus.com/reference/thread/thread/。其中thread内的成员函数有thread::get_id(获取线程ID),thread::join(阻塞式),thread::detach(分离式),thread::swap(交换线程);静态成员函数thread::hardware_concurrency用来获取当前主机的核心数,其数越高支持线程数越多。(多个子线程并行执行,join函数会阻塞主流程,所以子线程都执行完成之后才继续执行主线程。可以使用detach将子线程从主流程中分离,独立运行,不会阻塞主线程)下面是简单的创建线程及多线程的例子。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CUDA编程指南8.0中文版本是一份详细的关于基于NVIDIA GPU的CUDA编程的指南。它由NVIDIA公司编写,为初学者以及有经验的CUDA程序员提供了重要的参考和指导。 此指南涵盖了各种主题,包括基础的CUDA编程概念,数据并行性、控制流、共享内存、纹理内存等,并且提供了很多实例代码,从而使读者能够更好地理解这些概念。 在本指南中,读者将学习如何使用CUDA C/C++进行GPU编程,并了解如何构建高性能、高效的GPU应用程序。该指南还介绍了NVIDIA CUDA平台和构建CUDA代码的过程,并提供了许多常用的编程技巧和最佳实践的指导。 其中,8.0版本相较于之前的版本,更充分地考虑了Pascal GPU架构,支持全新的CUDA8.0特性,如无符号整型原子操作、可扩展的每线程等等。 总之,该指南是CUDA编程的权威指南,对于想要快速学习CUDA编程以及对GPU加速有兴趣的程序员来说,是一份难得的学习材料。 ### 回答2: CUDA编程指南8.0中文是一本介绍CUDA编程的书籍,由NVIDIA公司出版。CUDA是一种使用GPU进行并行计算编程模型,可以极大地提高计算效率。本书详细介绍了CUDA编程的基本概念、语法、编程技巧、优化方法等内容,涵盖了从入门到进阶的全系列内容。 本书的前半部分介绍了CUDA编程的基本概念和语法,通过讲解线程、线程块、网格等概念,帮助读者建立起对CUDA编程的直观认识。同时,本书也详细讲解了CUDA的数据类型、内存管理、设备函数、共享内存、纹理内存等重要概念,使读者能够熟练运用这些技术解决实际问题。 本书的后半部分介绍了如何使用CUDA进行优化,包括并行算法、性能分析、调试技巧、内存优化、分布式编程等内容。这些内容对于那些希望将CUDA运用于实际应用中的开发者来说非常有用,能够帮助他们更好地利用GPU的性能优势,提高应用程序的执行效率。 总的来说,CUDA编程指南8.0中文是一本非常实用的CUDA编程教材,是学习CUDA编程必不可少的参考资料。对于那些希望了解CUDA编程并能够自行编写CUDA程序的人来说,这本书绝对是最佳的选择。 ### 回答3: CUDA编程指南8.0中文版是为了帮助开发人员更好地了解CUDA程序设计而编写的一本指南。该指南介绍的主要是基于NVIDIA GPU加速计算的相关知识,目的是让开发人员可以利用GPU提高计算效率、加速计算速度,从而为科学计算和工业应用等领域带来更高的性能和效率。 这本指南包括了CUDA的基础概念,包括线程、块、网格、共享内存、纹理内存、原子操作等,以及CUDA 8.0引入的新功能,如CUDA Runtime API、CUDA Graph、共享内存优化等。此外,指南还通过丰富的代码示例,展示了如何使用CUDA来开发高效的并行计算程序。它还介绍了如何使用CUDA工具来调试和优化CUDA程序,包括CUDA统计分析器、CUDA线程检查器和CUDA延迟检查器等。 除了指南本身外,CUDA编程指南8.0中文版还提供了很多配套资源,包括代码示例、编程工具和CUDA加速库等,这些资源可让开发人员更快地掌握CUDA编程技巧和应用方法。 总之,CUDA编程指南8.0中文版是一本非常有价值的指南,它提供了丰富的理论和实践知识,帮助开发人员更好地理解和应用CUDA程序设计的能力,从而更好地利用GPU加速计算。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖晴的天

予人玫瑰,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值