二、背景介绍:
1.随机竞争模式:每个线程随机访问各个子数据结构,多个线程竞争同一子数据结构(或内存区域)的概率是相等的。
假设共有两个线程,每个线程可以随机访问4个内存区域中的任何一 个。当两个线程在访问不同的内存区域时,不发生锁竞争;但是在同时访问同一内存区域时,会发生锁竞争现象。因此在随机锁竞争模式中,有可能出现多个线程竞争同一把锁的现象,此时会发生排队执行(只有一个线程在运行)的现象。
可以通过控制线程数量、子数据结构的数量等参数,让多核CPU效率不低于给定的值。下面来谈谈如何通过控制参数保证加速比性能。
2.加速比性能保障
加速比:S(n)=T(SerialAlgorithm)/T(ParallelAlgorithm),即单处理器上最优串行化算法计算时间与使用n个处理器并行计算的时间之比值。
在随机锁竞争模式中,需要知道的是在一个k核的CPU上,线程数m和划分的子 数据结构个数n为多少时,才能保证至少有k个线程在同时运行的概率不低于给定的概率P。首先,m必须大于等于k,否则无法保证至少有k个线程在运行。子数据结构个数n也必须大于k,否则出现竞争的线程组数将少于k个,从而无法保证至少有k个线程在运行;当然n越大,线程出现竞争的概率就越小,同时运行的线程数量就越多,不妨设n≥m。在实际情况中,n并不是越大越好,当n过大时,由于锁的数量和n相等,会导致锁占用过多的系统资源。
三、问题的提出
计算至少有k个线程在同时运行的概率。考虑一种最坏情况:假设有两个线程在访问同一个子数据结构.那么它们一定会发生锁竞争。在这种最坏假设下,实际上相当于m个线程至少访问了k个不同的子数据结构。
四、问题的数学化与分析
假设访问每个子数据结构的线程数为X i (0≤X i ≤m, i∈{1,2,...,n}),得到整数方程(1):
五、问题答案
方程(1)的所有解的总个数为
方程(1)满足至少有k个变量大于0的解的个数为
由此得到概率为
X 1 +X 2 +...+X n =m
1-模型:X i (1≤X i ≤m, i∈{1,2,...,n}),则方程解的个数等价于将m个连续的“1”序列划分为n段的组合数,即需要在m个元素之间的m-1个间隔中选取n-1个插入隔板,序列中由隔板分成的n个子序列“1”的个数分别为X i 。
0-模型:X i (0≤X i ≤m, i∈{1,2,...,n}),X i 最小可以为0,相当于1-模型序列中允许存在两隔板之间没有“1”元素,于是方程解的个数等价于一个长度为m+n-1个连续的空序列中选取n-1个作为隔板的组合数,其余m个置为“1”。
利用0-模型可以得到方程(1)的所有解的总个数为
利用1-模型可以得到当方程(1)有且仅有k个大于0的解的个数为
所以方程(1)满足至少有k个变量大于0的解的个数为
所以最终概率计算为