多核系统设计标准

ycJ_154 2007-09-29 10:22:45
实施 多核系统 的最大挑战是什么?对这个问题的回答当然是见仁见智,但是,如果您询问大多数业界学者,他们会说是编程。

  虽然很多公司和研究人员都在努力解决多核的编程问题,但是也有大量处理器供应商正在力争改进其架构,以应对不断增长的内核数目。例如,单核设备的数据总线只有 “ 一张吃饭的嘴 ” ,添加第二个内核后,总线负载就翻倍了。每添加一个内核,面临的总线挑战就呈线性增长。当内核数达到 80 、 500 、 1000 或更多时,就令人难以想像了。

  但是也有好消息,处理器供应商(如 ARM )正在改进其架构,以应对更高的数据吞吐率,这反映在所谓的互连技术中。同时还在实施其他技术,以应对不断增长的内核数目。但是,业界对这些新型多核架构的性能如何进行定量测量呢?如何确定可扩展性?系统设计人员如何选择最优的处理器?

  在最简单的层面上,设计用于测试多核平台的基准必须可扩展,以便支持从一个内核到 “ 无限 ” 多个内核的情形。要确定多核设备的性能开始背离线性预期、进入下坡路的那个点,这是有意思的。

  多核基准分类基本上有两个最高层次:共享内存和以消息为基础。共享内存方法依赖基于线程 API (如 POSIX )的


语义。以消息为基础的方法适用于非对称异构多核解决方案。

   EEMBC (嵌入式微处理器基准协会)认为这两种方法都可以有效支持必须处理一致性和分布式内存架构的嵌入式应用程序。

  要衡量处理性能,可以利用速度测量来确定处理器完成一项任务的速度;也可以测量处理器在一定时间内能完成的任务数量,称为吞吐量或速率测量。

  在最基本层面上检查一下共享内存多核基准,一类测试是对单个基准进行独立并行执行。这种速率测量基本上是利用相同的输入数据集,同时运行同一基准的多个实例,经过多个线程,所有线程运行完毕后,测量时间。这与 S P E C 速率基准(如 SPECint_rate2000 )实施的传统吞吐量测量技术相同。

  使用该方法的最大优势之一就是它采用简单的方法,易于说明和演示。该方法还可以轻松扩展至任意数目的并发执行上下文。一般来说,上下文数目与机器上的 CPU 数目相同,但这不是要求。这样可以近似一种粗粒度并行方法,该方法有时在现实应用中会使用(例如多 Vo I P 通道)。但是,每个上下文使用相同的输入数据集是不现实的。

  不仅如此,使用相同数据集还会使处理器 L2 缓存和内存总线上的效果降到最低并无法测试。

   EEMBC 认为此方法只能测量单个内核的效率和处理器的总线带宽。此方法并不测量真正的多核性能,它是在内核之间建立某种形式的通信、同步和共享内存。

  并且此方法不将多流分解或任何流之间的同步考虑作为测试结果的一部分。如果基准和工作负载不是设计用于多任务环境,此方法将很难反映这些算法在多任务系统中的实际使用情况。

  换言之,由于处理器 / 线程之间没有或只有很少交互,此方法可以更有效地评测台式系统。例如,它可以表示以下情形:

  浏览器运行的同时,还在播放声音、编译程序、检查病毒、为图片 / 文档编索引,以及其他任务。

  测试多核可扩展性

  对上述方法的一项改进是让每个线程上下文以唯一的数据集运行。这样可以反映更真实的情况,例如多 Vo I P 通道的处理,其中每个通道接收不同的输入数据。

  从系统级别基准观点来看,此方法的价值在于它可以确保提升内存活动(如 L2 缓存、内存总线)。此方法还可显示解决方案在可扩展的数据输入基础上的扩展能力。

  换言之,要确定增加数据输入个数时性能开始下降的那个点,是有意义的。制定此类基准测试时,最大的挑战是:代码对于线程必须是安全的,才能让多个线程同时执行。特别地,它必须满足多个线程访问相同共享数据的需求,以及在任一给定时间,某一共享数据只由一个线程访问的需求,同时不降低要求的性能吞吐量。

  制定可同时启动多个项目的测试,对数据和代码都执行并发,可进一步扩展上述方法。这可显示一种解决方案对于通用处理的可扩展性。举例来说,考虑执行 MPEG decode(x) ,后跟 MPEGe n c o d e(x) ,类似机顶盒应用程序中的步骤,其中,会接收卫星信号、进行解码并编码成为另一种信号存入硬盘。作为基准评测,这需要上下文之间的同步以及确定评测何时完成的方法。

  另一种称为任务分解(或算法并行)的方法允许多个线程合作实现统一的目标,可以显示处理器支持细粒度并行的能力。例如线程中 M P E G 解码算法的分解,其中每个处理一项不同的工作负载。

  由 ARM 的 John Goodacre 领导的嵌入式微处理器基准协会( EEMBC )正在着手研究一套非常完整的新基准,它将针对多处理系统、多核处理器和多线程处理器。这些基准不仅测试系统级别的功能(即操作系统支持、内存性能),还将测试互连能力以及片上网络( N o C )。换言之,这些基准将审视 “ 整个产品包 ” 。   EEMBC 的多核基准软件将开始支持共享内存对称多核处理器,并利用基于线程的 A P I 建立通用编程模型。这些基准的目标是上述三种并发形式,包括任务分解、多数据流处理和多工作负载处理。

  嵌入式行业好像已经非常认可多核技术,但是其性能之间的差距仍在增长。即将推出的行业标准基准将显示多核处理器并行执行多个上下文的效率,并有助于推动处理器随嵌入式细分市场并行资源的发展,同时提供中立的方法,供系统开发人员比较相互竞争的处理器。

