理解RMQ问题和ST算法的原理

下图为TI C6xx DSP Nyquist总线拓扑图,总线连接了master与slave,提供了高速的数据传输。有很多种速率不同的总线,如图中的红色方框,最高速总线为CPU/2 TeraNet SCR(即VBUSM SCR),带宽为256bit,其他低速总线为CPU/3,CPU/6,带宽参考图中所示。总线之间用Bridge(桥)连接,作用包括转换总线的速率,使之与所流向总线的速率相同等。

在具体应用中,各种速率的总线完全可以满足复杂的数据传输,而数据传输的瓶颈往往在于连接总线之间的Bridge。下面将举例说明,首先讲解下master访问salve的路径。

AIF2(片上协处理器,在LTE系统中用于接收天线数据)访问MSM(MSM为片上共享内存,对于Nyquist,大小为4M,它独立于四个CPU,四个CPU均可访问,管理MSM的为MSMC,即共享内存控制器,在MSMC上提供给协处理访问MSM的接口为SMS)与DDR(DSP外接的扩展内存,即外存,在MSMC上提供给协处理访问DDR的接口为SES,MSMC详细内容可参考MSMC
data manual):

1,AIF2访问MSM路径:

AIF2-->CPU/3低速总线-->Bridge-->CPU/2高速总线-->MSMC接口M3_SL2(即SMS)-->MSM。(见图中的蓝色曲线)

2,AIF2访问DDR路径:

AIF2-->CPU/3低速总线-->Bridge-->CPU/2高速总线-->MSMC接口M3_DDR(即SES)-->EMIF(外部内存接口控制器)-->DDR。(见图中的蓝色曲线)

CPUx访问CPUy的L1或L2内存:

CPUx(通过corePac-x的XMC模块)-->MSMC S端口(S表示MSMC作为slave)-->MSMC M端口(M表示MSMC作为msater发起访问)-->CPU/2高速总线-->Bridge-->corePac-y的EMC模块-->corePac-y的L1或L2内存。(图中紫色曲线)

Bridge的瓶颈问题:

如图中示,若FFTC与AIF2或者还有其他模块同时访问了MSM或者DDR,这样连接CPU/3与CPU/2的Bidge(指向CPU/2总线方向的Bridge)将面临很大的压力,Bridge必将舍弃一些数据传输任务,导致数据传输失败,如AIF2无法写或读MSM或DDR内存,导致软件或硬件出现问题。

解决Bridge瓶颈问题的办法:

1,尽量避免多个Master(图中左下侧连接CPU/3总线的master)同时访问MSM或DDR.

2,如果无法避免多个Master同时访问MSM或DDR,可将某些Master的内存空间设置在corePac中的L1D或者L2资源,这样可以避免访问MSM或者DDR的次数,减小Bridge的数据传输压力。因为Mster(图中左下侧连接CPU/3总线的master)访问corePac中的L1D或者L2资源不再需要经过连接CPU/3与CPU/2的Bidge(指向CPU/2总线方向的Bridge)。如指定AIF2将接收到的天线数据存储在需要处理该天线数据的CPU对应的corePac中的L1D或者L2资源中。

理解RMQ问题和ST算法的原理,布布扣,bubuko.com

时间: 2024-07-30 10:12:51

理解RMQ问题和ST算法的原理的相关文章

RMQ问题之ST算法

RMQ问题之ST算法 RMQ(Range Minimum/Maximum Query)问题,即区间最值问题.给你n个数,a1 , a2 , a3 , ... ,an,求出区间 [ l , r ]的最大值. 举例:a={ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 },求出区间[4 ,8]中的最值.(答案:8 ) 这个问题最朴素的想法是用一个循环每次比较大小,但是,当数据范围较大时,这个算法十分低效.这时我们往往使用 ST 算法解决这个问题.虽然线段树和树状数组都能解决,但

RMQ问题与ST算法

