自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NVIDIA NCCL 源码学习(十三)- IB SHARP

因此基于这一点,mellanox提出了SHARP,将计算offload到了IB switch,每个节点只需要发送一次数据,这块数据会被交换机完成规约,然后每个节点再接收一次就得到了完整结果。

2024-03-20 18:25:23 1342 6

原创 NVIDIA NCCL 源码学习(十二)- double binary tree

上节我们以ring allreduce为例看到了集合通信的过程,但是随着训练任务中使用的gpu个数的扩展,ring allreduce的延迟会线性增长,为了解决这个问题,NCCL引入了tree算法,即double binary tree。

2023-12-22 16:56:34 2287 16

原创 NVIDIA NCCL 源码学习(十一)- ring allreduce

之前的章节里我们看到了nccl send/recv通信的过程,本节我们以ring allreduce为例看下集合通信的过程。整体执行流程和send/recv很像,所以对于相似的流程只做简单介绍,主要介绍ring allreduce自己特有内容。

2023-10-20 19:21:55 3528 46

原创 flash attention 2论文学习

flash attention作者Tri Dao发布了flash attention 2,性能为flash attention的2倍。

2023-07-25 22:16:57 769

原创 flash attention论文及源码学习

flash attention考虑到IO的影响,重新设计了attention算法流程,降低对HBM的占用和访问,在高速缓存上使用block粒度的softmax tiling的计算方法加速attention的计算。

2023-07-01 11:30:05 3821 20

原创 NVIDIA NCCL 源码学习(十)- 多机间ncclSend和ncclRecv的过程

通信由kernel和proxy线程协调完成,send端kernel负责将数据从input搬运到buf,proxy线程负责将buf中数据通过网络发送给recv端,kernel和proxy间通过队列实现生产者消费者模式,send端通过rdma send发送数据,和recv端通过队列实现生产者消费者模式,队列位于send端,recv端每次下发一个wr到rq之后会执行rdma write通知send端

2023-06-01 19:33:30 4893 36

原创 NVIDIA NCCL 源码学习(九)- 单机内ncclSend和ncclRecv的过程

上节介绍了通信链路的建立过程,本节介绍下单机内部ncclSend和ncclRecv的运行过程。单机内的通信都是通过kernel来完成的,所以整个通信的过程可以分为两步,第一步是准备kernel相关的参数,第二步是实际执行kernel的过程。

2022-12-27 15:21:56 7852 24

原创 NVIDIA NCCL 源码学习(八)- 数据通信链路transport的建立

上节以ringGraph为例介绍了机器间channel的连接过程,现在环里每个rank都知道了从哪个rank接收数据以及将数据发送给哪个rank,本节具体介绍下P2P和rdma NET场景下数据通信链路的建立过程。

2022-12-12 11:00:32 5139 16

原创 NVIDIA NCCL 源码学习(七)- 机器间channel连接

上节中完成了单机内部的channel搜索,仍然以ringGraph为例的话,相当于在单台机器内部搜索出来了一系列的环,接下来需要将机器之间的环连接起来。

2022-12-07 18:37:17 3912

原创 NVIDIA NCCL 源码学习(六)- channel搜索

nccl中channel的概念表示一个通信路径,为了更好的利用带宽和网卡,以及同一块数据可以通过多个channel并发通信,另外后续可以看到一个channel对应了一个GPU SM,所以基于这些原因,nccl会使用多channel,搜索的过程就是搜索出来一组channel。

2022-12-01 17:47:02 4330 10

原创 NVIDIA NCCL 源码学习(五)- 路径计算

为了方便之后的搜索channel,接下来NCCL会计算GPU和NIC节点到其他任意节点之间的最优路径

2022-11-15 20:36:57 3986 17

原创 NVIDIA NCCL 源码学习(四)- 建图过程

上次分析到nccl对机器PCI系统进行拓扑分析的过程,产出的结果为xml格式,接下来,nccl会根据这个xml进图的建立过程以便之后进行路径搜索。

2022-10-26 17:10:28 4482 7

原创 NVIDIA NCC​L 源码学习(三)- 机器内拓扑分析

上节介绍到所有节点执行了bootstrap网络连接的建立,接下来介绍下拓扑分析。由于gpu机器架构是多种多样的,一台机器上可能有多个网卡,多个gpu卡,卡间连接也各不相同,因此需要对机器内设备连接拓扑进行分析以达到各种拓扑结构下性能都尽可能的好。

2022-09-28 16:03:42 5003 12

原创 NVIDIA NCCL 源码学习(二)- bootstrap网络连接的建立

nccl里bootstrap环形网络连接的创建过程

2022-09-20 14:03:12 4483 8

原创 NVIDIA NCCL 源码学习(一)- 初始化及ncclUniqueId的产生

NCCL是英伟达开源的GPU通信库,支持集合通信和点对点通信

2022-09-05 21:23:46 6293 13

原创 brpc源码学习(十)- RDMA通信

