自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 资源 (5)
  • 收藏
  • 关注

原创 CUDA-计算内存事务的次数

而数据类型的大小会影响。

2025-02-15 16:14:19 298

原创 CUDA-内存访问模式

在 GPU 计算中,直接影响程序的性能,尤其是访问的。✅📌🚨🚩📌使用✅。✅:线程访问连续地址,提高全局内存带宽利用率。✅:减少不规则访问,提高数据重用。✅比快。✅:避免跨步访问全局内存。✅。

2025-02-15 15:17:29 633

原创 CUDA-内存事务

当 GPU 线程访问全局内存时,它不会逐个字节地读取数据,而是按照。(如 stride 访问),可以使用。,并且 GPU 内存控制器会。假设有 32 个线程的。,全局内存访问通常以。在 GPU 编程中,每次访问都会产生一个。,从而减少事务次数。在 GPU 计算中,

2025-02-15 15:15:42 515

原创 CUDA - 页锁内存

页锁内存是主机与设备间高效数据传输的关键技术,尤其适用于需要异步拷贝或零拷贝的 GPU 应用场景。通过合理分配和使用页锁内存,可以显著提升程序的性能,但也需要权衡其对内存资源的影响以及编程复杂性。普通分页内存的虚拟地址是连续的,但物理地址可能是分散的,导致额外的开销。使用页锁内存进行主机和设备之间的数据传输,性能比普通分页内存高,因为避免了内存分页和映射操作。页锁内存避免了操作系统的分页机制导致的额外开销,能够以更高的带宽传输数据。页锁内存为 GPU 提供了直接访问主机内存的可能,减少不必要的数据拷贝。

2025-01-22 11:03:13 994

原创 CUDA的内存拷贝方式

这是最常用的同步内存拷贝函数。它在主机和设备之间同步地复制数据,直到数据传输完成,调用才会返回。根据具体的应用需求,可以选择适合的内存拷贝方式,以达到最佳性能。

2025-01-22 10:54:42 415

原创 序列化机制——Protobuf

是 Google 开发的一种高效、跨平台的序列化机制,用于结构化数据的序列化与反序列化。Protobuf 是一种语言无关的协议,主要用于数据交换的场景(如网络通信或数据存储)。高效:占用空间小、解析速度快。跨平台:支持多种编程语言,如 C++、Python、Java 等。灵活:允许定义复杂的数据结构。

2024-12-20 09:27:55 281

原创 lapack、blas、solver库的区别和联系

是数值计算领域的重要组成部分,它们各自的功能和设计目标有所不同,但也存在密切的联系。Solver 库是针对特定数值问题(如线性/非线性方程组、优化问题)的高级求解器,内部可能调用 BLAS 和 LAPACK。

2024-11-29 19:24:56 1121

原创 全局内存优化为共享内存

优化全局内存为共享内存的场景通常出现在数据访问频繁、线程需要共享数据的情况下。如果某段数据会被同一个线程块内的多个线程频繁访问,可以先将数据加载到共享内存,再由各线程读取共享内存。这可以显著减少对全局内存的访问次数。如果全局内存访问模式较为复杂,例如跨线程访问的地址不连续,可以先将数据加载到共享内存,重组为对齐访问模式。当线程块内对某些数据需要频繁执行计算或变换时,可以先将数据加载到共享内存中,然后在共享内存中执行计算。如果同一数据在多个线程中被多次加载,可以通过共享内存缓存数据,避免重复访问全局内存。

2024-11-25 17:47:20 981

原创 cuda共享内存

【代码】cuda共享内存。

2024-11-21 18:37:31 982

原创 /usr/bin/ld: Dwarf Error: found dwarf version ‘39952‘, this reader only handles version 2, 3, 4 and

