固定维度数值分解个数求解-数值分解

一、问题来源:分布式(或多核)计算线程随机竞争模式下加速比性能的保证
二、背景介绍:
        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):

X 1 +X 2 +...+X n =m
        要保证至少有k组线程在竞争,实际上相当于X 1 、X 2 、...、X n 中必须至少有k个变量大于0,这样,至少有k个线程在运行的概率相当于方程(1)满足X1、X2、...、Xn中必须至少有k个变量大于0的解的个数和所有可能解的个数的比值。
五、问题答案

        方程(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的解的个数为

        

所以最终概率计算为

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值