目录整体流程初始化内存池建立连接基于polling模式的收发数据事件通知模式因为kernel bypass和zero copy,使得rdma相对tcp有着显著的优势:低时延,高带宽,cpu消耗少,因此brpc也支持了使用rdma进行通信。使用的方法很简单,client端只需要设置ChannelOptions.use_rdma = true,server端只需要设置ServerOptions.use_rdma = true整体流程接下来首先以polling + 共享

2022-04-25 17:12:25 2362 3

原创 brpc源码学习(九)- 内存池ObjectPool

brpc为了优化在高并发场景下malloc和free的性能,引入了ObjectPool和ResourcePool,这两个类基本一样,只不过返回的一个是T*,一个是ID,所以接下来以ObjectPool为例分析一下ObjectPool使用非常简单,假如有个自定义的无参数构造的类TestClass,那么创建一个TestClass实例的方法为TestClass* a = get_object<TestClass>(),归还则只需要return_object(a)先介绍下ObjectPool

2021-09-10 11:54:58 942 1

原创 brpc源码学习(八)- client端请求server整体流程

还是以上篇的demo为例看下brpc client端请求server是怎样的流程,为了方便,这里再贴下demo的代码,首先是proto的定义然后就是client端请求逻辑可以看到使用还是很方便的,channel init,填充request,调用service,然后就可以访问server端返回的response了。然后放一张官网的图,对整体流程有个大概印象channel继承自google::protobuf::RpcChannel,channel就相当于client,代表了和se

2021-03-24 14:30:17 2166 13

原创 brpc源码学习(七)- 无锁mpsc队列ExecutionQueue

ExecutionQueue是一个无锁的mpsc队列,主要逻辑其实就是brpc的client端发送数据时多线程向同一个fd写入数据,后来单独抽出来成为ExecutionQueue,官方文档中描述基本功能如下:异步有序执行: 任务在另外一个单独的线程中执行, 并且执行顺序严格和提交顺序一致,任务提交是wait-free的 Multi Producer: 多个线程可以同时向一个ExecutionQueue提交任务 支持cancel一个已经提交的任务 支持stop 支持高优任务插队,且执行顺序也会严格

2021-01-25 13:51:40 2199 1

原创 hdu 3336 count the string

解释题意:求给定字符串含前缀的数量abab前缀为aababaabababab中共有六个子串是前缀a a ab ab aba abab所以答案为6利用kmp中的匹配原理可以完美的解决此题a---------d----- -----a---------d i j如上所示,假设两串字符完全相等,ne

2021-01-05 18:56:55 440

原创 brpc源码学习(六)- brpc server 端整体流程

brpc的使用比较容易上手,以官方demo为例,因为brpc的数据序列化依赖protobuf,所以首先需要定义个proto然后继承EchoService并实现Echo方法然后是整体流程启动还是比较简单的,定义server,AddService,然后Start即可首先放一张官网的图,陷入细节前先有个大概印象然后看下AddService然后是AddServiceInternal首先判断注册的service中是否有method,如果没有则直接返回;然后调用Ini

2021-01-05 17:04:11 3703 4

原创 brpc源码学习(五)-IOBuf

目录BlockBlockRefIOBuf主要apitls优化IOPortalprotobuf接口首先放上官方介绍:brpc使用butil::IOBuf作为一些协议中的附件或http body的数据结构,它是一种非连续零拷贝缓冲,在其他项目中得到了验证并有出色的性能。IOBuf的接口和std::string类似,但不相同。以及官方ppt的这张图从上到下结构分别为IOBuf,BlockRef和Block。Block首先看下Block的结构,bl..

2020-12-22 16:10:26 3140

原创 brpc源码学习(四)- bthread调度执行总体流程

bthread调度整体流程如下图所示全局单例task_control有多个task_group,每个task_group内有两个执行队列_rq和_remote_rq,执行队列中存放着待执行的bthread。TaskGroup对应一个pthread,初始化函数如下,创建rq和remote_rq,创建main_stack和main_tid;main_tid代表主流程,后面会具体讲main_stack和main_tid的作用TaskControl是一个单例,下面是初始化的过程,主要..

2020-08-06 13:45:39 1954

原创 brpc源码学习(三)- WorkStealingQueue

每个bthread_worker都有自己的work_steal_queue,bthread_worker会从自己queue里pop数据进行处理,如果自己的queue为空,则尝试去其他bthread_worker的queue中steal,所以当前queue不会发生pop和push并发的情况;可能发生并发的情况为,steal和steal,steal和push,steal和pop;为了避免锁的开销,brpc设计了lock-free的WorkStealingQueue。work steal queue的p.

2020-06-03 19:50:17 743

原创 brpc源码学习(二)-bthread的创建与切换

