交易系统开发技能及面试之低延迟编程技术

本文介绍了低延迟编程在交易系统开发中的关键技术和面试知识点,包括CPU缓存、kernel bypass、非阻塞编程和编译优化。强调了缓存预热、CPU绑定、缩小锁粒度等方法,并通过实例分析了代码性能优化。同时,探讨了避免动态内存分配、使用位运算和整型表示浮点数等编程技巧。最后,指出在高频交易系统中,集中式服务和FPGA矩阵编程的重要性。
摘要由CSDN通过智能技术生成

概要

关于低延迟相关技术,需要我们掌握cpu cache工作原理、kernel bypass、非阻塞编程、编译优化、硬件优化( CPU pipelines,FPGA)、软件优化(高效算法和数据结构)

CPU Caches

Cacheline(缓存行):内存与缓存的交互总是以cachelline大小进行拷贝。比如:cpu传输一个整型变量时(4或8字节),采用的是一个cacheline大小(主流cpu是64字节)进行传输,可以理解cacheline为最小缓存单位。

缓存的类型:指令缓存(程序指令),数据缓存(程序数据),虚拟内存与物理内存的映射缓存。

缓存等级:cpu寄存器 -> L1缓存 -> L2 缓存 -> L3缓存 -> 主存, 越靠近cpu寄存器的位置速度越快。

缓存一致性:对在不同的缓存和主存之间的数据一致性处理。

时间局部性 Temporal Locality:指最近使用的数据更有可能再被使用。

空间局部性 Spatial Locality:如果内存中某个位置的数据正在被cpu所使用,那么靠近这个内存位置的内存数据很可能在不久的将来被引用。

缓存预热 :当数据第一次被cpu引用时,数据被从主存放置到缓存中。缓存预热是为了增加缓存命中,而预测即将使用的数据并把其加载到缓存中。

**CPU 绑定,pinning **: 指将进程和某个或者某几个 CPU 关联绑定,绑定后的进程只能在所关联的 CPU 上运行,可提高缓存命中率。

Q1 分析代码段性能

分别采用行、列访问数据的方式:

// row major order
std::vector<double> v(n * n);
double sum{
   0.0};

for (std::size_t i = 0; i < n; i++) {
   
    for (std::size_t j = 0; j < n ; j++) {
   
        sum += v[i * n + j];
    }
}

// column major order
std::vector<double> v(n * n);
double sum{
   0.0};

for (std::size_t j = 0; j < n; j++) {
   
    for (std::size_t i = 0; i < n ; i++) {
   
        sum += v[i * n + j]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值