C++多线程
文章平均质量分 76
A11en3
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++并发编程实战 #2 在线程间共享数据
在C++中,通过构造mutex的实例来创建互斥,调用成员函数lock()对其进行加锁,调用unlock()进行解锁。不推荐直接使用成员函数进行加锁和解锁,因为若按此处理,则在函数的每条代码路径上都要调用unlock(),包括由于异常导致退出的路径。因此,使用lock_guard<>来进行加锁和解锁。其在构造时给互斥加锁,在析构时解锁,从而保证互斥总被正确解锁。原创 2024-06-10 10:18:02 · 375 阅读 · 0 评论 -
C++并发编程实战 #1 线程管控
如果给定一个线程,只要令thread对象与之关联,就能管控该线程的几乎每个细节。每个C++程序都至少有一个线程,即运行main()的线程,它由C++运行时系统启动。随后,可以发起更多线程,以别的函数作为入口。main()函数返回时,程序就会推出;同样,当入口函数返回时,对应线程随之结束。原创 2024-05-21 21:11:33 · 1064 阅读 · 0 评论 -
CUDA编程模型#2
在CUDA程序中,有两组不同的网格和块变量:手动定义的dim3数据类型和预定义的uint3数据类型。当执行核函数时,CUDA运行时会生成相应的内置预初始化的网格、块和线程变量,它们在核函数内均可被访问到且为uint3类型。同一网格中的所有线程共享相同的全局内存空间。一个网格由多个线程块构成,一个线程块包含一组线程,同一线程块内的线程协作可以通过以下方式来实现。该坐标变量是基于uint3定义的cuda内置的向量类型,是一个包含3个无符号整数的结构,可以通过x,y,z三个字段来指定。不同块内的线程不能协作。原创 2023-09-27 21:40:02 · 136 阅读 · 0 评论 -
CUDA编程模型
CUDA提出了一个线程层次结构抽象的概念,以允许控制线程行为。在硬件层,理解线程是如何映射到核心可以帮助提高其性能。内核(kernel)是CUDA编程模型的一个重要组成部分,其代码在GPU上运行。在GPU上编写核函数,在主机端,基于应用程序数据及GPU性能定义如何让设备实现算法功能。多数情况下,主机可以独立地对设备进行操作。内核一旦被启动,管理权立刻返回给主机,释放CPU来执行由设备上运行的并行代码实现的额外任务。原创 2023-09-21 21:39:53 · 197 阅读 · 0 评论 -
基于CUDA的异构并行计算
基于《CUDA C编程 权威指南》在并行算法的实现中,分析数据的相关性是最基本的内容,因为相关性是限制并行计算的一个主要因素。在大多数情况下,具有依赖性的任务之间的独立的关系链为并行化提供了和好的机会。原创 2023-09-20 22:24:27 · 251 阅读 · 1 评论 -
C++ CUDA编程#2
核函数可以调用不带执行配置的自定义函数,即设备函数。设备函数在设备中执行、在设备中被调用;而核函数在设备中执行、在主机中被调用。__global__修饰的函数称为核函数,一般由主机调用、在设备中执行;__device__修饰的函数称为设备函数,只能被核函数或其他设备函数调用、在设备中执行;__host__修饰主机段的普通 c++ 函数,在主机中被调用、在主机中执行,一般可以省略;可以同时用__host__和__device__修饰函数,从而减少代码冗余,此时编译器将 分别在主机和设备上编译该函数。原创 2023-08-31 17:20:18 · 233 阅读 · 0 评论 -
C++ CUDA编程#1
基于《cuda编程-基础与实践》CUDA 提供两层 API,即 CUDA 驱动API 和 CUDA 运行时API。CUDA 开发环境中,程序应用程序是以主机(CPU)为出发点的;应用程序可以调用 CUDA 运行时 API、CUDA 驱动 API 和一些已有的 CUDA 库。CUDA 采用 nvcc 作为编译器,支持 C++ 代码;nvcc 在编译 CUDA 程序时,会将纯粹的 c++ 代码交给 c++ 编译器,自己负责编译剩下的 cu 代码。CUDA程序的后缀是.cu而不是.cpp。原创 2023-08-30 16:41:20 · 452 阅读 · 0 评论
分享