自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式强化学习

分布式强化学习是深度学习走向大规模应用,解决复杂决策空间和长期规划问题的必经之路。对于大规模的决策问题,单进程乃至单机器的算力是远远不够的,需要将整个训练管线中的各个部分拓展到各种各样的计算和存储上。研究者希望设计一套“算法+系统”的方案,能够让分布式强化学习训练程序便捷地运行在各种不同的计算机器上,在保证算法优化收敛的同时,尽可能提升其中各个环节的效率。强化学习训练程序有三个核心模块,用于和环境交互产生数据的Collector,其中包含环境本身(Env)和产生工作的(Actor);

2025-01-23 19:48:15 872

原创 Jax工作原理

XLA内部的JAX特定部分主要位于xla/python子目录(JAX的C++组件位于XLA树内部的原因部分是历史原因,部分是技术原因,技术原因在于XLA C++ API不稳定,通过将XLA:Python绑定保留在XLA树中,可以将他们的C++实现与XLA的C++ API进行原子更新。机器学习的运算中99%都是向量乘以矩阵、矩阵乘以矩阵的计算,XLA是专门用来优化这些计算。因此,如果把函数看做一个操作,那么在计算中产生的中间结果不必返回到host,少了数据传输的时间开销,就可以大幅提升运算效率。

2024-11-26 11:53:19 858

原创 碰撞检测之Broad-Phase

然后对排序的列表进行Sweep,从前往后遍历列表,当遇到b点,就将该间隔添加到一个当前的接货空间列表中,再次遇到这个间隔的e点,将这个间隔从激活间隔列表中移除;实际的碰撞检测中,不需要每帧都对所有点都进行排序,只需要在初始化时进行排序,后续每帧更新时,大部分AABB的相对位置不会发生变化,只需将需要更新的AABB重新执行插入排序即可。实际运行时很多格子是空的,通常存储Grid时,会采用哈希的方法,将格子映射到哈希表中,一方面可以节省内存,另一方面可以不用再初始化时就确定Grid整体的大小,提供灵活扩展。

2024-11-20 20:03:45 754

原创 CUDA程序编译流程

编译的第一步是C++预处理,它处理宏定义、头文件包含以及代码中的条件编译部分。在此阶段,.cu文件会被预处理,生成中间文件.cpp.i。生成的fatibin文件会被转换为.fatbin.c文件,这是C语言代码文件,包含了设备代码的二进制包部分,最终将和主机代码一起编译。通过fatbinary工具,多个.cubin文件被打包成.fatbin文件,此文件支持不同架构的GPU设备。最后,主机端的.o文件和设备端的.fatbin.c文件通过标准C/C++编译器进行链接,生成可执行文件。

2024-11-14 17:54:15 379

原创 Docker基础

Linux容器不是模拟完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套一个保护层,对于容器里面的进程来说,它接触的各种资源都是虚拟的,从而实现与底层系统的隔离。总体来说,Docker的接口相对简单,用户可以方便的创建和使用容器,把自己的应用放入容器。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。由于程序运行环境配置问题,虚拟机是一种带环境安装的解决方案。Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。

2024-09-26 14:22:45 296 1

原创 Golang方法的本质及receive类型

go 方法本质

2024-05-30 09:12:28 806

原创 Golang中nil channel妙用

改进后的示例程序的最关键变化是在判断c1或c2被关闭后,显式地将c1或c2置为nil。我们知道,对一个nil channel执行获取操作,该操作将被阻塞,因此已经被置为nil的c1或c2的分支将再也不会被select选中执行。对于没有初始化的channel进行读写操作将会发生阻塞。此测试程序目的是依次输出5和7两个数字后退出,但是实际输出结果是在输出5之后,程序输出了许多0后才输出7并退出。但是nil channel并非一无是处,有时候妙用nil channel可以达到事半功倍的效果。

2024-05-24 23:22:45 251

原创 Go sync包中锁的知识总结

对于零值的sync.Mutex对象拷贝是安全的,因为相关锁状态都是零值,拷贝相当于创建一个新的零值sync.Mutex对象。锁一旦被使用过(即使已经解锁),也不建议被复制,因为锁对象中保存了其状态、信号量等信息,复制sync.Mutex锁后,对锁的操作结果都是未知的。互斥锁是临界区同步原语的首选,它常被用来对结构体对象的内部状态、缓存等进行保护,是使用最为广泛的临界区同步原语。在并发量较大的情况下,读写锁的写锁性能比互斥锁、读写锁的读锁都差,并且随着并发量增大,其写锁性能会继续下降。

2024-05-14 22:25:37 527

原创 Go切片实现原理及高效使用规范

Go切片实现原理及使用技巧

2024-05-08 20:32:44 365

原创 Go零值机制总结

Golang零值机制及使用限制

2024-05-07 22:52:55 243 1

原创 Golang正确大文件下载方式,避免OOM

​ 今天在golang http下载一个大文件时,报错OOM,通过堆栈发现时读取文件内容时申请内存超过系统内存大小,导致进程被杀。一、错误实现方式func downloadFile() { file, err := os.OpenFile("xxx.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) if err != nil { return } defer func() { _ = file.Close() }() rsp, err

2021-06-08 23:48:18 6078

原创 Golang逐行读取gzip文件

一、不安全逐行读取gzip文件gzip.NewReader创建一个gzip文件输入对象bufio.NewReader创建一个带有固定缓冲区大小的文件输入对象func ReadLine(file *os.File) (string, error) { reader, err := gzip.NewReader(file) if err != nil { return "", err } bufReader := bufio.NewReader(reader) line, _, err

2021-05-21 00:00:01 1538

原创 Golang判断文件是否存在跨平台方案及实现原理

一、判断文件是否存在Golang判断文件是否存在,跨平台实现方案如下:func Exists(filename string) bool { stat, err := os.Stat(filename) if err != nil && os.IsNotExist(err) { return false } return !stat.IsDir()}测试用例:func TestExists(t *testing.T) { dir := "/Users/cow/

2021-05-20 23:30:33 562

原创 数据结构--树存储结构 & 深度优先遍历 & 广度优先遍历 通俗易懂

树的概念​ 首先,树是一种常用的非线性数据结构,是以边(Edge)相连的节点(Node)的集合,每个节点存储对应的值,当存在子节点时与之相连。根节点:是树的首个节点边:所有节点都由边相连,用于标识节点间的关系叶子结点:树的末端节点,它们没有子节点树的高度:由根节点出发,到子节点的最长路径长度(从下往上)树的深度:指对应节点到根节点路径长度(从上往下)空树:如果树节点个数为零,那么构成的树成为空树树的层:从一棵树的树根开始,树根所在层为第一层,树的孩子节点所在的层为第二层,以此类推。节点

2021-04-21 00:23:51 2870

原创 哈希表

一、哈希表1、定义​ 散列表(Hash table,哈希表),是根据key而直接进行访问的数据结构。可以通过把关键字映射到表中一个位置来访问记录,以加快查找的速度。整个映射函数叫做散列函数,存放记录的数组叫做散列表,在有些文章或开源代码中也称之为slot(槽)或bucket(桶)。2、原理###### 3、特点优点:通过关键实现一对一查找速度非常快缺点:存在冲突二、分类1、静态哈希​ 拥有固定的slot(桶)数,哈希函数对同样的key值永远映射出唯一的地址值。如果数据是固定不变的,那

2021-04-11 23:54:36 804

原创 HTTP DNS原理及HTTPDNS调度实现方式

一、HTTPDNS介绍​ 传统DNS解析存在的问题在上一篇文章中已经解释,那有没有一种调度精准、成本低廉、配置方便的基于域名的流量调度系统呢?HTTPDNS就应运而生 。​ 与传统的 DNS 解析不同,HTTPDNS 是自己搭建基于 HTTP 协议的服务器,利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。​ 当客户端需要 DNS 解析的时候,不再向 local 发送 DNS 查询报文,

2021-04-01 22:43:47 2400

原创 DNS完整解析流程

一、DNS介绍  域名(Domain Name)是一个标记主机或主机组的名称,相当于IP地址的别名。  域名系统(Domain Name Server)是将域名解析成IP地址的互联网基础服务,提供该服务的服务器成为域名解析服务器。二、域名结构域名系统是一个分布式系统,Internat采用树状结构命名,结构如下图所示:三、DNS解析过程1、DNS域名解析服务器分类本地域名服务器(Local DNS)如果通过DHCP配置,Local DNS由ISP提供根域名服务器(Root DNS

2021-04-01 22:38:43 8261 1

空空如也

空空如也

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

TA关注的人

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