自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 Thread model: posix

在并行计算和多线程编程中,"Thread model" 指的是线程的创建、管理和同步的方式。"POSIX" 是 Portable Operating System Interface 的缩写,它是一个IEEE标准,定义了操作系统应该为应用程序提供的一系列接口,包括线程管理。它提供了一组API,允许程序创建和管理线程,以及进行线程间的同步。使用POSIX线程模型可以让程序员编写可移植的多线程应用程序,因为POSIX标准在多种操作系统上都有实现。在这个例子中,我们定义了一个简单的线程函数。

2024-09-10 16:12:39 233

原创 std::fixed

是一个 I/O 流操作符,用于设置浮点数的输出格式为固定小数点表示法,而不是科学计数法。这意味着当输出浮点数时,数值将按照指定的小数位数来显示,而不会以。这两个操作符会影响后续的输出操作,直到流格式被改变。如果你想将这些格式设置应用于文件输出,你可以将。)一起使用,以控制浮点数的输出格式。设置了小数点后显示两位数字。中,并且按照同样的格式设置。

2024-09-09 17:05:28 187

原创 iomanip库

是一个预处理器指令,用于引入 I/O 流操作库(Input/Output Manipulators Library)。这个库提供了一组操作符,可以用来控制输入输出流的格式,如设置浮点数的精度、调整输出字段的宽度、对齐方式等。首先以默认精度打印,然后以 4 位小数的精度打印。声明,以便可以直接使用这些操作符而不需要。打印时使用了不同的对齐方式和宽度。在 C++ 编程语言中,

2024-09-09 16:17:11 217

原创 csv文件

CSV 文件(Comma-Separated Values,逗号分隔值)是一种常用的文件格式,用于存储表格数据,如电子表格或数据库中的数据。CSV 文件以纯文本形式存储,其中的每一行代表数据表中的一行,而行中的每个字段通常由逗号分隔。CSV 文件由于其简单性和通用性,被广泛用于数据交换和备份。

2024-09-09 16:08:53 258

原创 FLT_MAX