brpc引入m:n的线程模型,固定的内核线程调度运行大量的bthread以避免内核线程上下文切换带来的开销。bthread类似协程,即用户态线程,bthread的切换不会陷入内核,不会进行一系列内存同步等耗时操作,因此bthread的切换在100-200ns,相比内核线程的微秒级别有着数量级的提升。为了实现协程需要协程栈,协程的初始化,以及协程间的切换,下面来逐一分析这几个过程。首先看下协程栈的结构,如下,context指向协程栈顶,stacktype表示栈的类型(大小),storage为栈空间

2020-05-29 15:36:57 3601 4

原创 brpc源码学习(一)-butex

由于brpc中引入了bthread,如果在bthread中使用了mutex,那么将会挂起当前pthread,导致该bthread_worker无法执行其他bthread,因此类似pthread和futex的关系,brpc引入butex来实现bthread粒度的挂起和唤醒。首先看下butex中使用到的FastPthreadMutex,FastPthreadMutex是基于futex实现的pthread粒度的锁,当竞争不激烈时,lock和unlock操作都是通过修改一个用户态的atomic来实现,只有当竞争激

2020-05-19 17:26:54 3436 4

原创 cpu cache一致性及内存屏障

cpu和内存之间的速度存在着较大的差距,如果cpu直接和内存打交道的话,会因为等待内存处理而造成cpu资源的浪费,因此为了提高性能,现在cpu和内存之间有着多级缓存,常见的为三级缓存,L1,L2,L3,其中L1和L2为每个cpu独有,L3为所有cpu共享。cache line为cache的最小单位,也是cache和内存数据交换的最小单位,如64字节。当cpu要读取某地址的数据时,首先会去cac...

2019-11-18 17:59:12 995 1

原创 poj 3460 Booksort ida*

BooksortTime Limit:15000MS Memory Limit:65536K Total Submissions:2722 Accepted:1230 DescriptionThe Leiden University Library has millions of books. When a student wants to ...

2019-05-24 20:38:18 319

原创 codeforces 1100E 二分 + 拓扑排序

E. Andrew and Taxitime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAndrew prefers taxi to other means of transport, but recently ...

2019-05-22 22:29:49 188

原创 codeforces 1095F Make It Connected 最小生成树

F. Make It Connectedtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given an undirected graph consisting ofnnvertices....

2019-04-29 16:46:33 371

原创 codeforces 1153D Serval and Rooted Tree 树形dp

D. Serval and Rooted Treetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputNow Serval is a junior high school student in Japari Mi...

2019-04-28 14:21:07 217

原创 hdu 1540 Tunnel Warfare 线段树

Tunnel WarfareTime Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15090Accepted Submission(s): 5957Problem DescriptionDuring the War of...

2019-04-23 16:27:13 145

原创 poj 2449 Remmarguts' Date k短路 A*

Remmarguts' DateTime Limit:4000MS Memory Limit:65536K Total Submissions:40172 Accepted:11024 Description"Good man never makes girls wait or breaks an appointment!" said the...

2019-04-20 16:11:01 697

原创 leetcode 854 k-similar-strings IDA*

854.K-Similar StringsHard14216FavoriteShareStringsAandBareK-similar (for some non-negative integerK) if we can swap the positions of two letters inAexactlyKtimes so that the resulting...

2019-04-18 20:17:20 294

原创 bzoj 2157 旅游 lct

2157: 旅游Time Limit:10 SecMemory Limit:259 MBSubmit:2709Solved:1143[Submit][Status][Discuss]DescriptionRay 乐忠于旅游,这次他来到了T 城。T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接。为了方便游客到达每个景点但又为了节约成本,T 城的任意...

2019-03-26 17:33:47 148

原创 codeforces 1065f Up and Down the Tree 树形dp

F. Up and Down the Treetime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given atreewithnnvertices; its root is vertex...

2019-03-23 17:05:15 305

原创 codeforces 1073C Vasya and Robot

C. Vasya and Robottime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputVasya has got a robot which is situated on an infinite Cartesia...

2019-03-15 19:53:30 387

原创 hdu 1542 Atlantis 扫描线 矩形面积并

AtlantisTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 20693Accepted Submission(s): 8258Problem DescriptionThere are several ancie...

2019-03-13 16:50:40 297

原创 uva 11525 Permutation 线段树

题目大意:给定n和k,输出1-k的所有置换按照字典序排列后的第n个置换,其中n由k个数Si给定当i等于1的时候(k - 1)!就是后面k-1个数所有的置换的个数,然后前面乘si,所以第n个置换的第一个数字即si + 1,同理,可发现其实就是每次求第k大,然后删去该数字。#include &lt;cstdio&gt;#include &lt;algorithm&gt;#includ...

2019-03-01 20:18:55 250

原创 graph embedding 论文及源码阅读 deepwalk & line & node2vec & bine

最近学习了下graph embedding方面的内容,主要看了如下几篇论文及对应开源代码,记录下。DeepWalk: Online Learning of Social RepresentationsLINE: Large-scale Information Network Embeddingnode2vec: Scalable Feature Learning for Network...

2019-02-22 20:38:05 1672

空空如也

空空如也

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

TA关注的人

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