这个错误表明,链接器(ld)在解析 DWARF 调试信息时,遇到了一个非标准的 DWARF 版本号(39952可能的原因包括目标文件被损坏、不支持的工具链生成了错误的调试信息,或者链接器和编译器版本不匹配。

2024-11-20 16:27:02 1011

原创 PTX 汇编代码语法

PTX 汇编是一种与硬件无关的指令集,设计用于编写高度并行的程序。PTX 汇编为 CUDA 编程提供了底层的控制,允许开发者在设备上执行高效的并行计算。操作类型、操作符和数据类型。基本的内存加载、存储和算术运算。线程同步与内存屏障指令。条件执行与分支指令。通过掌握这些语法和指令,可以更深入地优化 GPU程序,并理解 CUDA 程序背后的汇编执行过程。

2024-10-15 16:04:52 6622

原创 常用STL的操作以及特点

STL 提供了强大的数据结构和算法库,使得开发者可以快速、高效地解决许多常见的问题。每种容器和算法。

2024-10-12 09:45:56 653

原创 数据结构应用实现

这些是一些常见的数据结构的基本实现,使用不同的编程语言可以用不同的语法和方法来实现它们的操作。

2024-10-12 09:38:28 349

原创 常用的数据结构

掌握常用的数据结构及其特点,是编程和算法设计的基础。根据具体问题选择合适的数据结构,可以显著提高程序的性能和效率。

2024-10-12 09:37:29 411

原创 Python 虚拟环境

虚拟环境是 Python 开发中的重要工具,通过它可以有效管理项目的依赖,确保不同项目的库版本互不干扰,提高开发和部署的灵活性和稳定性。根据具体的需求和使用习惯,可以选择venvvirtualenv或conda来创建和管理虚拟环境。

2024-08-20 20:12:18 956

原创 RCCL了解

RCCL 是 AMD 提供的一个专为其 GPU 优化的集体通信库,旨在提升大规模并行计算的通信效率。它与 ROCm 平台集成,支持多种集体通信操作,适用于 HPC、深度学习和科学计算等领域。

2024-08-16 19:10:42 1041

原创 Cray toolchain了解

Cray Toolchain 是一组用于在 Cray HPC 系统上开发、调试和优化应用程序的工具。这些工具包括编译器、调试器、性能分析器和数学库,并且与 Cray 系统的硬件和软件环境高度集成。使用 Cray Toolchain,可以更有效地开发和优化在 Cray HPC 系统上运行的高性能计算应用。

2024-08-16 19:09:23 442

原创 mpiexec.hydra和mpirun区别

是基于 Hydra 进程管理器的工具,通常与 Intel MPI 或其他 MPI 实现中的 Hydra 进程管理框架配合使用。mpirun是一个通用的 MPI 启动工具,支持多种 MPI 实现,具体功能和选项取决于所使用的 MPI 实现,如 OpenMPI。在使用时,选择哪个工具取决于你使用的 MPI 实现和你需要的功能。

2024-08-16 19:07:21 796

原创 mpi和openmp的区别

MPI更适合于大规模的分布式计算环境,需要在不同节点之间进行通信。OpenMP更适合于多核共享内存系统,简化了多线程编程。有时,两者可以结合使用:在一个大型计算集群中,可能使用 MPI 在节点间进行通信,同时在每个节点内部使用 OpenMP 来利用多核处理器。

2024-08-15 16:21:48 775

原创 在 POSIX(可移植操作系统接口)系统中,共享内存通信shm_open

是一个用于在 POSIX(可移植操作系统接口)系统中创建和打开共享内存对象的系统调用。共享内存是一种进程间通信(IPC)机制,允许多个进程访问同一个内存段,从而实现数据的快速交换和同步。的共享内存对象,将其大小设置为 4096 字节,然后将其映射到进程地址空间。我们向共享内存中写入一段字符串并打印出来,最后取消映射并删除共享内存对象。在这个示例中,我们创建了一个名为。

2024-08-06 16:15:31 618

原创 动态加载第三方库——dlopen

dlopen是一个 POSIX 标准的函数,用于在程序运行时动态加载共享库(动态库)并返回一个句柄,以便后续对库中函数的调用。在 C 语言中,使用dlopen函数可以实现动态加载和调用动态库中的函数,这在插件系统或者需要动态加载库的情况下非常有用。

2024-08-02 11:05:37 1042

原创 gcc 生成动态库和静态库的方法,以及使用

在 GCC 中生成动态库(shared library)和静态库(static library)有不同的方法和用途。这里分别介绍如何生成和使用这两种类型的库。

2024-08-02 10:42:26 388

原创 python map

在 Python 中,通常使用字典(dictionary)来实现键值对映射,可以通过.items()方法遍历键值对,或者分别使用.keys()和.values()方法遍历键或值。如果你有其他特定的数据结构或需求,请提供更多信息,我可以进一步帮助你。

2024-08-01 21:00:25 964

原创 python 参数输入

命令行参数:使用sys.argv或argparse模块。函数参数:通过函数定义和调用传递参数。环境变量:使用os.environ获取。配置文件:读取 JSON、INI 或其他格式的配置文件。用户输入:通过input()函数获取。选择适合的方法取决于你的应用场景和需求。如果你有更多问题或具体需求,请提供详细信息,我可以进一步帮助解决。

2024-08-01 20:53:16 1579

原创 winget的使用

list 可显示计算机上当前安装的应用程序的列表。作为名称,以便在需要时轻松重置回官方源。以管理员身份打开「命令提示符」。

2024-07-07 13:19:39 1442

转载 Cuda GEMM优化

所以如果我把矩阵A和B都搬运到on-chip的SMEM上,然后采用和naive GEMM一样的计算方法,那么尽管还是会在SMEM上发生重复读数据的情况(也即总的读写次数和naive一样,只不过现在不是从global memory读取,是从SMEM上读取),可是因为带宽变大了,总体来说数据读取时间肯定减少了。​ A和B对应的切块(如图中的红色和黄色块)组成一个cuda编程里的block,这里我们共有4*4 = 16个block,每个block负责计算C矩阵中大小为的部分(图中绿色块)。

2024-07-06 15:35:32 185

原创 DCU整体硬件架构

首先,DCU通过PCI-E总线与CPU处理器相连,它是CPU主机系统的一个硬件扩展,其存在的目的是为了对程序某些模块或者函数进行加速。虽然DCU是原硬件系统的一个扩展,接受CPU调度指挥,但是在运行程序时,它又保持相对独立性,又可以将其视为一个独立的系统。同时一个主机系统在PCI-E总线上可以插入多张DCU与CPU进行互连,这使得一台主机的算力具有可扩展性,合理的利用多DCU程序可以获得更好的加速效果。虽然线程从概念上是独立执行的,但从DCU硬件来说是64个线程一组并行执行的,即一条指令发布后,

2024-07-02 10:32:29 1392

原创 C++ 互斥量mutex

C++ 互斥量mutex前言一、互斥量的用法1.lock( )、unlack( )2.lock_guard类模板二、死锁三、lock函数模板四、总结前言  互斥量的存在就是为了保护多线程中数据的安全。一、互斥量的用法1.lock( )、unlack( )#include<iostream>#include<list>#include<thread>#include<mutex>using namespace std;class A{

2021-05-11 17:50:55 1070

原创 传递临时对象作为线程参数时注意事项

传递临时对象作为线程参数时注意事项前言一、例子二、当定义参数类型作为参数时修改:总结:前言  当在传递临时对象作为线程的参数时,并且该线程执行了函数detach()分离主线程。那么在主线程中创建的临时变量作为分离线程的参数时,在分离线程就会失效,因为当主线程结束时,就会将主线程创建的对象释放。那么该怎么处理呢?一、例子#include<iostream>#include<thread>using namespace std;void myprintf(const

2021-04-24 23:14:06 828 3

原创 MOS晶体管原理与特性

MOS晶体管原理与特性一、工作区域二、长沟道晶体管的I-V特性I-V特性表达式为I-V特性表现图为三、非理想晶体管的I-V效应四、晶体管的C-V特性栅电容Cg覆盖电容Cgol扩散电容Csb、Cdb一、工作区域MOS管有三种状态工作区域:截止区线性区饱和区以nMOS管为例:(Vgs为栅极与源级间的电压,Vt为截止电压,Vgd为栅极与漏级间的电压,Vds为源级与漏级间的电压)  如果Vgs<Vt时,晶体管为截止区;  如果Vgs>Vt时,晶体管为导通,并Vds较小,晶体管处于线

2021-04-19 17:48:28 16488

原创 尽量使用const、enum、inline来替换#define

尽量使用const、enum、inline来替换#define前言一、const替代#define二、enum替代#define三、inline替代#define总结前言  因为“#define”并不是语言的一部分,所以在一些情况下,“#define”并不是一个最佳的选择,甚至无出现意想不到的报错。一、const替代#define  由于 #define 不是语言的一部分,所以也许在编译器开始处理源码之前就被预处理器移走了,于是就没有进入记号表内,所以在一些不够优秀的编译器内会报错,并且也很难对

2021-04-03 12:43:35 1040

原创 CMOS逻辑

CMOS逻辑前言一、反相器二、与非门(NAND)三、逻辑门四、或非门五、复合门六、传输管和传输门七、三态门八、多路开关九、锁存器和触发器前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、反相器CMOS反相器即为非(NOT)门,是由一个pMOS管和nMOS管串联构成。下图为反相器的电路图(a)和符号图(b):当输入A为0时,p.

2021-03-31 18:05:13 12762 2

原创 C++转型操作符(More Effective C++)

C++转型操作符前言一、static_cast?二、const_cast?三、dynamic_cast?四、reinterpret_cast?总结前言  在C++中,为实现不同类型间的转换,C++定义了四个类型转换操作符static_cast, const_cast, dynamic_cast, 和 reinterpret_cast。  下面介绍不同操作符的使用。一、static_cast?  static_cast 用于平常数值类型的转换,例如:int、double、float等  书写方

2021-03-29 16:19:03 295

原创 指针和引用的适用情况(More Effective C++)

指针和引用的适用情况指针和引用不同的地方一、操作符的不同?二、对象不同?1.指针可设为NULL,引用不可设为NULL2.对象是否可变总结指针和引用不同的地方1. 操作符的不同 2. 对象不同一、操作符的不同?指针用操作符“*”和“->”引用使用操作符“. ”二、对象不同?1.指针可设为NULL,引用不可设为NULL代码如下(示例):char *pc = 0; // 设置指针为空值char& rc = *pc; // 让引用指向空值  让引用指向空值,毫无疑问。.

2021-03-27 20:26:46 261

原创 Makefile文件

格式目标文件:依赖文件 命令行 //以Tab间距开头目标文件:这一步执行后要生成我的文件——可执行文件或.o文件依赖文件:生成目标文件需要的.c/.cpp文件,.h文件是不需要写在依赖文件的在编译过程为:预处理 g++ -E file.cpp -o file.i编译 g++ -S file.i -o file.s汇编 g++ -c file.s -o file.o链接 g++ file.cpp -o file在makefil

2020-12-25 17:47:22 182

原创 运动目标检测

文章目录前言一、混合高斯模型是什么?二、API1.代码2.结果前言前景/背景分割法提取前景物体的方法比较简单,适用于背景相对固定的简易场景。但是在很多情况下,背景中的某些部位会在不同的值之间波动,导致背景检测结果频繁出错。背景物体的移动(如树叶)、刺眼的物体(如水面)等因素都是产生这种现象的原因。物体的阴影也会带来问题,因为阴影也是会移动的。为了解决这些问题,我们引入了更复杂的背景模型。提示:以下是本篇文章正文内容,下面案例可供参考一、混合高斯模型是什么?  混合高斯方法是这些改进型算法中的

2020-12-08 22:19:13 549 3

原创 Git 基础命令以及使用顺序

了解具体命令的使用方法。

2020-11-23 21:34:58 172 1

原创 SGM—视差计算学习笔记

SGM—视差计算  以下将基于个人理解,分别从SGM的核心公式,代价计算步骤,代价聚集。由于笔者学识所限,如有错漏或者理解错误的地方,敬请批评。  子像素拟合和一致性检查几乎是所有立体匹配算法必执行的策略。子像素拟合将整像素精度提高到子像素精度,而一致性检查可以说是剔除错误匹配的不二选择。  在局部立体匹配匹配中,与基础图像 Ib 对应的视差图Db是通过选择每一个像素p和对应的最小代价视差d来确定的。对于子像素拟合,通过相邻代价拟合一条二次曲线,即在下一个更高和更低的视差处,计算最小值的位置。然

2020-11-09 17:17:22 1152

原创 SGM—代价聚合学习笔记

SGM学习笔记

2020-11-08 21:24:30 2616 1

原创 Linux——网络_1(协议、模型、套接字)学习笔记

文章目录一、典型协议二、网络应用程序设计模式1.C/S模式2.B/S模式3.两种模式优缺点三、网络分层模型四、协议格式1、 数据包的封装2、TCP 面向连接的可靠数据包传递五、NAT映射六、打洞机制七、套接字1、网络字节序2、IP地址转换函数3、Socketaddr数据结构一、典型协议应用层:常见协议有FTP/HTTP协议传输层:常见协议有TCP/UDP协议网络层:常见协议有IP/ICMP/IGMP协议网络接口层:常见协议有ARP/RARP协议  TCP传输控制协议(Transmi

2020-09-11 11:20:20 562

空空如也

空空如也

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

TA关注的人

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