RMQ(Range Minimum/Maximum Query)问题是求区间最值问题. 对于长度为 n 的数组 A,进行若干次查询,对于区间 [L,R] 返回数组A中下标在 [L,R] 中的最小(大)值. 可以用线段树来解决这个问题,预处理的复杂度是 O(nlogn),查询的复杂度是 O(logn). 更好的解法是ST算法.Sparse_Table算法,即稀疏表算法,这个方法可以在 O(nlogn) 的预处理后达到 O(1) 的查询代价. 这个算法非常容易实现. 定义 F[ i, k ] 表示从

【RMQ】【ST算法】【模板】士兵杀敌(三)

描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果. 所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少. 现在,请你写一个程序,帮小工回答南将军每次的询问吧. 注意,南将军可能询问很多次. 输入 只有一组测试数据 第一行是两个整数N,Q,其中N表示士兵的总数.Q表示南将军

【动态规划dp】RMQ问题(st算法)

[RMQ] Range Minimum/Maximum Query  范围最值问题 [ST算法] 解决RMQ问题的有效算法 预处理   经过预处理构造出d,预处理时间复杂度 O(nlogn) 运用动态规划的思想   d(i, j) 表示 范围 i ~ i + 2j-1 的最小值则有状态转移方程 d(i, j) = min {      d(i, j-1)       ,    d(i + 2j-1 , j-1)     } 设原数据存储在数组a[]  , 则初始状态 d( i ,  0 ) =

51NOD1174 区间最大数 && RMQ问题(ST算法)

RMQ问题(区间最值问题Range Minimum/Maximum Query) ST算法 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i,j之间的最小/大值.如果只有一次询问,那样只有一遍for就可以搞定,但是如果有许多次询问就无法在很快的时间处理出来.在这里介绍一个在线算法.所谓在线算法,是指用户每输入一个查询便马上处理一个查询.该算法一般用较长

HDU 3183 A Magic Lamp(RMQ问题, ST算法)

原题目 A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3964    Accepted Submission(s): 1605 Problem Description Kiki likes traveling. One day she finds a magic lamp, unfortunately the

RMQ问题 ST算法

RMQ是询问某个区间的最大值或最小值的问题,主要求解方法之一ST算法: ST算法其实是倍增思想的产物,等下看代码实现就很明显了 ST算法通常用在要多次询问一些区间的最值的问题中,相比于线段树,它的程序实现更简单,运行速度更快; ST算法没有修改操作(或者说不擅长动态修改) ST算法流程: 预处理:ST算法的原理实际上是动态规划,我们用a数组表示一组数,设\(f[i,j]\)表示从\(a[i]\)到\(a[i+2^j-1]\)这个范围内的最大值,从中间平均分成两部分,即把\(f[i,j]\)分为\

RMQ问题——ST算法

什么是RMQ.ST:RMQ(Range Minimum/Maximum Query)问题,即求区间的最值.可以写一个线段树来实现,但是每次查询的时间复杂度为O(log n),若查询次数过多则可能超时.ST算法是一种离线算法,经过O(nlogn)的预处理后,可以在O(1)的时间复杂度内进行查询,缺点是无法对数据做出修改. 算法实现: 初始化:用dp实现初始化.a[]为原始数据数组f,[i][j]表示从i向后的2j个数字中的最值.显然f[i][0]=a[i]; 我们将f[i][j]分为两段,一段为a

[POJ3264]Balanced Lineup(RMQ, ST算法)

题目链接:http://poj.org/problem?id=3264 典型RMQ,这道题被我鞭尸了三遍也是醉了…这回用新学的st算法. st算法本身是一个区间dp,利用的性质就是相邻两个区间的最值的最值一定是这两个区间合并后的最值,这条性质决定了这个dp子问题的重叠.可以利用这个性质预处理出这张表,只不过步长是2的幂次. 查询的时候也是如此,但是未必会精准地选中两个区间,不要紧,因为两个区间重叠的部分也会被自动算在求最值的内部.这个时候如果算的是区间和的话,要减去这一部分.(区间和的话直接用前