这意味着在单精度浮点数的表示范围内,任何大于这个值的数都将被视作无限大(infinity)。可以用来初始化变量,作为比较的基准,或者在算法中表示一个非常大的数。例如,如果你在寻找一组浮点数中的最大值,你可以将初始的最大值设置为。来访问,这是 C++ 标准库的一部分,它提供了对 C 标准库中浮点数限制的访问。可以帮助程序员处理浮点数的边界情况,避免因超出浮点数的表示范围而导致的溢出错误。在 C++ 中,这些值也可以通过包含头文件。,这样任何实际的数值都会比这个初始值小。中定义的一个宏,它表示单精度浮点数(

2024-09-09 15:57:06 129

原创 CMakeLists.txt 和 Makefile

和Makefile都是用于自动化编译和构建软件项目的配置文件,但它们在构建系统中扮演不同的角色,并且使用不同的构建工具。

2024-09-09 15:44:52 379

原创 Transiting from CUDA to HIP(三)

在 HIP (Heterogeneous-compute Interface for Portability) 中,为了提供一个统一的编程模型并简化开发过程,而不是提供两个独立的 API 集,HIP 通过引入新的模块(Modules)和上下文(Ctx)控制 API 来扩展其功能。例如,如果开发者在代码中混合使用了 HIP 运行时 API 和驱动 API,那么在某些情况下,HIP-Clang 可能会自动创建和销毁上下文,而开发者可能并不期望这种行为。你只需要选择一个设备,然后直接在这个设备上运行你的代码。

2024-09-04 18:10:16 1188

原创 Transiting from CUDA to HIP (二)

为了解决这个问题,HIP(Heterogeneous-compute Interface for Portability)提供了一套宏定义,使得开发者可以编写可移植的代码,这些代码可以在 NVIDIA 的 CUDA 平台和 AMD 的 ROCm 平台上运行。是一个预定义的宏,用于指示当前编译的代码所针对的 NVIDIA GPU 的计算能力(Compute Capability)。为了正确编译包含 HIP 代码的文件,您需要确保编译器能够找到 HIP 的头文件,并且定义了正确的宏。

2024-09-03 17:37:40 1370

原创 Transiting from CUDA to HIP(一)

设置。

2024-09-02 23:07:45 878

原创 Debugging HIP

而在NVIDIA平台上,它返回的是CUDA运行时的版本号。追踪还可以显示与关键路径上意外调用昂贵 API 调用相关的性能问题(在性能上成本较高,可能是因为这些 API 调用涉及到大量的计算、内存使用、磁盘 I/O 或网络通信等,从而导致程序执行效率降低或响应时间延长)。在 GPU 编程中,内核(Kernel)排队序列化是一个重要的概念,它可以帮助开发者控制内核命令的执行顺序。这些环境变量主要用于调试和性能分析,它们可以强制 HIP 运行时在特定的点进行同步,从而帮助开发者诊断潜在的同步问题或性能瓶颈。

2024-08-29 10:10:09 960

原创 HIP Logging

HIP(Heterogeneous-compute Interface for Portability)提供了一种日志记录机制,可以帮助追踪 HIP API 和运行时代码的执行情况。

2024-08-28 17:10:53 219

原创 ROCm Code Object Tooling

ROCm(Radeon Open Compute)提供了一系列的工具,用于检查和提取编译器生成的代码对象,包括可执行文件、目标文件和共享对象库。

2024-08-28 16:57:05 663

原创 Rocm-HIP kernel language

这些类型作为结构体在。

2024-08-28 16:22:11 932

原创 Rocm-Programming with HIP 内存分配

使用 HIP Graph,开发者可以创建一个包含多个执行节点(如内核执行、内存复制等)的图形化任务依赖结构,然后提交给 GPU 执行,从而实现更细粒度的性能优化和资源管理。hipRTC 提供了一个灵活的方式来编译和执行 GPU 代码,允许在不同的运行时条件下进行优化,并且可以简化开发流程,因为不需要在编译时生成和处理二进制内核对象文件。提供了一种方式来分配可以被 GPU 直接访问的主机内存,这可以用于加速数据传输和实现零拷贝访问,但同时也需要考虑内存访问模式和数据一致性的需求。

2024-08-26 20:37:17 1157

原创 简述库文件

库文件是一种包含预先编译的代码、资源或数据的文件,它允许开发者在不同的程序中重复使用这些代码和资源,而无需每次都重新编写。库文件可以包含函数、类、变量、宏定义等,它们是软件开发中代码复用和模块化的关键组成部分。静态库(Static Library)通常以.lib(在Windows上)或.a(在Unix-like系统上)为文件扩展名。包含编译后的代码,但不是可执行的。在编译最终程序时,静态库中的代码会被复制到最终的可执行文件中。动态链接库(Dynamic Link Library,简称DLL)

2024-08-26 15:40:30 735

原创 CUDA C权威编程指南 第4章 全局内存

对于程序员来说,一般有两种类型的存储器:· 可编程的:你需要显式地控制哪些数据存放在可编程内存中· 不可编程的:你不能决定数据的存放位置,程序将自动生成存放位置以获得良好的性能在CPU内存层次结构中,一级缓存和二级缓存都是不可编程的存储器。CUDA内存模型提出了多种可编程内存的类型:寄存器、共享内存、本地内存、常量内存、纹理内存、全局内存。一个核函数中的线程都有自己私有的本地内存。一个线程块有自己的共享内存,对同一线程块中所有线程都可见,其内容持续线程块的整个生命周期。所有线程都可以访问全局内存。

2024-06-18 20:48:14 914

原创 CUDA C编程权威指南 第3章 CUDA执行模型

CUDA编程模型中两个主要的抽象概念:内存层次结构和线程层次结构。它们能够控制大规模并行GPU。GPU架构是围绕一个流式多处理器(SM)的可扩展阵列搭建的。GPU中每一个SM都能支持数百个线程并发执行,每个GPU通常有多个SM,所以在一个GPU上并发执行数千个线程是可能的。当启动一个内核网格时,它的线程块被分布在了可用的SM上来执行。多个线程块可能会被分配到同一个SM上,而且是根据SM资源的可用性进行调度的。

2024-06-15 12:06:58 717

原创 C++ Primer 第五版 第16章 模板与泛型编程

一个函数模板(function template)就是一个公式,可用来生成针对特定类型的函数版本。模板定义以关键字template开始,后跟一个模板参数列表(template parameter list),这是一个逗号分隔的一个或多个模板参数的列表,用小于号(<)和大于号(>)包围起来。在模板定义中,模板参数列表不能为空。模板参数表示在类或函数定义中用到的类型或值。当使用模板时,我们(隐式地或显式地)指定模板实参(template argument),将其绑定到模板参数上。

2024-06-13 21:22:54 942

原创 C++ Primer 第五版 第15章 面向对象程序设计

面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。任何构造函数之外的非静态函数都可以是虚函数。关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义。如果基类把一个函数声明成虚函数,则该函数在派生类中隐式地也是虚函数。

2024-06-03 21:30:01 1059

原创 C++ prime 第五版 第14章 重载运算与类型转换

一、基本概念重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说,它或者说类的成员,或者至少含有一个类类型的参数。直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义选择作为成员或者非成员二、输入和输出运算符IO标准库分别使用>>和<&

2024-05-26 14:35:27 314

原创 CUDA C变成权威指南 第二章 CUDA编程模型

CUDA6.0开始提出统一寻址(Unified Memory),它连接了主机内存和设备内存空间,可使用单个指针访问CPU和GPU内存。主机代码按照ANSI C标准进行编写,而设备代码使用CUDA C进行编写。一个典型的CUDA程序实现流程遵循以下模式。1. 把数据从CPU内存拷贝到GPU内存。2.调用核函数对存储在GPU内存中的数据进行操作。3.将数据从GPU内存传送回到CPU内存。

2024-05-22 21:46:16 594 1

原创 C++ Primer 第五版 第十三章 拷贝控制

在新标准下,我们可以通过将拷贝构造函数和拷贝赋值运算符定义为删除的函数(deleted function)来阻止拷贝。删除的函数是这样一种函数:我们虽然声明了它们,但不能以任何方式使用它们。在函数的参数列表后面加上=deleted来指出我们希望将它定义为删除的。=delete通知编译器(以及我们代码的读者),我们不希望定义这些成员。与=default不同,=delete必须出现在函数第一次声明的时候。

2024-05-22 12:05:50 1078

原创 C++ Primer 第五版 第12章 动态内存

定义一个名为StrBlob的类,保存一组元素。与容器不同,我们希望StrBlob对象的不同拷贝之间共享相同的元素。即,当我们拷贝一个StrBlob时,原StrBlob对象及其拷贝应该引用相同的底层元素。我们使用vector来保存元素。将vector保存在动态内存中,为每个StrBlob设置一个shared_ptr来管理动态分配的vector。次shared_ptr的成员将记录有多少个StrBlob共享相同的vector,并在vector的最后一个使用者销毁时释放vector。StrBlob构造函数。

2024-05-17 10:10:51 695

原创 CUDA C 编程权威指南 第一章 基于CUDA的异构并行计算

CUDA(Compute Unified Device Architecture, 统一计算设备架构)是NVIDIA提出的并行计算架构,主要用来处理密集型及并行计算。GPU和CPU是两个独立的处理器,通过单个计算节点中的PCI- Express总线相连,GPU用来提高计算密集型应用程序中并行程序段的执行速度,CPU则负责管理设备端的资源。

2024-05-14 21:05:15 1186

原创 C++ Primer 第五版 第十一章 关联容器

关联容器不支持顺序容器的位置相关的操作,例如push_front或push_back。关联容器也不支持构造函数或插入操作这些接受一个元素值和一个数量值的操作。关联容器的迭代器都是双向的。1. 定义关联容器每个关联容器都定义了一个默认构造函数,它创建一个指定类型的空容器。我们也可以将关联容器初始化为另一个同类型容器的拷贝,或者是从一个值范围来初始化关联容器,只要这些值可以转化为容器所需类型就可以。

2024-05-14 13:09:55 787

原创 C++ Primer 第五版 第十章 泛型算法

除了少数例外。标准库算法都对一个范围内的元素进行操作。我们将此元素范围称为“输入范围”。接受输入范围的算法总是使用前两个参数来表示此范围,两个参数分别是指向要处理的第一个元素和尾元素之后位置的迭代器。

2024-05-11 17:27:30 908

原创 C++ Primer 第五版 第九章 顺序容器

每个容器类型都定义了一个默认构造函数。除array之外,其他容器的默认构造函数都会创建一个指定类型的空容器,且都可以接受指定容器大小和元素初始值的参数。每个适配器都定义两个构造函数:默认构造函数创建一个空对象,接受一个容器的构造函数拷贝该容器来初始化适配器。默认情况下,stack和queue是基于deque实现的,priority_queue是在vector之上实现的。我们可以在创建一个适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型。

2024-05-08 19:24:25 1088

原创 C++ Primer 第五版 第八章 IO库

如果本对象当前关联到一个输出流,则返回的就是指向这个流的指针,如果对象未关联到流,即返回空指针。当我们想要读写一个文件时,可以定义一个文件流对象,并将对象与文件关联起来。每个文件流都定义了一个名为open的成员函数,它完成一些系统相关的操作,来定位给定的文件,并视情况打开为读或写模式。iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。此外,一些类,如string,通常也会定义类似的IO操作,来读写自己的对象。

2024-05-04 21:51:23 469

原创 C++ Primer 第五版 第七章 类

成员函数的声明必须在类的内部,它的定义可以在类的内部也可以在类的外部。定义在类内部的函数是隐式的inline函数。类外部定义的成员的名字必须包含它所属的类名:IO类型属于不能被拷贝的类型,因此我们只能通过引用来传递它们。聚合类(aggregate class)使得用户可以直接访问其成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说它是聚合的:我们可以用一个花括号括起来的成员初始值列表初始化聚合类的数据成员,初始值的顺序必须与声明的顺序一致。静态成员独立于任何对象。

2024-05-04 15:46:19 722

原创 C++ Primer 第五版 第六章 函数

把函数声明放在头文件中,就能确保同一函数的所有声明保持一致。而且一旦我们想改变函数的接口,只需改变一条声明即可。定义函数的源文件应该把含有函数声明的头文件包含进去,编译器负责验证函数的定义和声明是否匹配。

2024-04-30 22:04:45 729

原创 C++ Primer第五版 第五章 语句

如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支,除非程序显式地中断了这一过程(如break语句),否则知道switch的结尾处才会停下来。throw表达式包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。如果没有任何一个case标签能匹配上switch表达式的值,程序将执行紧跟在default标签后面的语句。,异常检测部分使用throw表达式来表示它遇到了无法处理的问题。,用于在throw表达式和相关的catch子句之间传递异常的具体信息。

2024-04-25 20:37:31 430

原创 C++ Primer第五版 第四章 表达式

注:对于多重赋值语句中的每一个对象,它的类型或者与右边对象的类型相同、或者可由右边对象的类型转换得到。pval的类型(int*)无法转换成ival的类型(int),所以尽管0这个值能赋给任何对象,但第一条赋值语句非法。其中,type是转换的目标类型而expression是要转换的值。reinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释。位运算符作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。sizeof运算符返回一条表达式或一个类型名字所占的字节数。

2024-04-23 12:32:00 206

原创 C++ Primer 第五版 第三章 字符串、向量和数组

在执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。vector的成员函数push_back负责把一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。Note:范围for语句体内不应改变其所遍历序列的大小。如果循环体内包哦含有向vector对象添加元素的语句,则不能使用范围for循环。所有的标准库容器和string对象都可以使用迭代器。迭代器提供了对对象的间接访问。

2024-04-22 18:42:03 817

原创 C++ Primer 第五版 第二章 变量和基本类型

变量提供一个具名的、可供程序操作的存储空间。C++中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值得范围,以及变量能参与的运算。为了允许把程序拆分成多个逻辑部分来编写,C++支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。为了支持分离式编译,C++语言将声明和定义区分开来。声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义则负责创建与名字关联的实体。

2024-04-22 10:37:15 724

原创 C++ Primer 第五版 第一章

注释通常用于概述算法,确定变量的用途,或者解释晦涩难懂的代码段。编译器会忽略注释,因此注释对程序的行为或性能不会有任何影响。一个类定义了一个类型,以及与其关联的一组操作。包含来自标准库的头文件时,应该用尖括号(<>)包围文件名。对于不属于标准库的头文件,则用双引号("")包围。如果条件失败,会打印“Data must refer to same ISBN”然后返回。

2024-04-18 21:50:56 654

原创 C Primer Plus 第17章编程练习

第17章编程练习,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

2022-09-01 16:21:26 269 1

原创 C Primer Plus 编程练习 16.5

模拟抽奖

2022-08-22 16:30:13 97

原创 C Primer Plus 编程练习 14.10

指向函数的指针数组

2022-08-22 10:23:20 91

原创 C Primer Plus 编程练习14.8

巨人航空公司

2022-08-21 17:51:09 160

原创 C Primer Plus 15.8编程练习

C Primer Plus 15.8编程练习

2022-08-16 12:02:14 82

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除