3并行计算 - Indico.PPTVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3并行计算 - Indico

陆上小型地震仪主控软件设计 核探测与核电子学国家重点实验室 报告人:董磊 指导老师:宋克柱 主控软件结构 陆上小型地震仪简介 主控软件功能需求 并行计算的应用 1 2 3 4 内容 陆上小型地震仪简介 主控软件功能需求 测试 存储 采集 监测 功能 测试小型地震仪技术指标 存储测试结果及正常采集数据 实现正常采集数据的功能 监测和回放采集数据的指标 软件结构 软件接口模块 采集模块 测试模块 核心控制模块 提供共享数据库 完成数据存储 通过USB与硬件通信 配置测试参数,下传测试命令,提供图形化测试结果 配置采集参数,下传采集命令,提供图形监测界面 软件基本工作流程 初始化 系统测试 正常采集 数据回放 初始化过程 初始化线程 主线程 线程自动销毁 超时自动返回 系统测试(循环测试情况) 主线程 系统测试线程 系统测试线程 主线程 事件锁定 事件置位 数据处理线程 线程自动销毁 多线程 是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理:? (1)耗时或大量占用处理器的任务阻塞用户界面操作; (2)某个任务必须等待外部资源 (如远程文件或 Internet连接)。 (3)并行计算:多核已经成为了主流。传统的应用程序再也无法顺其自然地在更高端的硬件设备上获得更高的性能回报,并行计算已经成为软件开发的核心趋势之一。 串行计算和并行计算对多核CPU利用情况 并行计算(Parallel computing) 适合PC应用程序使用的API 目前,适合在CMP平台上使用的并行编程模式OpenMP、Pthreads等;MPI实现的是进程级并行,更多的是用于Cluster(集群)系统。 VS2010支持OpenMP 2.0标准。 同时,VS2010还提供一种称之为“并发运行时”的编程框架。除此之外还有Windows API提供的线程操作接口。 CMP: Chip-level multiprocessing OpenMP 和并发运行时(Concurrency Runtime) 当并行度是预先确定的并且和系统上的可用资源相匹配时,OpenMP 效率较高。 OpenMP 模型特别适合于高性能计算。 在此方案中,硬件环境是已知的,开发人员可以合理地期望在执行该算法时拥有对计算资源的独占访问权。 但是,其他约束较少的计算环境可能不是 OpenMP 的绝佳匹配。 例如,使用 OpenMP 更难以实现递归问题(如数据的 quicksort 算法或搜索树)。 通过提供并行模式库 (PPL) 和异步代理库,并发运行时对 OpenMP 的功能进行了补充。 与 OpenMP 不同,并发运行时提供动态计划程序,该计划程序可以适应可用资源并且在工作负荷更改时调整并行度。 本软件中的并行计算 串行处理CPU资源利用 CaculateRMSValue:0.380s DrawGraph:0.720s 并行处理CPU利用 DrawGraphTreadFun:0.177s MonitorTreadFun:0.452s CaculateRMSValue:0.380s DrawGraph:0.720s VS 速度提升 1.59 2.14 资源监视器看到的情形 Posix Thread #include pthread.h #include stdio.h #include stdlib.h #include assert.h #define NUM_THREADS 5 void *TaskCode(void *argument) { int tid; tid = *((int *) argument); printf(Hello World! Its me, thread %d!\n, tid); /* optionally: insert more useful stuff here */ return NULL; } int main(void) { pthread_t threads[NUM_THREADS]; int thread_args[NUM_THREADS]; int rc, i; /* create all threads */ for (i=0; iNUM_THREADS; ++i) { thread_args[i] = i; printf(In main: creating thread %d\n, i); rc = pthread_create(threads[i], NULL, TaskCode, (void *) thread_args[i]); assert(0 == rc);

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档