Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2214185
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2012-12-17 00:31:40

我重点阅读了3——3.5的内容,这部分主要讲了影响并行计算时线程等待的瓶颈,以及如何识别和加速这些瓶颈。

 

The benefit of parallel computing comes from concurrent execution of work ; the higher the concurrency,the higher the performance.Every time threads have to wait for each other ,less work gets done in parallel ,which reduces parallel speedup and wastes opportunity. To maximize performance and increase concurrency,it is pivotal to minimize thread waiting as much as possible .  (并行计算的好处来自于能更高的并发执行的工作。并发的越多,效果越好。线程之间会相互等待,这样可以降低并行加速,最大限度的提高性能,增加并发,以减少线程之间的等待。)

通过并行程序设计来大力的减少导致线程等待的瓶颈。

建议:Identification of critical bottlenecks and acceleration of those bottlenecks

Identification bottlenecks(识别瓶颈和加速瓶颈)

Identification bottlenecks

Identification of critical bottlenecks is done in hardware based on information provided by the software. (识别关键瓶颈是在软件提供的信息的基础上在硬件上完成的)

The hardware keeps track of the bottlenecks and which hardware threads they execute on .

代码执行瓶颈的修改:

——三个阶段:

Critical section : watch-addr can be the lock address

Barrier:  it can the address of the counter of threads that have reached the barrier

Pipeline: it can be the address of the size of the queue 

下面这个三个似懂非懂

BottleneckCall bid,target PC:

Marks the beginning of the bottleneck identified by bid and calls the bottleneck subroutine starting at target PC.

BottleneckReturn bid:

Marks the end of the bottleneck identified by bid and returns from the bottleneck subroutine. 

BottleneckWait bid:

Waits for a maximum of timeout cycles for the content of memory address watch-addr associated with bottleneck bid to change ,while keeping track of the number of waiting cycles

                                 调度缓冲区中的线程等待

                           

Accelerate Bottlenecks        避免错误的序列化和starvation

                           

                              抢先加速

调度缓冲区中的线程等待

A thread executing a Bottleneck Call instruction that was sent to the large core and is waiting on the SB also incurs thread  waiting cycles that must be attributed to the bottleneck.(线程执行的瓶颈要先送到一个大内核,然后在调度缓冲区中等待受瓶颈影响的周期)

避免错误的序列化和starvation

所谓错误序列化即多个瓶颈可能安排在一个大内核上,一个瓶颈可能要等待比它优先级更高的瓶颈更长的时间,为此可能就会被安排在一个小内核上。

Starvation 到底指什么?不理解

抢先加速

在更新线程等待周期的时候,BT会检测出最高线程等待的瓶颈,这些瓶颈就会被运到大内核,然后发送一个抢先信号告诉小内核停止执行,将结构状态入栈,并告诉内核继续执行。内核将结构状态出栈,并恢复执行。(不理解这样为什么就加速了?)

 

修改三个方面就能Support for Multiple Large Core Contexts(支持多核环境)

1.Each large core has its own Scheduling Buffer

2.Each bottleneck that is enabled for acceleration is assigned to a fixed large core context to preserve cache locality and avoid different large cores having to wair for each other on the same bottlenecks.

3 The preemptive mechanism is extended so that in case a bottleneck scheduled on small cores becomes the top bottleneck,and its number of executers is less than or equal to the number of large core contexts.the BT sends signals to preemptively migrate those threads to the large cores.

阅读(632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~