一种针对地震数据块的并行循环方法技术

技术编号:11298901 阅读:156 留言:0更新日期:2015-04-15 16:00
本发明专利技术提供了一种针对地震数据块的并行循环方法,属于计算机科学领域中的并行计算领域。本发明专利技术方法包括:(1)封装线程控制、同步原语;(2)循环算法的地震数据块分发控制线程模板化;(3)循环算法的特定数据块计算线程模板化。本发明专利技术封装了线程库的底层细节,透明化了线程库的使用,模板化了并行循环的编程模式,给各种应用场景的并行循环提供了一种快速、有效的并行化方法。

【技术实现步骤摘要】
【专利摘要】本专利技术提供了,属于计算机科学领域中的并行计算领域。本专利技术方法包括:(1)封装线程控制、同步原语;(2)循环算法的地震数据块分发控制线程模板化;(3)循环算法的特定数据块计算线程模板化。本专利技术封装了线程库的底层细节,透明化了线程库的使用,模板化了并行循环的编程模式,给各种应用场景的并行循环提供了一种快速、有效的并行化方法。【专利说明】
本专利技术属于计算机科学领域中的并行计算领域,具体涉及。
技术介绍
在并行计算领域中,针对地震数据块的数据级并行,一般都会存在循环算法,而循环算法通常也是并行的热点。对于这种并行热点,目前的实现方式有:(I)使用制导语句(OpenMP等),它的使用简单,但会对每个并行循环进行一次创建和销毁,会消耗一定的时间;(2)使用线程库(Windows Threads、Pthread等)的一般方法是:①把循环所在的程序块封装在一个新函数中;②在新函数的循环中使用线程同步原语实现线程同步声明新函数形参:如循环次数及其它新函数执行需要的参数;④创建线程,并把新函数绑定在线程执行函数入口 ;⑤初始化线程,并给程序执行函数指定实参;?启动线程执行等待线程计算完成。这种方式控制复杂,需要充分理解线程同步、线程创建、线程初始化、线程控制的专业知识,不利于应用开发人员把注意力集中在应用开发上。 本申请要解决的技术问题是透明化复杂的线程控制和同步,设计一种模板化的针对地震数据块的循环算法的并行方法。
技术实现思路
本专利技术的目的在于解决上述现有技术中存在的难题,提供,既可以提供灵活的线程控制,也可以封装线程同步、线程创建、线程初始化、线程控制各种专业知识,让并行循环开发人员只把注意力集中在应用上。它的使用简单,可大幅度的降低并行循环的开发时间和开发复杂度。 本专利技术是通过以下技术方案实现的: ,包括: (I)封装线程控制、同步原语; (2)循环算法的地震数据块分发控制线程模板化; (3)循环算法的特定地震数据块计算线程模板化。 步骤⑵和步骤(3)之间没有先后顺序的关系,只是在排版上的顺序。所述地震数据块指可被循环算法计算所需的地震数据集,比如:N个地震道数据;所述特定地震数据块指在运行时相应计算线程从控制线程分发中得到的地震数据块。它是控制线程中所有地震数据块中的一部分。 所述步骤⑴包括: ①一次性创建计算线程,它的目的是减少线程多次创建和销毁的系统消耗。它通过线程库的创建线程函数接口实现; ②地震数据分发完成。当地震数据分发完成后,它通过线程库的互斥锁和条件变量实现对各个计算线程的通知,让计算线程启动计算,伪代码如下; 上锁; 设置所有计算线程数据准备好状态; 通知所有计算线程可以计算; 解锁; ③等待所有针对被分发的地震数据块的计算线程计算完成。它通过线程库的互斥锁和条件变量实现等待所有计算线程计算完成,伪代码如下; 上锁; 等待所有计算线程计算完成; 解锁; ④通知所有计算线程停止计算。它通过线程库的互斥锁和条件变量实现通知所有计算线程停止计算,伪代码如下; 上锁; 设置所有计算线程停止计算状态; 通知所有计算线程停止计算; 解锁; ⑤等待所有计算线程退出计算函数。它通过线程库的互斥锁和条件变量等待所有计算线程退出计算函数,伪代码如下; 上锁; 等待所有计算线程退出; 解锁; ⑥获取当前计算线程ID。它通过线程库的线程标识符获取函数实现; ⑦等待地震数据分发完成。它通过线程库的互斥锁和条件变量等待地震数据分发完成,伪代码如下; 上锁; 等待地震数据分发完成; 解锁; ⑧获取当前计算线程是否需要停止计算状态。状态值记录在数组中; ⑨通知控制线程当前计算线程计算完成。它通过线程库的互斥锁和条件变量通知控制线程当前计算线程计算完成,伪代码如下; 上锁; 设置当前线程ID的计算线程计算完成状态; 最后一个计算完成的计算线程通知控制线程计算完成; 解锁; ⑩通知控制线程当前计算线程退出计算函数。它通过线程库的互斥锁和条件变量通知控制线程当前计算线程退出计算函数,伪代码如下; 上锁; 设置当前线程ID的计算线程退出计算函数状态; 最后一个退出计算函数的计算线程通知控制线程计算完成; 解锁; (11)启动所有计算线程。它通过线程库的唤醒阻塞线程函数接口启动所有计算线程。 所述步骤⑵包括: ①把地震数据块大小平均分配给N个任务(这里的N个任务等同于N个计算线程)4201 ; ②使用“启动所有计算线程”功能,启动N个任务; ③读一个地震数据块,如地震数据块计算完了,则跳转到⑧执行,否则转入④; ④分发当前地震数据块给相应的计算线程; ⑤使用“地震数据分发完成”功能,通知计算线程可以针对被分配到的地震数据块进行计算; ⑥如果需要停止所有计算线程的计算,则跳转到⑧执行,否则使用“等待所有针对被分发的地震数据块的计算线程计算完成”功能,等待当前次所有计算线程计算完成; ⑦返回到③; ⑧使用“通知所有计算线程停止计算”功能,通知计算线程结束计算; ⑨使用“等待所有计算线程退出计算函数”功能。 所述步骤(3)包括: ①使用“获取当前计算线程ID”功能,获取当前所在的线程ID ; ②使用“等待地震数据分发完成”功能,等待当前线程获取相应的地震数据块; ③使用“获取当前计算线程是否需要停止计算状态”功能,判断是否要求当前线程强制结束计算,是则转入步骤⑥,否则转入④; ④多个计算线程同时执行针对相应地震数据块的算法; ⑤使用“通知控制线程当前计算线程计算完成”功能,通知控制线程,当前计算线程已完成计算,并跳转到②执行; ⑥使用“通知控制线程当前计算线程计算完成”功能,通知控制线程,当前计算线程已完成计算; ⑦使用“通知控制线程当前计算线程退出计算函数”功能,通知控制线程当前线程已经退出。 与现有技术相比,本专利技术的有益效果是:本专利技术封装了线程库的底层细节,透明化了线程库的使用,模板化了并行循环的编程模式。给各种应用场景的并行循环提供了一种快速、有效的并行化方法。 【专利附图】【附图说明】 图1示出本专利技术的一个实施例的流程图。 图2示出本专利技术的一实施例的基于线程库的并行循环模板类; 图3示出用于实现图2中的关键函数的实施例。 图4本专利技术方法的步骤框图。 【具体实施方式】 下面结合附图对本专利技术作进一步详细描述: 如图4所示,本专利技术描述了。本专利技术通过封装线程库的使用细节,管理线程的创建、初始化、执行、同步,并在这些基础上,提供了一个通用的并行循环模板。利用并行循环模板,可以简单、有效的开发出各种应用场景下的循环并行化程序。本专利技术既封装了线程库的使用细节,也为循环并行化提供了一种通用、简洁的模式。 本专利技术的一个实施例的步骤如图1所示,包括: (I)确定需要并行的循环算法。 (2)基于并行循环模板类200,新建一个类102。 (3)并行循环模板类102的初始化; ①拷贝循环算法放入并行循环模板类200的并行循环函数209的循环体内; ②把循环的迭代次数、迭代的开始值、结束值和步长分别赋给并行循环模板类200的循环的迭代次数203A、循环迭本文档来自技高网...

【技术保护点】
一种针对地震数据块的并行循环方法,其特征在于:所述方法包括:(1)封装线程控制、同步原语;(2)循环算法的地震数据块分发控制线程模板化;(3)循环算法的特定数据块计算线程模板化。

【技术特征摘要】

【专利技术属性】
技术研发人员:洪承煜杨尚琴陈浩岳承琪王昀吴边
申请(专利权)人:中国石油化工股份有限公司中国石油化工股份有限公司石油物探技术研究院
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1