http://www.dianyuangu.com/jiaocheng/qianru/2007-09-22/2528.html
...全文
92 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
西北无影脚 2007-10-01
  • 打赏
  • 举报
回复
强,确实是这样的!
资源下载链接为: https://pan.xunlei.com/s/VOYaEvb5YbXDcdRVMg3ANOaDA1?pwd=sjwe data.py 用于创建数据集。 makelabel.py 的功能是融合数字与背景并保存。其中,一张背景图会在四个象限随机添加一个数字,且几乎无重叠。标签形状为(32,32,11),32×32 是热图输出大小,每个热图像素对应原图 4×4 的方格,每个方格作为分类器,可分出 11 类,0-9 对应数字,10 代表背景。fusion_img 函数将一个数字融合到背景图的随机位置;fusion_4img 函数考虑到单个数字太少,可处理四个数字,输入参数为(背景,(图片 1,标签 1),(图片 2,标签 2)...),输出为图片(0-255)和标签。 model.py 是模型文件,最终占用 192kb 内存。 test.py 为测试脚本,包含两个定义的函数,加载模型后可进行单张测试和视频测试,使用时注释另一个即可。onepoint 函数输入矩阵和点的 xy 坐标,逐行扫描该点周围 6 行的像素,若为 1(表示有物体),就将对应方格的 xy 加入数组并置零。扫描完周围 6 行后,若总点数超过 10 个,判定为一个物体,对所有 xy 分别求平均,得到物体中心。 单张图片后处理过程:获取输出的 32×32×11 矩阵,先扫描 32×32 区域,对每行取 argmax,若不属于背景类,说明可能存在物体,再设阈值过滤部分误识别框,然后将该点值置为 1 作为标记。 再次扫描矩阵时,为避免越界,从第 6 行开始到 25 行结束。若扫描到 1,如(20,20,3)这一格为 1,就取矩阵对应 3 的那一层(32×32 大小),将该矩阵和(20,20)坐标传入 onepoint 函数,返回中心,类别为 3。一般不会误判,若一个数字有两种可能且两种像素数都超 10

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