精华内容
下载资源
问答
  • 什么是分配率

    千次阅读 2020-05-26 16:35:39
    诸如“不可持续的分配率”和“您需要保持较低的分配率”等短语似乎仅属于Java Champions的词汇表。 复杂,恐怖并被魔术光环包围。 经常发生的情况是,当您更仔细地查看概念时,魔术会随着抽烟消失。 这篇文章试图...

    Java分配率 诸如“不可持续的分配率”和“您需要保持较低的分配率”等短语似乎仅属于Java Champions的词汇表。 复杂,恐怖并被魔术光环包围。

    经常发生的情况是,当您更仔细地查看概念时,魔术会随着抽烟消失。 这篇文章试图从提到的条款中删除魔术。

    什么是分配率?我为什么要关心?

    分配率以每个时间单位分配的内存量来衡量。 通常以MB /秒表示,但如果您愿意,可以每年使用PB。 这就是全部,没有魔术,只是您在一段时间内在Java代码中分配的内存量。

    但是,仅了解这一事实并不太有益。 如果您可以忍受我,我将指导您实际使用该概念。

    面对高分配率可能会给您的应用程序性能带来麻烦。 从实际的角度来看, 垃圾收集已成为瓶颈,从而浮出水面。 从硬件的角度来看,即使是商用硬件也可以维持每个内核数GB /秒的分配,因此,如果您的速率开始不超过1 GB /秒/核,您可以放心,您的硬件实际上不会成为瓶颈。

    因此,在关注GC时,我们可以从一个在现实世界中也适用的类比开始-如果您创建很多东西,那么之后往往会面临很多清理工作。 知道JVM是使用垃圾收集机制构建的,因此需要研究分配速率如何更改GC暂停的频率或持续时间。

    衡量分配率

    让我们从分配率的测量开始。 为此,我们通过为JVM指定-XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps标志来打开GC日志记录。 JVM现在以与以下代码段类似的方式开始记录GC暂停:

    0.291: [GC (Allocation Failure) [PSYoungGen: 33280K->5088K(38400K)] 33280K->24360K(125952K), 0.0365286 secs] [Times: user=0.11 sys=0.02, real=0.04 secs] 
    0.446: [GC (Allocation Failure) [PSYoungGen: 38368K->5120K(71680K)] 57640K->46240K(159232K), 0.0456796 secs] [Times: user=0.15 sys=0.02, real=0.04 secs] 
    0.829: [GC (Allocation Failure) [PSYoungGen: 71680K->5120K(71680K)] 112800K->81912K(159232K), 0.0861795 secs] [Times: user=0.23 sys=0.03, real=0.09 secs]

    从上面的GC日志中, 我们可以将分配率计算为上一个收集完成后和下一个收集开始之前的年轻代大小之间的差。 使用上面的示例,我们可以例如提取以下信息:

    • JVM启动后的291 ms ,创建33,280K 个对象。 第一次小型GC事件清除了Young一代,此后,Young一代还剩下5,088K个对象。
    • 发射后446毫秒,Young gen占用已增加到38,368 K, 触发了下一个GC,从而将Young Gen的占用减少到了5,120K
    • 发射后829毫秒,Young gen大小为71,680K ,GC再次将减小至5,120K

    然后可以在下表中表示此数据,将分配率计算为年轻入住率的增量:

    事件 时间 年轻之前 年轻之后 分配期间 分配率
    第一GC 291ms 33,280KB 5,088KB 33,280KB 114MB /秒
    第二GC 446毫秒 38,368KB 5,120KB 33,280KB 215MB /秒
    第三GC 829毫秒 71,680KB 5,120KB 66,560KB 174MB /秒
    829毫秒 不适用 不适用 133,120KB 161MB /秒

    有了这些信息,我们可以说该特定软件在测量期间的分配速率为161 MB /秒。

    分析影响

    现在,有了这些信息,我们就可以了解分配速率的变化如何通过增加或减少GC暂停的频率来影响应用程序吞吐量。 首先,您应该注意到只有Minor GC暂停清洁Young Generation会受到影响。 GC清理旧一代的频率或持续时间不受分配率的直接影响,而受晋升率的直接影响, 晋升率将在下一篇文章中介绍。

    知道我们只能专注于次要GC暂停时,我们接下来应该研究Young Generation内部的不同内存池。 当分配在Eden中进行时 ,我们可以立即查看Eden的大小如何影响分配率。 因此,我们可以有一个假设,即增加Eden的大小将减少较小的GC暂停频率,从而使应用程序能够维持更快的分配速率。

    实际上,当使用-XX:NewSize -XX:MaxNewSize和-XX:SurvivorRatio参数运行具有不同Eden大小的相同示例时,我们可以看到分配率有两倍的差异

    • 以100M的Eden运行上述示例,将分配速率降低到100MB / sec以下
    • 将Eden大小增加到1GB,可以将分配速率增加到刚好低于200MB /秒。

    如果您仍然想知道为什么这是正确的- 如果您不常停止GC的应用程序线程,则可以做更多有用的工作。 还发生了更多有用的工作来创建更多对象,从而支持增加的分配率

    现在,在得出“更大的伊甸园更好”的结论之前,您应该注意到分配率可能并且可能与应用程序的实际吞吐量没有直接关系。 这是一项技术指标,有助于提高吞吐量。 分配速率可能会并且会影响您的次要GC暂停停止应用程序线程的频率,但是要查看整体影响,您还需要考虑主要GC暂停并以应用程序的业务操作(不是MB / sec)来衡量吞吐量。提供。

    翻译自: https://www.javacodegeeks.com/2015/09/what-is-allocation-rate.html

    展开全文
  • 求解钠长石在碱长石和斜长石中的分配问题常采用里特曼相图法,但其计算量大,计算过程复杂,易受人为因素影响。利用Matlab软件编程模拟人工查图时的思维和工作步骤,实现里特曼相图法查图,包括相图数字化、相图分区...
  • 该算法是雅虎工程师提出的一个解决合约制广告或者说GD(担保式投放)投放系统在线分配问题的贪心算法,思路很直接,下面是本人对照其论文整理的思路,里面有自己的理解。 论文题目:Ad Serving Using a Compact ...

    该算法是雅虎工程师提出的一个解决合约制广告或者说GD(担保式投放)投放系统在线分配问题的贪心算法,思路很直接,下面是本人对照其论文整理的思路,里面有自己的理解。

    论文题目:Ad Serving Using a Compact Allocation Plan

    google一下即可得到。

    ===========================================================================================

    摘要:

    在线广告有很大一部分是通过担保式合约来售卖的。这类广告的特点是:广告系统要保证广告主要求的定向条件的曝光量,有时间限制,超过时间没有完成可能会赔偿。这对广告系统意味着,当一次曝光机会到来时,可能会有多个广告主的单子满足曝光要求,广告系统需要决定这次曝光该展示哪一个合约,并且保证其他所有合约也完成。这个问题有两个挑战:(1)问题的数量级,可能会有百万级别的广告主合约和百万级别的流量;(2)不可预见性,合约通常是提前签订,因此需要预估流量。同时在分配流量时,也无法得知当天总流量的分布。我们这里提出了一种对担保式投放系统的分配方案。
    我们提出了一个结局担保式投放系统分配问题的解决方案。分配方案离线计算,可以被广告投放系统有效使用。每一个合约的分配方案只需要O(1)空间。整个分配算法是无状态,可以方便地在分布式系统中使用。

    简介:

    GD(Guarantee delivery,担保式投送)广告投放系统中的核心问题是匹配supply和demand。当用户展示发生时,广告服务器需要在秒级延迟下选择出合适的合约,使得所有的合约都被满足。这是第一需求,也是核心需求。与此同时,还有很多次级需求,比如平滑,即广告不能在一瞬间展示完,应该均匀分布在合约期内。这个问题的难点在于一个是计算量很大,另一个是在做online决策时,并不知道这一刻流量的整体分布,只能基于历史数据做预测。
    先看两种比较直观的思路:一种是基于完成度,一种是基于服务率。
    完成度:广告服务器在选择合约时是基于每一个合约的历史展示情况来决定的。比如,如果来一个展示,有两个合约满足,一个合约马上就完成了,另一个还差很多,那么肯定优先展示差很多的那个,即按照完成率来定。这个思路很简单,但是会有一些问题:第一,这里需要给出完成度的确切定义,什么样的合约是快完成了,什么样的合约是还差很多。可能最直观的定义是,每一个合约都均匀显示在合约期内,比如30天展示30万次的合约,那么每天需要展示1万次。这可以让展示非常平滑,但是却忽略了一个事实,即实际的流量是变化的,工作日的流量会少于周末,晚上的流量会少于白天的。而且每一天都可能发生定向的流量骤降的情况,这就需要算法能够动态调整展示的概率。第二,由于需要记录每一个合约的完成度,整个系统是有状态的,这对于分布式系统有一些挑战,但是不是不可解,通过消息队列来处理曝光打点可以解决。
    服务率:这种方案不需要考虑每一订单的完成度,而是离线计算出每一个订单的服务率。每来一个展示,就把符合条件的合约按照概率展示即可。这种方案的问题在于:第一,计算服务率肯定是需要流量预测的,那么对预测的准确性要求很高;第二,整个计算的过程是一个分配求解的过程,求解的规模很大。
    那么,这里我们提出了一个结合上述两种思路的two-step的解决方案——HWM。第一,我们引入了一个离线计算分配方案的轻量级算法,分配方案是无状态的且是基于服务率的。第二我们提出了一个反馈模型,可以根据最近的历史数据来调整流量预测带来的误差。


    问题定义:


    图一
    考虑上图的例子。有三个广告主的合约和六个流量节点。每一个都被标注了定向条件。如果每一个流量符合某一个合约,那么他们之间会有一条线相连。对于200k{male}的demand,我们可以把{male,ca,age=5}的100k流量给他,那么200k{ca}的demand就无法满足了,除非我们只把{male,ca,age=5}的100k流量给{ca}的demand。这里我们其实已经感受到了分配问题的含义。再强调一下现实问题中的挑战,每一个demand和supply的节点都成百万,而且标签的数目也相当大,远比这个例子复杂得多。
    设I是预测的supply集合,J是合约集合。那么分配问题可以定义成一个二部图G。图中任一边e代表流量满足合约j。每一个supply节点被si标记,代表该节点的展示量,同理每一个demand节点被dj标记,代表合约约定的展示量。那么解决这个分配问题其实是找到xij,xij表示每一个supply节点i分配给合约j的占比。xij必须满足:


    图二
    另外,虽然不是强制,但是上述问题最好能考虑到平滑特性。
    整体架构:

    图三
    离线部分,输入流量预测和合约,生成分配方案。在线部分根据分配方案来决定展示哪一个合约。离线部分,当然可以去解之前的分配方案,得到每一个xij,很直接。但是在在线部分,就需要把整个二部图载入内存,代价很大(xij意味着所有的边都需要载入)。所以关键点就是得到xij,但是不需要存储。我们的方案是通过一个aj来代替xij。aj代表每一个符合条件的supply展示合约j的概率。所有符合条件的supply节点的aj都是相同的。数学依据在另一篇论文。这样的方案,在线模块就只需要加载合约以及每一个合约的aj值即可。

    算法:

    HWM的离线算法会生成每一个合约的服务率,服务率的大小取决于合约的紧急程度。算法会把每一个demand连同符合条件的supply标记。设对于合约j,所有满足条件的supply节点的流量和为Sj,然后按照Sj/dj升序排序(原文是按照Sj排序,在另一篇论文里是按照Sj/dj排序,个人认为后者更合理,具体见附录),这个值越小,意味着这个合约优先级越展示。按照这个值对合约升序排序,得到一个叫allocation order的排序结果。接着计算服务率,算法如下:


    图四
    第一步:设ri为每一个supply节点的剩余流量,si为预测流量,那么最开始,ri=si;
    第二步:对于所有的合约j,先按照allocation order排序,再求解aj。这个式子的含义是,把所有合约j满足的supply节点拿出来,对每一个supply节点都求出min{ri,si*aj}值,然后求和,使得和等于dj。如果没有解,那么aj=1;再更新每一个ri。
    这个式子什么含义呢?
    aj代表合约应该被展示的概率,si*aj代表supply节点i应该给合约j的量,但是可能这时i节点已经没有这么多量了,这时i节点应该给j的量就是ri,所以对每一个节点i,取的是最小值。对所有符合条件的节点i都求出展示量并且求和,就是节点j可以得到的展示量,这个值应该等于合约量dj。至此,一个合约的aj求出来了,然后再更新supply的ri值。下一次迭代。
    现在来直观地理解一下这个算法:首先按照allocation order排序,那么最紧急的合约已经被排到了第一位。然后根据Sj/dj算出aj。aj表示你每一个服务条件的supply节点给我的量的比例。因为这是第一个demand点,所以不存在流量不够的情况。那么对于后面的demand节点,就可能存在某些supply节点量不够的情况,这时只能用ri代替,那么其他节点就需要多出量,所以这时得到的aj肯定是大于Sj/dj的。当然也可能所有的supply节点都不够,那么就把aj设为1。

    图五

    看上面的例子,排序结果是2-1-3。先算2,a2=200/200 = 1,更新第三个supply节点的ri=0;再算1,由于第三个节点ri=0,所以只能用前两个节点,a1=200/800 = 1/4;a3留给读者。
    至此离线算法结束,我们已经为每一个合约都赋予了一个服务率aj。
    下面是在线部分。
    第一步:给定一个展示i,设J={c1,c2,。。。,c|J|}为所有符合条件的合约集合,并且按照allocation order升序排序;
    第二步:设l是[1, |J|]中的最大值,A = a1+...al <= 1,但是a1+...a(l+1) > 1,那么令a(l+1) = 1 - A;
    第三步:对于1 <= j <= l,每一个合约j的服务率就是aj,而j=l+1的服务率是上面计算得到的a(l+1)。然后按照这个服务率作为这些合约的概率,从中选出此次展示的合约。
    注意,这里假设是aj求和大于1的情况,如果小于1,则意味着有些流量是浪费的。
    看之前的例子:
    如果展示{CA,age=5}到达,那么l=1,则合约1总是被选中;
    如果展示{Male,age=5}到达,那么l=2,1/4的概率分给合约1,5/8的概率分给合约3,1/8的流量会不会被分配。这些流量可以被其他变现途径利用。
    至此,HWM算法就介绍结束了。原文的评估部分没有继续探讨了,有兴趣的可以自行查阅。

    小结:

    GD系统的挑战:
    1.计算量大;
    2.依赖预测的准确性;
    HWM的思路:
    1.2-step;
    2.用aj代替了xij,较少内存消耗;

    附录:这是另一篇shale算法论文中对HWM的描述,其中allocation order的一句被定义为Sj/dj,与本文不同,个人认为shale论文的定义更合理。

    展开全文
  • 误码BER计算原理及仿真输出

    万次阅读 2018-11-15 20:45:44
    第三部分是收发机处理循环,其中调用系统对象的步骤方法来调制输入信号,向调制信号中添加信道噪声,并解调以产生接收信号和计算误码。最后,在第四部分中,对仿真进行了清理和终止,并对BER性能结果进行了可视化...

    原文 Understanding LTE with MATLAB  ,作者Houman Zarrinkoub,本文是对于该书的翻译,书中的专业性词汇给出了英文原文,图和表的排版都是参考原文,翻译不准确的地方请读者多多包涵。

    本文仅限于个人学习,研究,交流,不得用于其他商业用途!

     

    翻译:Understanding LTE with MATLAB——3.11节

     

    3.11 系统对象接收

    在这本书中,我们强调了通信系统工具箱的许多特性,特别是我们将介绍产品中使用的新系统对象。通过非常直观的用户界面,系统对象使得表达通信系统的任务更加容易,并且使得生成的MATLAB代码更加可读和可共享。系统对象可以用作Matlab程序和Simulink模型的一部分。它们是表示基于时间和可执行算法的MATLAB对象,并且它们被组织为对象,以便于使用和实际上自我记录。由于在本书的其余部分中我们依赖于System对象在MATLAB中表达LTE系统模型,因此本节将给出一个关于如何使用这些算法组件的简短教程。在此,我们插入MATLAB安装时需要安装的组件内容,如图A所示:

    图A. 安装MATLAB需要安装的Toolbox

     

    3.11.1 通信系统工具箱对象

     

     

    通信系统工具箱的系统对象属于通信(comm)包,它们的名称以公共前缀“comm”开头。为了访问通信系统工具箱的所有系统对象,键入“comm”,然后在MATLAB命令后键入Tab键:

     

    >>comm.<Tab>

     

    这将产生工具箱中可用的所有系统对象的按字母顺序排列的列表。在MATLAB的最新版本中,通信系统工具箱包含作为系统对象提供的总共123个算法。


    让我们选择这些系统对象中的一个,例如COM.QPSK调制器,并创建这类调制器的一个实例。我们把这个实例称为“调制器”。

     

    >>Modulator = comm.QPSKModulator

     

    将创建一个QPSK(Quadratue Phase Shift Keying)调制器,该对象的描述将出现在MATLAB工作区中,如图3.1所示。

    图3.1.通过通信工具创建一个系统对象

     

    每个系统对象都包含属性和方法。其默认属性在创建时出现;此自文档是系统对象的有用特性。通过查看给定系统对象的属性列表,我们知道它可以采用哪些参数,以及通常为它们分配哪些值。例如,QPSK调制器的相位偏移特性默认设置为 ?/4 。让我们把这个参数变成 ?/2。修改属性有两种方法:

     

    • 创建具有默认值的对象,然后使用点标记更改属性。例如:
      >> Modulator = comm.QPSKModulator;
      >> Modulator.PhaseOffset = pi/2;

     

    • 设置不同的属性,因为它们是使用属性-值对创建的。例如:

    >> Modulator = comm.QPSKModulator('PhaseOffset',pi/2);

     

     

     

    如果属性被表示为一串字符,那么当我们想要设置一个特定的属性时,会出现一个方便的可能值的列表。例如,当我们键入“Modulator.SymbolMapping=”后跟一个Tab时,映射选项列表似乎有助于将属性设置为几个选项中的任何一个,在本例中为“Binary”和“Gray”。

     

    step 方法是系统对象执行的主要方法。在创建和配置对象之后,可以传递一个输入(或多个输入),并且可以调用它的step方法来生成它的输出(或多个输出)。有两个语法可用来执行系统对象的STEP方法。我们可以:

    • 使用“.”操作符来调用系统对象: y = Modulator.step(u);

    • 使用step方法作为函数,系统对象作为函数的变量:y = step(Modulator, u).

       

    在图3.2中,使用MATLAB randi函数创建10×1列位向量(变量u),然后作为输入传递给Modulator System对象。通过调用它的step方法,基于指定的属性使用QPSK算法创建表示调制比特的调制符号的5×1输出向量(y)。

    图3.2.调用step方法执行系统对象

     

    现在我们已经了解了如何访问、创建、设置系统对象的属性、配置和调用系统对象来执行计算,接下来让我们创建一个简单的脚本,该脚本使用几个系统对象来表达一个简单的通信系统。

     

    3.11.2 系统对象测试

    下面是一个MATLAB脚本,或者称为testbench,它使用系统对象对简单的收发器系统进行BER分析。该收发器由QPSK调制器、加性高斯白噪声(AWGN)信道和QPSK解调器组成。注意,此代码使用了来自通信系统工具箱的四个系统对象:comm.QPSKModulator、comm.AWGNChannel、comm.QPSKDemodulator和comm.ErrorRate。

     

     1%% Constants
     2FRM = 2048;
     3MaxNumErrs = 200;
     4MaxNumBits = 1e7;
     5EbNo_vector = 0:10;
     6BER_vector = zeros(size(EbNo_vector));
     7
     8%% Initializations
     9
    10Modulator = comm.QPSKModulator('BitInput',true);
    11AWGN = comm.AWGNChannel;
    12DeModulator = comm.QPSKDemodulator('BitOutput',true);
    13BitError = comm.ErrorRate;
    14
    15%% Outer Loop computing Bit-error rate as a function of EbNo
    16
    17for EbNo = EbNo_vector
    18    snr = EbNo + 10*log10(2);
    19    AWGN.EbNo = snr;
    20    numErrs = 0;
    21    numBits = 0;
    22    results = zeros(3,1);
    23    %% Inner loop modeling transmitter, chanel model and receiver for each EbNo
    24    while((numErrs<MaxNumErrs)&&(numBits<MaxNumBits))
    25        % Transmitter
    26        u = randi([0,1],FRM,1);
    27        mod_sig = step(Modulator,u);
    28
    29        % Channel
    30        rx_sig = step(AWGN,mod_sig);
    31
    32        %Receiver
    33        y = step(DeModulator,rx_sig);
    34        results = step(BitError,u,y);
    35        numErrs = results(2);
    36        numBits = results(3);
    37    end
    38
    39    % Compute BER
    40
    41    ber = results(1);
    42    bits = results(3);
    43
    44    %% Clean up & collect results
    45    reset(BitError);
    46    BER_vector(EbNo+1) = ber;
    47end
    48
    49%% Visualize results
    50
    51EbNoLin = 10.^(EbNo_vector/10);
    52theoretical_results = 0.5*erfc(sqrt(EbNoLin));
    53semilogy(EbNo_vector,BER_vector)
    54grid;
    55title('BER vs. EbNo - QPSK modulation');
    56xlabel('Eb/No (dB)');
    57ylabel('BER');
    58hold;
    59semilogy(EbNo_vector,theoretical_results,'dr');
    60hold;
    61legend('Simulation','Theoretical');
    

     

     

     

    该脚本由四个部分组成。在初始化部分中,创建系统对象并设置一些参数。第二部分包含处理测试台,该测试台迭代Eb/N0值并计算相应的BER度量。第三部分是收发机处理循环,其中调用系统对象的步骤方法来调制输入信号,向调制信号中添加信道噪声,并解调以产生接收信号和计算误码率。最后,在第四部分中,对仿真进行了清理和终止,并对BER性能结果进行了可视化。输出结果如图3.3所示。

    图3.3AWGN信道下QPSK调制的BER曲线仿真与理论结果对比

     

    通过运行这个脚本,我们获得了使用AWGN信道的QPSK调制系统的BER曲线。由AWGN信道处理的QPSK调制的理论BER结果为公式(3-1):

    系统对象的使用产生了模块化的、易于理解的MATLAB代码,并形成了可以扩展为更复杂系统的结构。我们将初始化,处理循环,终止,可视化这四个步骤贯穿本书。改进MATLAB程序并使其更易读的一种方法是将测试台和可视化操作与算法和系统描述分开。接下来,我们将展示如何通过将收发器捕获为MATLAB函数并将算法组件与测试台脚本分离来实现这一点。

     

    3.11.3 系统对象函数

    MATLAB函数 chap3_ex02_qpsk() 执行我们的简单QPSK收发器系统的算法部分。这个函数有三个输入变量:

    • 第一个输入是信噪比Eb/No;

    • 第二输入是停止标准之一,基于在停止模拟之前可以观察到的最大错误数;

    • 第三个输入是另一个停止准则,基于在停止模拟之前可以处理的最大位数。

       

    对于每个Eb/N0值,代码在while循环中运行,直到观察到指定的最大错误数量或处理最大位数为止。该代码通过调用step方法来执行每个系统对象。它计算两个输出:

     

    • BER,定义为所观察到的错误数与处理的位数的比值;

    • 基于由第二和第三输入变量定义的停止准则处理的比特数。

     

     1function [ ber,bits ] = chap3_ex02_qpsk( EbNo,maxNumErrs,maxNumBits )
     2%% Initializations
     3
     4persistent Modulator AWGN DeModulator BitError
     5
     6if isempty(Modulator)
     7    Modulator = comm.QPSKModulator('BitInput',true);
     8    AWGN = comm.AWGNChannel;
     9    DeModulator = comm.QPSKDemodulator('BitOutput',true);
    10    BieError = comm.ErrorRate;
    11end
    12
    13%% Constants
    14FRM = 2048;
    15M = 4;
    16k = log2(M);
    17snr = EbNo + 10*log10(k);
    18AWGN.EbNo = snr;
    19
    20%% Processing loop modeling transmitter, channel model and receiver
    21numErrs = 0;
    22numBits = 0;
    23results = zeros(3,1);
    24while((numErrs<maxNumErrs)&&(numBits<maxNumBits))
    25    % Transmitter
    26    u = randi([0 1],FRM,1);
    27    mod_sig = Modulator.step(u);
    28
    29    % Channel 
    30    rx_sig = AWGN.step(mod_sig);
    31
    32    % Receiver
    33    demod = DeModulator.step(mod_sig);
    34    y = demod(1:FRM);
    35    results = BitError.step(u,y);
    36    numErrs = results(2);
    37    numBits = results(3);
    38end
    39
    40%% Clean up & collect results
    41ber = results(1);
    42bits = results(3);
    43reset(BitError);
    44
    45end
    46
    47
    48}
    

     

     

     

    为了避免每次调用函数时创建和释放系统对象所涉及的开销,函数中的系统对象由持久变量 persistent 表示。使用持久变量允许我们执行诸如只在第一次调用函数时创建系统对象之类的操作。这增加了函数调用的效率,并提高了我们在循环中调用函数的模拟速度。

     

    3.11.4 BER仿真

    通信系统工具箱为BER工具提供了一个用于BER仿真性能的综合测试台。BERTool 是一个图形应用程序,它计算一系列模拟的误码率,并将结果与已知的分析结果进行比较。

    图3.4. BERTool:BER结果可视化的测试平台应用

     图3.15 BER仿真结果输出

    例如,为了可视化函数chap3_ex02_qpsk.m的模拟BER,如图3.4所示,转到Mote Carlo选项卡,将文件指定为模拟MATLAB文件,并指定Eb/N0值和停止条件。BERTool将计算提供的Eb/N0值范围内的BER,并将自动显示结果。这些模拟结果可以通过进入理论标签并指定所使用的调制和编码方案与理论结果进行比较。图3.5显示了BERTool仿真结果的输出。

     

    未完待续

    2018/11/13

     

     

     

     

    展开全文
  • 计算机保研夏令营预推免

    千次阅读 多人点赞 2019-12-11 16:03:01
    夏令营与预推免个人情况 学校:末流211(安徽大学) 排名:1/70 绩点:4.33/5.0 竞赛:无ACM,有某水赛国奖(中国人工智能学会主办) 科研:一篇水会EI,一篇一区SCI在投 ...预推免:复旦,浙大,中科院计算...

    夏令营与预推免个人情况

    • 学校:末流211(安徽大学)
    • 排名:1/70
    • 绩点:4.33/5.0
    • 竞赛:无ACM,有某水赛国奖(中国人工智能学会主办)
    • 科研:一篇水会EI,一篇一区SCI在投

    4月霸面:中科院计算所前瞻实验室

    夏令营入营:中科大,复旦,上海交大,同济(计算机+软件),华东师范(计算机+软件),浙大,北航

    夏令营参营:中科大,复旦,上海交大,同济计算机

    预推免:复旦,浙大,中科院计算所泛在实验室(只参加了前两个)

    Offer:中科大学硕,复旦专硕,上交直博,同济学硕

    参营过程

    一、中科院计算所4月霸面

    当时4月多,啥也没准备,脑子一热就给计算所某大佬发了邮件。没想到过了几天,大佬邮件通知我,希望我去一趟北京,当面和他谈谈。于是乎,我便简单准备了一下面试要点,定了从合肥去北京的复兴号,急匆匆前往。

    计算所在中关村,周围都是企业,研究生大约9点左右“上班”。在楼底下等到了老师建议通讯的学姐后来到了实验室,没想到当时联系的老师突然给我一套测试题,让我做完了给他再和他聊,这当时就给了我一个下马威,只准备面试的我瞬间感到凉凉。题目全英文,如下所示(图片已压缩),**包含了概率论与数理统计,动态规划与贪心算法,排序算法,数学分析,数学建模,算法设计(编辑距离)**等。自己体会下,如果想要做得不错大约需要两到三小时(大佬除外)。
    在这里插入图片描述
    在这里插入图片描述
    中午做完卷子和在计算所的亲戚一起吃了顿饭,伏在学长工位上休息了会,下午就带着做完的卷子和老师聊了会天。可能我比较菜吧,老师看上去对我的答卷并不满意,转而问我其他问题,包括但不限于描述一些复杂的数据结构、代码量如何,如果把你关到一个屋子你最想(能)写出什么样的程序。聊得还可以,老师蛮和蔼可亲的。后来老师的意思希望我如果入了计算所的营到时候再联系他。然而后来营都没入(入营的基本上都是985的,还有很多清北选手,可以从官网上找,PS:最后进入计算所深造的大佬们没有入营名单那么恐怖。),不过好歹手上已经有了其他学校的offer就不执念于计算所了。

    后来预推免的时候也报了名,可以参加计算所泛在实验室的面试,貌似报了名的都能去,于是我就放弃了这次机会。

    二、上海交大直博面试

    Abstract:交大的计算机隶属于电院,电院也是交大人数最多的院系,交大直博统一面试非常水,但是难点在找导师上,你想找好导师,好导师不要你,有些导师想找学生,但是找不到(被延毕支配的恐惧)。

    时间:面试6月12日;找导师:9月之前

    6月12日,交大闵行区陈瑞球楼,来到交大5000亩的地,到处透露着富贵的气息。

    下午1点30开始面试,分为多个组,每个组5到6个老师,一个人25分钟左右,可能会让你英语和中文来回转换着说。到我时,我刚准备用英文自我介绍,发现不需要,于是就愣了一会儿,才尴尬地中文自我介绍。结束后老师主要问项目细节和你对某一问题的看法,没有问专业问题和数学问题,最后会让你用英文复述某个项目(一定好好准备),英文的这个每个人不同,有的就是介绍你的家乡,介绍你的食物等。
    在这里插入图片描述

    结束后,交大的高中同学带我逛了逛他们的图书馆和校园,xmsl。

    晚上刚和同学喝了点小酒,就收到了来自jc中心某老师的信息,让我去谈谈。7点30,见到了老师,单独见面会问你项目和专业问题,还有数学问题等(概率论与数理统计和排序算法非常重要哦)。

    之后的两个月,面了很多老师,有的是全英文面试,有的就很水,最终没有一个我们互相满意的。最后9月份从浙大预推免回来时,在7月联系的某优青老师说有名额,于是签下承诺书去交大直博去了。

    三、同济大学计算机夏令营(隶属与电院)

    Abstract:同济的关键在于笔试,笔试高,最终就可能获得优秀营员。和别的学校不同,同济的优秀营员不一定就是录取,因为最后要和预推免一起排名,9月份才确定(很坑)。

    时间:7月5日到7日

    住宿四星级酒店,条件不错很干净,就是有点小。我和一个河海大学控制方向的大佬住一间,他在笔试前复习到0点多。

    7月5日
    报到:同济的计算机隶属于电院,同济和交大一样,地理位置非常偏远,嘉定区都快到江苏昆山了,没有地铁!没有地铁!,从地铁口坐了近40分钟的大巴到了同济主校区。
    在这里插入图片描述

    7月6日
    上午参加宣讲会+合影留恋

    下午笔试,同济计算机没有机试,整个电院都是笔试,每种不同的学科笔试不一样,计算机学科笔试内容如下:

    • 编译原理(中文):5道基础选择题;写出编译的过程;求first和follow集合等

    • 数据库(英文):数据库比较难,包括了ER图;冲突序列化;SQL查询语句;主键, 超键;范式等

    • 算法(中文):算法复杂度分析;规定复杂度找出众数,动态规划等

    • 英语:给了你一段深度学习的介绍和资料,让你写abstract和评论

    7月7日
    综合面试,每一组有很多老师,大概8人左右,分管不同的方面(英语,专业,思想政治等),首先进去要进行自我介绍,自我介绍需要用英语,之后会问你一些专业问题(问了我编译原理和昨天的考试难不难)和项目问题,有些老师可能会怼你。

    去复旦当天得知,获得了同济的优秀营员。

    四、复旦大学计算机夏令营与预推免

    Abstract

    复旦的夏令营:自由而无用,一期招了200人入营,不提供住宿(导致我租了个旅馆每天要骑单车来学校,不过沿途环境不错,有很多吃的地方),复旦张江校区比较小,这导致两个问题,专硕没宿舍,一部分老师在校外租写字楼给研究生当办公室(复旦真有钱)。最终给的学硕名额非常之少。为什么当年高校圈地运动时复旦到郊区多圈地呢,看看闵行区人民公园附属交大5000亩。

    时间:7月10日到12日

    Detail

    7月10日
    上午:报道注册,人太多了,注册了一个上午,基本上来的211学校里面都是专业第一,注册完后在雨天里统一拍照。

    下午:各实验室宣讲会+找导师:

    宣讲时发现招收的优秀营员特别少,计算机学硕只有11个,专硕16个。

    在这里插入图片描述
    我看了看计算机楼的NLP实验室一群大佬等着(来CS B+的复旦肯定就要选最好NLP啊!)

    看了看时间有限,我找了三个老师,一个在邯郸本部教学,一个在校外写字楼教学,方向两个机器学习理论,一个软件工程方向,都表示只要是优秀营员都接受我。

    晚上骑着单车回旅馆。

    7月11日
    上午:机试,机试oj就3到题目,两个半小时,题目非常非常简洁,就两到三行,但是数据范围和数据量特别大,数据量分三个等级,低,中,高,如果只是简单地写写能过低等级,是拿不到多少分的。第一题是所有连续区间的最小值求和,第二题是求两个质因数并且大的质因数恰好是比小的数大的最小一个素数,第三题是公共子序列。

    下午:英语口语面试,这个很水,不用紧张,一人5分钟,不问专业问题,需要自我介绍,只是用英语和你聊聊对计算机领域某种事物的看法或者拉拉家常。

    7月12日:计算机专业综合面试
    面试的老师有6人,一个大佬作为面试组长,会从你的项目,数据结构,数学等方面综合考察你的知识。除了项目外,我被问到了如何用栈实现汉诺塔问题,最短路径问题,最小生成树问题等。

    7月18日出结果,最后我拿到了计算机专硕名额,不甘心的9月自动进入第二批申请学硕资格。

    9月预推免
    九月份又去了一次看看能不能申请到学硕,具体的名额分配如下图,距离太远,请见谅。

    在这里插入图片描述
    整个流程和夏令营基本一致,但是被压缩到两天,机试稍微比夏令营难一点,由于夏令营有了offer,预推免就没认真准备了。英语面试让我介绍一下遗传算法(根据你的自我介绍),专业面试被问的问题非常奇葩,问我10年后的手机是什么样子,又什么功能和技术瓶颈。(可能是我在自我介绍时说了我的发散思维比较强才问的吧)

    最后感谢周水#,池M#和杨#老师对我的青睐,没能去是在抱歉。

    五、中科大计算机夏令营

    Abstract

    2019年中科大计算机夏令营比往年增加了不少难度,统一增加了机试环节,面试难度提高(陈恩红实验室和李向阳实验室向来包含机试),最终录取率在60%左右(往年90%+),目测与建双一流有一定关系,往年夏令营简历筛选能过很多211的,但是2019年只有二十多个211学校,这样的操作会导致后期学生鸽老师鸽得比较狠。最后填系统的时候拒绝了某青千老师真的很难受。

    时间:7月15日-7月19日

    Detail

    7月15日:报道与住宿(外观不咋地,内部条件还可以)
    第一天在下午之前都可以去报到,部分热门的组和老师可能在今天晚上就会安排笔试和面试(如李向阳实验室)

    7月16日:入营与机试
    上午:入营仪式,科大所有院系统一开的入营仪式,能并行接待这么多学生也是不多见了。
    在这里插入图片描述

    下午:计算机学院各实验室宣讲会,参观超算中心,参观校史馆。

    晚上:吃过晚饭后统一机试,结束后大概快晚上10点了。

    这是科大的第一次机试,一共5道题,有很多不成熟的地方,是人工阅卷,人工输入数据检测,人工阅卷的好处是不会写的要尽量写,可以只求出部分解,多加注释,这样分不会低。

    包含题目:类似于一个素数能否被拆成多个连续整数的和(记不大清楚了,大概是这样);马走日;动态规划求正方形的最大周长和面积(https://blog.csdn.net/JackZhang_123/article/details/78082120);高精度多种进制转换;集合问题。

    7月17日:各大实验室面试

    • 陈恩红BDAA实验室:oj机试30分钟两题,时间太紧一道素数问题,一道迪杰斯特拉算法,这两题都很简单,可惜卡数据,学长学姐面试,讲自己的项目,问些简单的线代,概率论和算法的问题。

    • 李向阳实验室:笔试和面试分开来,时间比较久,面试通过后要签协议,就是留在科大该组,不会选择其他组。

    • 伯明翰实验室:陈欢欢出差,李金龙面试,问的问题比较多,时间比较长。

    • 其他实验室大多只要面试,机试不差且找到导师要你基本上就ok。

    7月18日:院统一面试
    分成四个组,每个组二十多人,一个人15分钟左右,每组6个老师,一般会问你项目中的问题,老师们会问你学得最好的科目是什么,然后再问你具体问题,一般问的是数据结构,当然如果你是大佬你说是人工智能或机器学习也行。

    至此科大结束(李向阳实验室可能还会继续面试)

    7月22日左右:获得消息
    录取率60%,需要机试和面试成绩同时达到及格线方可录取。

    后话
    夏令营录取之后只要9月28号在推免系统填上就OK了,在8月份和9月份会各有一次确认推免追踪,就是看你鸽不鸽科大,如果你确认不来科大,那你的资格就取消,9月确认时60人还剩45人左右确认推免科大。

    六、浙江大学计算机预推免

    Abstract:浙大的预推免非常看重基础,PAT(或者机试)高分是成功的关键。因此一定要练好PAT甲级,面试会考察你的英文能力与专业水平,一定要提前准备好。

    浙大的硕士一般都放到9月份来选拔,简单地填上系统等待即可。筛选简历后大约有400多人进了复试,包括计算机,软件,网安等。

    机试
    如果在今年考过PAT的可以申请免机试。官网上可以查到人数。其他的则在9月23号晚上进行机试。机试的地点在浙大紫金港校区的计算中心,紫金港校区特别大,也很漂亮。机试就和PAT一样,不罚时,能够看到自己的rank,最后有近100人机试满分,和我同来的ACM大佬90分钟就搞定所有题目回去了。而我由于在科大夏令营结束后就未再敲过代码导致机试一般般。我院ACM大佬wmr机试满分,顺利拿到offer。
    在这里插入图片描述
    面试
    第二天是面试,很不巧我被排在了第一个面试,面试之前会让你抽红纸白纸各一张,红白纸上是计算机专业英语,面试前你有20分钟熟悉纸上的内容(每张纸大约300到400个词左右),难度并不是很大。

    面试时,大约有6个老师,首先进行英文自我介绍,接下来会有老师从红白纸上问你一些专业问题,一般是概述纸上的内容(也就会简单地问一下WHAT),有的老师可能会别出心裁地让你用英文解释一下机器学习和人工智能,或者问问你的母校之类的问题。

    随后,有老师会问你专业问题,专业问题完全看老师的研究方向及个人喜好,我被问到了虚拟内存的定义和作用。如果你有项目,老师会根据你的项目一点一点地深入,可能会让你介绍一下项目中用到的算法和时间复杂度分析。

    最后每个人都会问到的问题:如何看待法(和)某(谐)功,回答坚决抵制就好了。

    整个面试流程大约15分钟左右,面试时老师们都很和蔼,自我感觉良好,顺风顺水,因此需要机试来拉分。

    最终大约有一百三十多个人拿到了offer,其中八十多个是本校的。

    上交是我第一个参营的学校,也是我最后一个拿到offer的学校,有种沉舟侧畔千帆过,病树前头万木春的感觉。整个保研推免过程都在预料之内,唯一遗憾的是准备了很久的北大百炼机试,但却没有去申请清华和北大的夏令营。

    我在面试中遇到的高频问题

    ①项目问题,简历的项目一定要好好准备,这是问得最多的。

    ②线性代数
    矩阵的秩
    线性相关
    矩阵的特征值及物理意义
    向量空间

    ③概率论与数理统计
    大数定律和中心极限定理的意义与作用(切比雪夫大数定律)
    独立和不相关的区别
    正太分布(正态分布的和还是正态分布吗,正态分布性质与独立同分布)

    ③数据结构
    堆实现及应用
    排序算法
    迪杰斯特拉
    最小生成树等
    邻接表和邻接矩阵(如何存储大数据)

    ④机器学习与人工智能(一般英文问得比较多,很多都是些观点看法,也有很多是与项目联系在一起)

    个人博客: omegaxyz.com

    Github: https://github.com/xyjigsaw

    展开全文
  • 常用分布式计算任务调度算法

    万次阅读 多人点赞 2019-05-10 10:12:38
    如何采取有效的调度策略来平衡各节点的负载,从而提高整个系统资源的利用,已成为人们的研究热点。 集群具有可扩展性、 高可用性、高性能、高性价比等优点,作为存储区域网的存储设备具有天生的优势。随着PC机的...
  • 计算机组成原理 — GPU 图形处理器

    万次阅读 多人点赞 2019-08-12 19:32:44
    CPU,如 Intel i5 或 i7 处理器,其内核数量较少,专为通用计算而设计,因此具有复杂的控制单元;而 GPU,是一种特殊类型的处理器,具有数百或数千个内核,经过优化,可并行运行大量计算,主要用来处理计算性强而...
  • ML学习分享系列(2)_计算广告小窥[中]

    万次阅读 2016-02-19 12:11:37
    关注计算广告点击预估和竞价算法,关注机器学习和深度学习,初学者。 机器学习QQ群:初学者373038809,行业同学和研究者472059892。 (上)(中)(下)全文目录 引言 广告=>互联网广告 :“您好,了解...
  • 第一讲:高性能计算基础知识讲解

    千次阅读 2019-12-29 17:09:57
    回顾过去15年,HPC一直是增长最快的IT市场之一,其增长速度有时甚至超过了在线游戏、平板的年增长,在云计算、大数据和AI的推动下,HPC的应用类型更加复杂,要求HPC方案必须与时俱进,需要不断匹配新技术来应对...
  • ML学习分享系列(1)_计算广告小窥[上]

    万次阅读 2016-01-25 15:39:44
    回顾计算广告的发展历史,纵使错综复杂,但究其根本,便是广告主、媒体与用户之间相互博弈之后达到的平衡状态。在传统广告踏入互联网大门之后,在利益最大化的驱动下,媒体通过受众定向技术引领广告进入合约广告时代...
  • CAN波特设置时的参数计算

    千次阅读 2017-06-29 07:34:04
    CAN(Controller Area Network)总线最早由德国 BOSCH公司提出,主要用于汽车内部测量与控制中心之间的数据通信。... Can控制器器只需要进行少量的设置就可以进行通信,其中较难设置的部分就是通信波特计算。CAN...
  • 边缘计算的七项核心技术

    千次阅读 2019-01-23 15:52:08
    作者:施巍松团队(张星洲、王一帆、张庆阳) 计算模型的创新带来的是技术的...边缘计算计算推至靠近数据源的位置,甚至于将整个计算部署于从数据源到云计算中心的传输路径上的节点,这样的计算部署对现有的网...
  • 分布式计算的详细笔记

    千次阅读 多人点赞 2020-04-24 15:29:52
    分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。 本质:如何把一个大型的任务分成若干个小任务,让多个计算机去处理。 ==分布式...
  • 内存分配方式与内存分配算法

    千次阅读 2018-03-14 20:24:56
    内存分配方式有两种,连续内存分配方式和离散内存分配方式。不同的分配方式又有不同的分配算法。 内存分配算法,其实就是:有一大块空闲的资源,如何合理地分配资源?内存分配的思想可以用到很多其他的领域。比如...
  • 移动计算

    千次阅读 2018-06-24 12:02:02
    移动计算是随着移动通信、互联网、分布式计算等技术的发展而兴起的新技术。移动计算技术将使计算机或其它信息智能终端设备在无线环境下实现数据传输及资源共享,将信息传递给远程服务器下的一种分布计算环境下的技术...
  • 如果关注这个领域的同学可能知道,Ray其实在...Ray 是RISELab实验室(前身也就是开发Spark/Mesos等的AMPLab实验室)针对机器学习领域开发的一种新的分布式计算框架。按照官方的定义:“Ray is a flexible, high-perf...
  • 云技术:弹性计算ECS

    千次阅读 2013-10-23 21:27:03
    云计算(Cloud Computing)被业界看作继大型计算机、个人计算机、互联网之后的第四次IT产业革命,正日益成为未来互联网与移动技术相结合的一种新兴计算模式。云计算提供了IT基础设施和平台服务的新模式,顺应了当前...
  • JVM的垃圾回收算法、收集器以及内存分配策略放在一起了解和理解,我觉得有助于我们加深印象,这一篇文章我就不再讲述对象为什么要回收以及何时回收了,想要了解相关知识可以看我的另一篇文章JVM如何判断对象是否要...
  • Matlab并行计算(新手)

    千次阅读 多人点赞 2020-10-22 18:11:46
    其中1个应该是主控的,它基本不干活,只负责分配,进行计算时他的cpu占用只有1~2%,其他3个进程是专门用来计算的。 若在代码开头不开启partool,只将for改为parfor,则CPU占用情况为: 发现开启了5个进程,其中4个...
  • 什么是并行计算

    万次阅读 多人点赞 2020-01-15 14:26:19
    原文出处:并行计算简介 并行计算简介 (本人刚刚完成这篇长文章的翻译,尚未认真校对。若里面有翻译错误和打字错误敬请谅解,并请参考原贴) 1 摘要 最近项目需要实现程序的并行化,刚好借着翻译这篇帖子的机会...
  • 如何成为一名异构并行计算工程师

    万次阅读 多人点赞 2017-12-15 10:18:16
    两个芯片计算力分别是10T和 20T,某人的异构并行计算能力为0.8,他拿到了计算力为10T的芯片,而异构并行计算能力为0.4的人拿到了计算力为20T的芯片,而实际上最终结果两人可能相差不大。异构并行计算能力强的人能够...
  • 云计算的可信新边界:边缘计算与协同未来

    万次阅读 多人点赞 2020-08-18 10:54:35
    伴随云计算的飞速发展,边缘计算将迎来爆发式的增长 …
  • 计算机的工作原理

    万次阅读 多人点赞 2018-09-13 15:14:58
    第三行:计算并显示(a + b) // 逐行执行:第一行 ---> 第二行 ---> 第三行...... 选择 :如果某个条件满足(比如x)就到第p行;如果不满足(比如x>=y)就到第q行 第一行:a = 1 第二行:b = 用户输入 第三...
  • [并行计算] 1. 并行计算简介

    万次阅读 多人点赞 2017-07-20 15:30:07
    这篇帖子旨在为并行计算这一广泛而宏大的话题提供一个非常快速的概述,作为随后教程的先导。因此,它只涵盖了并行计算的基础知识,实用于刚刚开始熟悉该主题的初学者。
  • 五种大数据计算框架

    千次阅读 2019-08-27 00:27:45
    虽然负责处理生命周期内这一阶段数据的系统通常都很复杂,但从广义层面来看它们的目标是非常一致的:通过对数据执行操作提高理解能力,揭示出数据蕴含的模式,并针对复杂互动获得见解。 为了简化这些组件的讨论,...
  • 原因很简单,作为一个资历尚浅的研究生,是没有资格对计算广告这样一个伟大的行业、领域和学科来评头论足的。之所以这么做,一是总结自己已掌握的知识,二是降低同学们的学习成本。本人能力有限,更缺乏实践经验,...
  • CISC:复杂 RISC:简化 以下为我总结的必掌握部分(想高分?下面的全搞会) 另计算机组成原理(第二版唐朔飞)319页7.3也需要掌握。 下面是可能会出的题,丰富知识面,高手可追求掌握。 掌握了这些,计算机组成原理...
  • 综上所述,由于面对极其复杂的业务场景和技术挑战,滴滴出行大数据架构部为此专门成立实时计算团队进行底层架构的深度优化以及开发平台的构建,并逐步将BI实时监控和实时业务报警等业务实现用平台来承接,完成了实时...
  • 相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。  常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是:  ⑴ 找出算法中的基本语句...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,115
精华内容 55,246
关键字:

复杂分配率计算