FDG:

大规模并行系统中的动态内存分配器由于需要全局同步(记账) ,导致性能急剧下降。

代码解析

1.superblock

类中包含两个变量,两个函数。默认superblock大小为2048

items[size]:存储

current:指向下一个未使用byte的索引

init(void):初始化superblock,将current=0,指向superblock第0byte

alloc(size,offset,workID,id):在superblock里面分配内存,分配成功,返回指针,否则返回0.size分配的大小(Byte),offset此线程的偏移,workID warp的工作线程ID,id 线程ID

2.List

类中包含三个变量,三个函数。默认大小为128

m_current:下一个空元素的索引

List<SIZE>* m_prevoid:指向前一个listvoid * m_items[SIZE]:存储指针

init(void):初始化List,m_previous=0,m_current=0.

append(void * ptr):如果list full,返回false,否则,增加一个指针在m_current处

List<SIZE>* freeList(freeList=true):调用FDG_FREE释放存储的每一个元素,返回前一个list的指针,释放list。

setPrevious (List<SIZE>* list):将此list设置为当前list的前一个list。

3.Warp

类中包含六个变量,十一个函数

m_peak:消耗的内存

m_count:参与的线程数

m_active:活跃的线程数

List_t* m_list:当前list

SiperBlock_t* m_superblock:当前superblock

m_request[FDG_WARPSIZE]:改变分配请求所使用的寄存器

init(count):初始化Warpheader。list、superblock=0,peak为warp大小,m_count、m_active=count,request数组全部赋0.参数count为参与的线程数

List_t* allocateList(void):分配一个list,并初始化,返回分配的list的指针

void* allocateSuperBlock(size):分配superblock,size大小的内存,返回分配的指针,消耗内存加上size,将新分配的内存添加到list后面

appendToList(void* ptr,bool performVoting=true):将ptr添加到list后面,如果list满了,新分配一个list,把当前list设置为新分配的前一个list,当前list设置为新分配的list,在添加到list后面。ptr superblock

void * exchangePointer(void* ptr, workerId,id):???????????????????

isWorkerThread(* workerId=0,*count=0):决定worker线程。count 参与的线程数,具体算法????????????

Warp* start(count=0):初始化变量,决定worker线程,分配warpheader并初始化,为其他线程改变warpheader?????????

void* alloc(size):分配size内存,返回分配的指针。(按线程号顺序分配,连续分配,chunk为单位)

end(void):释放分配的内存及list

tidyUp(void):释放分配的内存,但是warpheader还在

getPeak(void):返回当前分配的内存数量

3.params.cuh

定义了一些参数。

FDG_LIST_SIZE 126:list里面的条目数量

FDG_MIN_ALLOC_SIZE 16:分配的最小比特数,相当于chunk

FDG_SUPERBLOCK_SIZE 8188:superblock的大小

FDG_WARPSIZE 32:warp的大小,CUDA默认是32

总结:

FDG分配器是按照线程号连续分配的,以chunk为单位。把内存划分为superblock,superblock划分为chunk,chunk中没有任何header数据,superblcok中只有指向下一个未使用byte的指针,没有其他信息。superblock的指针存储在list中,list里面有header,list条目固定,可以使用多个list。

FDG内存分配器笔记的更多相关文章

  1. 内核早期内存分配器:memblock

    内核早期内存分配器:memblockLinux内核使用伙伴系统管理内存,那么在伙伴系统工作前,如何管理内存?答案是memblock.memblock在系统启动阶段进行简单的内存管理,记录物理内存的使用 ...

  2. 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器

    14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器 当InnoDB 被开发时,内存分配提供了操作系统和 run-time ...

  3. Nah Lock: 一个无锁的内存分配器

    概述 我实现了两个完全无锁的内存分配器:_nalloc 和 nalloc.  我用benchmark工具对它们进行了一组综合性测试,并比较了它们的指标值. 与libc(glibc malloc)相比, ...

  4. [转]STL的内存分配器

    题记:内存管理一直是C/C++程序的红灯区.关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面 ...

  5. linux内存管理--伙伴系统和内存分配器

    3.1页框的管理 所有的页框描述符都存放在mem_map数组中. 3.1.1page数据结构 struct page { page_flags_t flags; //标志 atomic_t _coun ...

  6. 14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器

    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器 当InnoDB 被开发, 内分配齐 提供了与操作系统和运行库往往缺乏 ...

  7. CoreCLR源码探索(三) GC内存分配器的内部实现

    在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分. 在这一篇中我将详细讲解GC内存分配器的内部实现. 在看这一篇之前请必须先看完微软BOTR文档中的"Garbage ...

  8. [内存管理]连续内存分配器(CMA)概述

    作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 原文地址:http://lwn.net/Articles/396657/ 1 ...

  9. Mesh内存分配器的mmap小技巧

    最近看了一篇内存分配器的论文,原理很简单,但是里面的数学论证还没看懂,这次先简单写一下原理和用到的API. 内存分配器是用于封装操作系统提供的底层API,给应用程序提供动态内存的.内存不断申请释放后, ...

随机推荐

  1. [html5] 学习笔记-改良的input元素种类

    在html5中,大幅度增加与改良了input元素的种类,可以简单的使用这些元素来实现之前需要JS脚本来实现的功能. 1.url类型.email类型.date类型.time类型.datetime类型.d ...

  2. 理解Node.js(译文)

    前言 总括 :这篇文章十分生动形象的的介绍了Node,满足了读者想去了解Node的需求.作者是Node的第一批贡献者之一,德国前端大神.译者觉得作者的比喻很适合初学者理解Node,特此翻译. 译者 : ...

  3. js获取当前时间戳

    当使用js时我们可以使用timestamp = (new Date()).valueOf();直接获取当前时区时间点的时间戳.注意:js中时间戳的单位是毫秒,而php中则是秒

  4. 纯CSS3动画:一棵跳舞的树

    <!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/htm ...

  5. Yii2前后台分离

    Yii2前后台都需要注册的时候会产生前后台登录一个另一个同步登录和退出,这是因为登录和退出之前的sitecontroller里面公用了common/model下面的LoginForm.php和user ...

  6. 数据结构(Java描述)之二叉树

    基础概念 二叉树(binary tree)是一棵树,其中每个结点都不能有多于两个儿子. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它 ...

  7. Python抓取第一网贷中国网贷理财每日收益率指数

    链接:http://www.p2p001.com/licai/index/id/147.html 所需获取数据链接类似于:http://www.p2p001.com/licai/shownews/id ...

  8. Spring-mvc介绍

    Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2   spring-mvc结构 1 ...

  9. 从HTML5规范弄清i、em、b、strong元素的区别

    为了语义化,HTML5增加了不少新标签.其中i.em和b.strong这两组标签是最容易弄混的,不好好去探究一下,还真说不清.这个也是前端面试中经常会问的问题.今天从源头上,也就是从HTML5的文档( ...

  10. Algorithms(4th)谢路云译大纲总结(附实现源码)

    前言: 此算法书可以说是Java程序开发者的福音.里面涉及近50种计算机领域的经典算法,几位作者花了近40年的时间才完成这本著作.秉着对作者的敬仰与对算法的兴趣,我多次翻阅此书,而且常常被书中的经典算 ...