一个小场景在开始正式讨论我们的问题之前,我们先想象这么一个小场景: 场景1:6只小鸟停在电线上休息,都在等待食物。 场景2:我们向鸟群投放一条小虫,作为它们的食物。 场景3:6只小鸟看到有食物到来,都停止休息,一起飞起来去抢夺食物。 场景4:最终只有一只小鸟(bird4)能够吃到食物,其他小鸟无奈而又伤心的回到电线上继续休息。 何谓惊群问题?上面我们的小场景实际就是一个现实中的惊群问题,明
继续阅读

前言《CSAPP》讲到了局部性原理:一个编写良好的计算机程序常常具有良好的局部性(loacality)。也就是说,它们倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。这种倾向性,被称为局部性原理(principle of locality),是一个持久的概念,对硬件和软件系统的设计和性能都有着极大的影响。 局部性原理代码示例为了让大家更加直观的感受到局部性原理对我们程序性能的影
继续阅读

问题背景  KMP算法是一种优化后的字符串匹配算法,可以将复杂度由暴力匹配的O(m*n)降低到O(m+n),具体原理就不再赘述,相信几乎任何一本算法书上面都会有KMP算法的详细介绍与实现。以前虽然学习过KMP算法,也清楚算法的原理,但是却从来没有完整实现过一次,闲来无事便打开Visual Studio准备使用C++独立实现一下。   代码如下: 12345678910111213141516171
继续阅读

前言  在多核并发编程中,如果将互斥锁的争用比作“性能杀手”的话,那么伪共享则相当于“性能刺客”。“杀手”与“刺客”的区别在于杀手是可见的,遇到杀手时我们可以选择战斗、逃跑、绕路、求饶等多种手段去应付,但“刺客”却不同,“刺客”永远隐藏在暗处,伺机给你致命一击,防不胜防。具体到我们的并发编程中,遇到锁争用影响并发性能情况时,我们可以采取多种措施(如缩短临界区,原子操作等等)去提高程序性能,但是伪共
继续阅读

什么是循环展开?  循环展开,英文中称(Loop unwinding或loop unrolling),是一种牺牲程序的尺寸来加快程序的执行速度的优化方法。可以由程序员完成,也可由编译器自动优化完成。循环展开最常用来降低循环开销,为具有多个功能单元的处理器提供指令级并行。也有利于指令流水线的调度。 循环展开对程序性能的影响  我们直接以实际代码向大家展示循环展开的作用,首先看未经过循环展开优化的代码
继续阅读

问题背景:  在开发股票自动化交易软件过程中,我们需要将股票的tick数据(每3s一笔)存储下来,供我们的股票交易策略部分使用。这种情况下首先想到使用MySql这种关系型数据库进行存储,但是我们的股票自动化交易软件对速度的要求极高,可能相差几十毫秒就是赚钱与亏钱的区别,而MySql这种传统数据库的插入与查询是很慢的,无法满足我们的要求。当然我们也可以选择既满足存储数据的要求又能达到我们需要的速度要
继续阅读

背景  事情是这样的:在股票的自动化交易软件开发过程中,我们使用了万得的一套股票行情获取API,伴随着API还提供了一个示例程序,我们在开发过程中借用了部分示例程序中的代码,其中就包括一个配置读取类:ConfigSettings,这个类负责从配置文件中读入软件配置参数,并把参数的值保存在成员变量中,以供后面程序进行参数读取。   但是除了原来支持的参数之外,我们又在配置文件中增加了新的配置参数,是
继续阅读

前言  在上篇文章中,我们通过分析一段典型程序的汇编级代码更加清楚的看到了分支预测对程序性能的影响,当数据对分支预测器预测不友好的时候,我们的程序性能下降巨大。那么,怎么才能避免分支预测频繁出错对我们程序运行的不利影响呢? 用条件传送替代条件控制转移  分支预测对有规律的分支跳转可以实现非常高的预测正确率,比如在循环判断中,在循环终止之前,分支预测都可以基本保证完全的预测正确,预测错误只会出现在最
继续阅读

前言  前面两篇文章,我们大体介绍了分支预测器的基本概念及经典实现方法:1. 分支预测器的概念与作用 2. 分支预测器的经典实现方法 ,我们又参与CPU架构相关的工作,那么我们了解到的分支预测器这些知识用处在哪里呢?或者换句话说,这些知识对我们写程序有什么指导意义吗?   条件判断与循环这些程序基本组成部分是我们写程序必须用到的结构,而条件判断与循环终止判断反映在机器指令上就是条件分支跳转与否,
继续阅读

前言  在上篇文章中,我们介绍了分支预测器在提高CPU流水线效率上的重要作用,上篇文章最后还提到,分支预测器的预测准确率对CPU执行命令效率有巨大影响,当预测错误时必须将流水线冲刷,然后重新从正确的地址取指,分支预测错误将会产生很大的代价,而且这种代价随着流水线的深度的增加而快速增长。   过去几十年,国内外科研界及工业界提出了多种分支预测模型以提高分支预测的准确率,本篇文章,我们主要挑选部分典型
继续阅读

Root lee

高频与量化交易系统开发,
C++后台开发,Python爬虫开发


Student


Ukraine