[发明专利]一种提升Halide语言在多核系统执行效率的线程模型实现方法有效
申请号: | 201811145982.8 | 申请日: | 2018-09-29 |
公开(公告)号: | CN109376022B | 公开(公告)日: | 2021-12-14 |
发明(设计)人: | 张昱;张宇翔 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F9/52 |
代理公司: | 北京凯特来知识产权代理有限公司 11260 | 代理人: | 郑立明;郑哲 |
地址: | 230026 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 提升 halide 语言 多核 系统 执行 效率 线程 模型 实现 方法 | ||
1.一种提升Halide语言在多核系统执行效率的线程模型Sthread实现方法,其特征在于,包括:
建立数据共享机制:在main函数运行之前,创建共享匿名映射来实现多线程间堆数据共享,同时,通过创建共享匿名映射并使用2copy-2map方法、栈迁移方法对应地实现全局数据共享、栈数据共享;其中,所述全局数据共享是指对可读写数据区的共享,所使用的共享匿名映射为固定共享匿名映射,全局数据共享通过使用2copy-2map方法实现,即先分配临时空间存储可读写数据区的副本,然后使用预先创建的固定共享匿名映射覆盖原有可读写数据区的内存映射,再将临时空间内的数据拷贝回原有地址空间;
在Linux下,调用函数clone来创建Sthread子线程,使得Sthread子线程能够按照所建立的数据共享机制实现子线程与其父线程之间各种数据的共享;
在Halide运行时,使用所创建的Sthread子线程替换原有的Pthread重新实现Halide运行时系统中的halide_spawn_thread接口。
2.根据权利要求1所述的一种提升Halide语言在多核系统执行效率的线程模型Sthread 实现方法,其特征在于,所述创建共享匿名映射来实现多线程间堆数据共享包括:
调用函数mmap(addr,length,prot,flags,fd,offset)创建共享匿名映射,flags参数置为MAP_ANON|MAP_SHARED,表示创建的地址空间映射区间为匿名映射和共享映射,fd与offset均置为0,addr和length参数分别表示地址空间映射区间的起始地址和长度,prot参数用于设置对所地址空间映射区间的访问模式;共享匿名映射使得线程在函数clone()后不受写时复制机制的影响,从而实现多线程间堆数据共享。
3.根据权利要求1所述的一种提升Halide语言在多核系统执行效率的线程模型Sthread 实现方法,其特征在于,所述栈数据共享是指对主线程栈数据的共享,其通过栈迁移方法实现,即在开始执行任务之前先将栈数据拷贝到预先创建的共享匿名映射,然后将当前硬件栈帧寄存器的值保存起来,再使之指向共享映射中的栈顶栈帧;待主线程的任务执行完成,将之前保存的栈帧寄存器的值恢复到栈帧寄存器中。
4.根据权利要求1所述的一种提升Halide语言在多核系统执行效率的线程模型Sthread 实现方法,其特征在于,所述调用函数clone来创建Sthread子线程包括:
通过调用函数clone(fn,child_stack,flags,arg)并结合指定的child_stack和flags参数来创建Sthread线程;其中,fn参数是函数指针,表示Sthread子线程要执行的程序;arg参数是指针,表示传给Sthread子线程的参数;child_stack参数用来指定Sthread子线程的栈地址空间,所述栈地址空间从线程共享的堆空间中分配;flags参数用来保存从调用线程的内存地址空间的副本。
5.根据权利要求1或2或4所述的一种提升Halide语言在多核系统执行效率的线程模型Sthread 实现方法,其特征在于,多线程间堆数据共享时堆数据空间采取静态划分策略,即假设共需N个Sthread子线程,则共享的堆数据的地址空间被分割为N个子堆;在创建Sthread子线程时,给每个Sthread子线程绑定一个独立的子堆;
每个子堆仅用于响应所绑定Sthread子线程的分配请求;对于Sthread子线程的释放请求,则需要定位待释放内存所属的子堆,再交由所属子堆内存管理器进行回收;每个子堆上的内存管理器通过修改DougLea开发的dlmallocv2.8.6来实现。
6.根据权利要求1所述的一种提升Halide语言在多核系统执行效率的线程模型Sthread 实现方法,其特征在于,
在Halide运行时同步操作接口halide_{mutex/cond}*,通过调用pthread_{mutex/cond}*函数来实现,此时在互斥量和条件变量的初始化中需要指定PTHREAD_PROCESS_SHARED以适配Sthread线程的多地址空间上的同步;
对于Halide运行时的一组同步操作接口包括:互斥量操作接口halide_mutex*及条件变量操作接口halide_cond*,分别通过调用POSIX同步接口pthread_mutex*和pthread_cond*来实现;此时在互斥量和条件变量的初始化中需要设置共享对象的属性为PTHREAD_PROCESS_SHARED,表示共享对象是跨多个进程地址空间的,从而适配Sthread子线程之间在多个地址空间上的同步。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811145982.8/1.html,转载请声明来源钻瓜专利网。