- 博客(101)
- 资源 (5)
- 收藏
- 关注
原创 Python 虚拟环境
虚拟环境是 Python 开发中的重要工具,通过它可以有效管理项目的依赖,确保不同项目的库版本互不干扰,提高开发和部署的灵活性和稳定性。根据具体的需求和使用习惯,可以选择venvvirtualenv或conda来创建和管理虚拟环境。
2024-08-20 20:12:18 513
原创 RCCL了解
RCCL 是 AMD 提供的一个专为其 GPU 优化的集体通信库,旨在提升大规模并行计算的通信效率。它与 ROCm 平台集成,支持多种集体通信操作,适用于 HPC、深度学习和科学计算等领域。
2024-08-16 19:10:42 491
原创 Cray toolchain了解
Cray Toolchain 是一组用于在 Cray HPC 系统上开发、调试和优化应用程序的工具。这些工具包括编译器、调试器、性能分析器和数学库,并且与 Cray 系统的硬件和软件环境高度集成。使用 Cray Toolchain,可以更有效地开发和优化在 Cray HPC 系统上运行的高性能计算应用。
2024-08-16 19:09:23 349
原创 mpiexec.hydra和mpirun区别
是基于 Hydra 进程管理器的工具,通常与 Intel MPI 或其他 MPI 实现中的 Hydra 进程管理框架配合使用。mpirun是一个通用的 MPI 启动工具,支持多种 MPI 实现,具体功能和选项取决于所使用的 MPI 实现,如 OpenMPI。在使用时,选择哪个工具取决于你使用的 MPI 实现和你需要的功能。
2024-08-16 19:07:21 304
原创 mpi和openmp的区别
MPI更适合于大规模的分布式计算环境,需要在不同节点之间进行通信。OpenMP更适合于多核共享内存系统,简化了多线程编程。有时,两者可以结合使用:在一个大型计算集群中,可能使用 MPI 在节点间进行通信,同时在每个节点内部使用 OpenMP 来利用多核处理器。
2024-08-15 16:21:48 439
原创 在 POSIX(可移植操作系统接口)系统中,共享内存通信shm_open
是一个用于在 POSIX(可移植操作系统接口)系统中创建和打开共享内存对象的系统调用。共享内存是一种进程间通信(IPC)机制,允许多个进程访问同一个内存段,从而实现数据的快速交换和同步。的共享内存对象,将其大小设置为 4096 字节,然后将其映射到进程地址空间。我们向共享内存中写入一段字符串并打印出来,最后取消映射并删除共享内存对象。在这个示例中,我们创建了一个名为。
2024-08-06 16:15:31 439
原创 动态加载第三方库——dlopen
dlopen是一个 POSIX 标准的函数,用于在程序运行时动态加载共享库(动态库)并返回一个句柄,以便后续对库中函数的调用。在 C 语言中,使用dlopen函数可以实现动态加载和调用动态库中的函数,这在插件系统或者需要动态加载库的情况下非常有用。
2024-08-02 11:05:37 470
原创 gcc 生成动态库和静态库的方法,以及使用
在 GCC 中生成动态库(shared library)和静态库(static library)有不同的方法和用途。这里分别介绍如何生成和使用这两种类型的库。
2024-08-02 10:42:26 282
原创 python map
在 Python 中,通常使用字典(dictionary)来实现键值对映射,可以通过.items()方法遍历键值对,或者分别使用.keys()和.values()方法遍历键或值。如果你有其他特定的数据结构或需求,请提供更多信息,我可以进一步帮助你。
2024-08-01 21:00:25 774
原创 python 参数输入
命令行参数:使用sys.argv或argparse模块。函数参数:通过函数定义和调用传递参数。环境变量:使用os.environ获取。配置文件:读取 JSON、INI 或其他格式的配置文件。用户输入:通过input()函数获取。选择适合的方法取决于你的应用场景和需求。如果你有更多问题或具体需求,请提供详细信息,我可以进一步帮助解决。
2024-08-01 20:53:16 835
转载 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 59
原创 DCU整体硬件架构
首先,DCU通过PCI-E总线与CPU处理器相连,它是CPU主机系统的一个硬件扩展,其存在的目的是为了对程序某些模块或者函数进行加速。虽然DCU是原硬件系统的一个扩展,接受CPU调度指挥,但是在运行程序时,它又保持相对独立性,又可以将其视为一个独立的系统。同时一个主机系统在PCI-E总线上可以插入多张DCU与CPU进行互连,这使得一台主机的算力具有可扩展性,合理的利用多DCU程序可以获得更好的加速效果。虽然线程从概念上是独立执行的,但从DCU硬件来说是64个线程一组并行执行的,即一条指令发布后,
2024-07-02 10:32:29 725
原创 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 805
原创 传递临时对象作为线程参数时注意事项
传递临时对象作为线程参数时注意事项前言一、例子二、当定义参数类型作为参数时修改:总结:前言 当在传递临时对象作为线程的参数时,并且该线程执行了函数detach()分离主线程。那么在主线程中创建的临时变量作为分离线程的参数时,在分离线程就会失效,因为当主线程结束时,就会将主线程创建的对象释放。那么该怎么处理呢?一、例子#include<iostream>#include<thread>using namespace std;void myprintf(const
2021-04-24 23:14:06 763 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 13555
原创 尽量使用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 959
原创 CMOS逻辑
CMOS逻辑前言一、反相器二、与非门(NAND)三、逻辑门四、或非门五、复合门六、传输管和传输门七、三态门八、多路开关九、锁存器和触发器前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、反相器CMOS反相器即为非(NOT)门,是由一个pMOS管和nMOS管串联构成。下图为反相器的电路图(a)和符号图(b):当输入A为0时,p.
2021-03-31 18:05:13 9546 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 264
原创 指针和引用的适用情况(More Effective C++)
指针和引用的适用情况指针和引用不同的地方一、操作符的不同?二、对象不同?1.指针可设为NULL,引用不可设为NULL2.对象是否可变总结指针和引用不同的地方1. 操作符的不同 2. 对象不同一、操作符的不同?指针用操作符“*”和“->”引用使用操作符“. ”二、对象不同?1.指针可设为NULL,引用不可设为NULL代码如下(示例):char *pc = 0; // 设置指针为空值char& rc = *pc; // 让引用指向空值 让引用指向空值,毫无疑问。.
2021-03-27 20:26:46 243
原创 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 162
原创 运动目标检测
文章目录前言一、混合高斯模型是什么?二、API1.代码2.结果前言前景/背景分割法提取前景物体的方法比较简单,适用于背景相对固定的简易场景。但是在很多情况下,背景中的某些部位会在不同的值之间波动,导致背景检测结果频繁出错。背景物体的移动(如树叶)、刺眼的物体(如水面)等因素都是产生这种现象的原因。物体的阴影也会带来问题,因为阴影也是会移动的。为了解决这些问题,我们引入了更复杂的背景模型。提示:以下是本篇文章正文内容,下面案例可供参考一、混合高斯模型是什么? 混合高斯方法是这些改进型算法中的
2020-12-08 22:19:13 510 3
原创 git 上传代码到 github
下载并安装git工具创建文件夹作为本地临时仓库,并文件右击用git打开绑定用户在打开的GIt Bash中输入以下命令(用户和邮箱为你github注册的账号和邮箱)$ git config --global user.name "hanyuntao"$ git config --global user.email "hanyuntaocn@163.com"设置SSH key如果没有密钥,则通过$ ssh-keygen -t rsa -C "hanyuntaocn@163.com"生成,
2020-11-23 21:34:58 131
原创 SGM—视差计算学习笔记
SGM—视差计算 以下将基于个人理解,分别从SGM的核心公式,代价计算步骤,代价聚集。由于笔者学识所限,如有错漏或者理解错误的地方,敬请批评。 子像素拟合和一致性检查几乎是所有立体匹配算法必执行的策略。子像素拟合将整像素精度提高到子像素精度,而一致性检查可以说是剔除错误匹配的不二选择。 在局部立体匹配匹配中,与基础图像 Ib 对应的视差图Db是通过选择每一个像素p和对应的最小代价视差d来确定的。对于子像素拟合,通过相邻代价拟合一条二次曲线,即在下一个更高和更低的视差处,计算最小值的位置。然
2020-11-09 17:17:22 1055
原创 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 539
原创 Linux——进程间同步笔记
文章目录前言一、互斥量Mutex1.应用函数二、fcntl函数1.函数2.注意事项前言进程间同步和线程间同步原因一样,都是为了防止数据混乱,提出同步机制实现进程间同步方法:互斥量Mutex 和 fcntl函数一、互斥量Mutex在线程同步中,用到过互斥量Mutex。互斥量Mutex在默认情况下可以实现线程间同步,通过改变其属性可以实现进程间同步。要在thread_mutex_init函数使用前将其属性进行初始化。1.应用函数int pthread_mutex_init(pthread_m
2020-09-07 10:48:44 323
原创 Linux——线程_2(线程同步)笔记
文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport
2020-09-06 17:39:21 351
原创 Linux——线程_1笔记
文章目录线程概念一、线程资源?线程共享资源线程非共享资源二、优缺点1.优点2.缺点三、线程控制原语pthread_exit、return、exit的区别线程概念线程又称为轻量级进程,本质仍是进程(在linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但是没有独立的地址空间,是共享进程地址空间在Linux下: 线程:是最小的执行单位 进程:是小的分配资源单位一、线程资源?线程共享资源文件描述符表每种信号的处理方式当前工作目录用户ID和组ID内存地址空间(.
2020-09-04 12:07:39 252
原创 Linux——进程间通信(信号与信号集)笔记
文章目录信号的概述一、信号相关的事件和状态产生信号递达未决信号的处理方式阻塞信号集(信号屏蔽字)未决信号集信号四要素信号处理默动作二、信号发送与捕捉1.发送信号2.信号捕捉3.信号集的操作自定义集合信号屏蔽字未决信号集信号的概述信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直
2020-09-03 18:35:02 435
原创 Linux——进程间通信(储存映射mmap)笔记
文章目录前言一、储存映射的原理二、储存映射函数总结前言 上节内存共享用的shm,是采用访问物理内存来实现内存共享。本节使用的是mmap通过磁盘上建立文件来存储映射实现进程间通信。 相对于shm来说,mmap更加简单,调用更加方便。 另外mmap有一个好处是当机器重启,因为mmap把文件保存在磁盘上,这个文件还保存了操作系统同步的映像,所以mmap不会丢失,但是shmget就会丢失。一、储存映射的原理 存储映射使一个磁盘文件与储存空间中的缓存区相映射。于是当从缓冲区中取数据,就相当于
2020-09-01 16:38:39 269
原创 Linux——进程间通信(共享内存shm)笔记
文章目录前言一、共享内存的通信原理二、共享内存函数1.共享内存实现步骤2.函数的说明1.shmget( )函数2.shmat( )函数3.shmdt( )函数三、代码示例:执行结果显示总结前言 共享内存是一种最为高效的进程间通信方式。因为进程可以直接读写内存,不需要任何数据的拷贝。为了在多个进程间交换信息,内核专门留出了一块内存区。这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高了效率。 共享内存并未提供同步机制.
2020-08-29 11:25:11 5665
原创 Linux——进程通信(管道)笔记
进程通信方式当今比较常用的有:管道(使用简单)信号(开销最小)共享映射区(无血缘关系)本地套接字(最稳定)管道管道又分为:无名管道和有名管道FIFO无名管道:只能用于有亲属关系的进程间有名管道:可以用在有亲属关系的进程间也可用在无亲属关系的进程间无名管道管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符 fds[0]和 fds[1],其中 fds[0]固定用于读管道,而 fd[1]固定用于写管道,这样就构成了一个半双工的通道。管道关闭时只需将这两个文件描述符
2020-08-26 22:18:14 322
原创 Linux——守护进程笔记
Linux——守护进程笔记概念: 守护进程:是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 守护进程不因为用户或终端或其他的变化而受到影响。编写守护进程步骤:创建子进程,退出父进程 fork()在子进程中创建会话 setsid()改变当前目录为根目录 chdir()重设文件权限掩码 umask()关闭文
2020-08-25 17:30:23 161
原创 Linux——进程控制笔记(2)exec函数组和wait函数
exec函数组exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。execlp函数 加载一个进程,借助PATH环境变量 int execlp(const char *file,const char *arg,…) 成功:无返回 失败:-1 参数1:要加载的程序名字。还函数需要配合PAT
2020-08-23 22:36:13 523
原创 Linux——进程控制笔记(1)
fork函数fork()函数创建一个子进程pid_t fork(void) 失败返回:-1 成功返回:1.父进程返回子进程ID; 2.子进程返回0注意:fork函数不是返回两个值,而是fork()后,fork函数变为两个,父子进程各一个1.创建的单个子进程2.循环创建N个子进程进程共享fork函数后,子进程是父进程的一个复制品。父子进程相同之处为:进程上下文、代码段、全局变量、进程堆栈、宿主目录、进程工作目录、内存信息、打开文件
2020-08-23 15:48:02 117
原创 Linux——进程的相关概念
Linux——进程的相关概念程序和进程的区别:程序是静态的,是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。不占用系统资源。进程是动态的,是程序执行的过程。它是程序执行和资源管理的最小单位。存储在内存上。并发和并行:并发运行:就是CPU轮换的执行,当前进程执行了一个短暂的时间片后,切换另一个进程,如此的循环往复,由于时间片很短,在宏观上我们会感觉到所有的进程都是同时运行的,但是在微观上CPU每次只能执行某个进程的指令。并行运行:在多核的情况下,不同的CPU核可以同时执行不同的进程,这种叫
2020-08-22 16:37:51 280
原创 Linux——文件I/O编程笔记
Linux——文件I/O编程文件描述符 Linux中的文件主要分为4种:普通文件、目录文件、连接文件和设备文件。这么的文件系统如何做区分呢?——文件描述符。 文件描述符是个非负整数,是个索引值,并指向在内核中每个进程打开文件的记录表。 在一个进程启动时,会自动打开3个文件:标准输入、标准输出和标准错误处理,这3个文件分别对应的文件描述符为0、1、2。底层文件操作 文件I/O操作的系统调用,主要用到5个函数:open()、read()、write()、lseek()和close()。这些函
2020-08-21 11:47:09 258
原创 力扣笔记 —— 数组——单词顺序翻转
力扣笔记 —— 数组——单词顺序翻转用到的知识点:1.字符串的拼接2.sstream库中的istringstream类型字符串的拼接字符串的拼接可以用“+=”和.append()来操作s1="hello ";s2="world";s3=s1+s2;//输出就是 hello worldsstream库中的istringstream类型istringstream用于执行C++风格的串流的输入操作。它可以将空格前面的字符取出s="the sky is blue"istringst
2020-08-02 20:36:37 203
原创 数据结构——哈希表解析
数据结构——哈希表解析哈希表概念 哈希表又称散列表:是根据关键字的值直接访问元素存储位置的存储结构。也就是说,在元素的存储地址和它的关键字之间建立的一个确定的对应关系H,使每个关键字和一个唯一的存储位置向对应。 散列表既是一种存储方式,也是一种查询方式。 当不同的关键字通过相同的散列函数计算得到同一地址的现象称为冲突或碰撞,称这些发生冲突的关键字相对于散列函数的同义词,在一般的情况下,冲突只能尽量减少,而不能完全避免。构造散列函数的方法1.直接定址法2.折叠法3.数值分析法4.平方
2020-07-30 11:42:51 484
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人