一些高频的C++ cache line面试

news2024/11/17 9:51:18

C++那些事之False Sharing与Cache line

最近看到一段代码,手动做的对齐,于是研究一下不对齐又会带来什么影响?

template <typename T>
class AtomicWithPadding {
 private:
  static constexpr int kCacheLineSize = 64;
  uint8_t padding_before[kCacheLineSize];

 public:
  std::atomic<T> value;

 private:
  uint8_t padding_after[kCacheLineSize];
};

这里便引出了大家面试的必考点:

  • Cache line

于是有下面几个面试问题,你能答上来?

  • 什么是cache line?

  • 什么是MESI协议?

  • 什么是False sharing?

  • C++里面如何保证避免False sharing?

  • 避免False sharing可以带来什么好处?

  • 你知道C++17之后提供了哪两个变量解决这个问题?

于是,找了个性能测试,大概实现是:

  • 定义4个变量,a、b、c、d,多线程进行共享

  • 另外是对这四个变量对齐,然后开n个线程去调度。

下面是benchmark:

------------------------------------------------------------------
Benchmark                        Time             CPU   Iterations
------------------------------------------------------------------
singleThread                  4.05 ms         4.04 ms          133
directSharing/real_time       8.78 ms        0.069 ms           77
falseSharing/real_time        8.81 ms        0.083 ms           74
noSharing/real_time           1.16 ms        0.071 ms          578

可以看到noSharing得到了非常好的效果!缓存命中率大大提高,当然这里用perf分析一下是更好的,可以看看L1 cache miss。

以上答案在知识星球已更新,欢迎一起探讨,留言区交流,谢谢~

a7366477d86edd89805d4769cade9dda.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/814467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放

一、需求 昨天我们做了轮播图的自动播放&#xff0c;即每隔一秒自动切换一次 今天我们增加两个需求&#xff1a; 1、鼠标点击向右按钮&#xff0c;轮播图往后切换一次&#xff1b;鼠标点击向左按钮&#xff0c;轮播图往前切换一次 2、鼠标悬停在轮播图区域中时&#xff0c;…

闲鱼链接生成 仿闲鱼链接搭建

教程&#xff1a;修改数据库账号密码直接使用。 源码带有教程! 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

layui框架学习(36:数据表格_复杂表头)

table数据表格模块中的col属性支持配置复杂表头&#xff0c;其为二维数组&#xff0c;用于描述复杂表头中每个表头单元格的位置和尺寸信息&#xff08;colspan和rowspan描述表头单元格所占行数和列数&#xff09;。   从参考文献2-3给出的示例来看&#xff0c;描述复杂表头的…

[数学公式] 1秒移动x米是多少码 x码一秒钟移动几米

1秒移动x米是多少码&#xff1a;3.6x码 x码一秒钟移动几米&#xff1a;

6、用restful风格写controller方法接口,单元测试依赖

编写单元测试&#xff0c;用restful风格写controller方法 单元测试依赖 实际项目开发中&#xff0c;单元测试与业务代码通常都会要求同步进行 TDD测试驱动开发&#xff1a;先编写单元测试&#xff0c;然后努力去开发业务代码去满足所有的单元测试用例。 添加SpringBoot的测试…

LeetCode_双指针_中等_143.重排链表

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → L~n - 1~ → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → L~n - 1~ → L2 → L~n - 2~ → … 不…

python网站创建006:常见CSS样式

1. 给标签添加样式有三种方式(在标签上添加、在head中添加、通过独立文件添加)。 其中(在head中添加、通过独立文件添加)是有选择器存在的 直接在标签上添加 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><tit…

如何部署Redis哨兵

目录 一、Redis数据库 二、Redis哨兵模式 三、部署Redis哨兵 第一步 关闭防火墙和安全机制 第二步 修改Redis配置文件 第三步 开启Master主节点 第四步 查看哨兵信息 一、Redis数据库 ●主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主…

使用 python 读取Excel文件并转换为时间格式

通过Excel 做配置文件调整参数&#xff0c;转换为实时参数&#xff1a; naclo_reduce_ratio pd.read_excel(./config/naclo_reduce_ratio.xlsx, header0) # col_name [Time, r1, r2]time_lst [] for i, row in naclo_reduce_ratio.iterrows():now_time_lst str(row[Time]…

Linux常用命令——dpkg-query命令

在线Linux命令查询工具 dpkg-query Debian Linux中软件包的查询工具 补充说明 dpkg-query命令是Debian Linux中软件包的查询工具&#xff0c;它从dpkg软件包数据库中查询并辨识软件包的信息。 语法 dpkg-query(选项)(参数)选项 -l&#xff1a;列出符合匹配模式的软件包&…

Android studio修改app图标

步骤如下&#xff1a; 1.右键app名称→New→ImageAsset 2. 进行下面的配置 图源&#xff1a;https://blog.csdn.net/Qingshan_z/article/details/126661650 3.配置分辨率 4.图标自动保存在mipmap文件夹下 再启动就更换成功了&#xff01;&#xff01;&#xff01; 参考&…

10、自定义配置文件和自定义失败分析器

自定义配置文件及失败分析器 改变项目配置的方式 默认行为&#xff1a; Spring Boot默认的配置文件&#xff1a;调用SpringApplication的run()方法启动Spring Boot应用时&#xff0c;Spring Boot会自动加载主配置类&#xff08;run方法第一个参数、该参数要用SpringBootAppli…

腾讯云Cloud Studio:基于Claude快速完成Excel工资自动核算

目录 1 什么是Cloud Studio&#xff1f;2 注册与代码管理2.1 账号注册2.2 Git关联 3 实战&#xff1a;Excel工资自动核算3.1 创建项目与配置3.2 “念咒师”Claude GPT3.3 代码编写与运行 1 什么是Cloud Studio&#xff1f; Cloud Studio是腾讯云为开发者提供的一个基于浏览器的…

Redis数据库 | 事务、持久化

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Redis事务操作 Redis事务是一组命令的集合&#xff0c;这些命令会作为一个整体被执行&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败&#xff1b;Redis事…

牛客网Verilog刷题——VL43

牛客网Verilog刷题——VL43 题目题目解析答案 题目 如图所示为两种状态机中的一种&#xff0c;请根据状态转移图写出代码&#xff0c;状态转移线上的0/0等表示的意思是过程中data/flag的值。 要求&#xff1a; 1、 必须使用对应类型的状态机 2、 使用三段式描述方法&#xf…

SAP MTO 2案例教程PP物料需求计划前台操作

目录 本章介绍 2 显示销售订单BOM 3 库存需求清单 5 单个销售订单运行MRP计划 6 集中运行MRP 9 再显示库存需求清单 11 集中转换采购申请 13 单个销售订单创建生产订单 15 集中转换生产订单 17 批量显示生产订单 19 本章小结 20 本章介绍 本章内容包括&#xff0c;单个销售订单…

【计算复杂性理论】证明复杂性(八):命题鸽巢原理(Propositional Pigeonhole Principle)的指数级归结下界

往期文章&#xff1a; 【计算复杂性理论】证明复杂性&#xff08;Proof Complexity&#xff09;&#xff08;一&#xff09;&#xff1a;简介 【计算复杂性理论】证明复杂性&#xff08;二&#xff09;&#xff1a;归结&#xff08;Resolution&#xff09;与扩展归结&#xff…

华为鸿蒙4本周发布:官方海报大有玄机!告别“人工智障”!

一年一度的华为开发者大会2023(HDC.Together)将于8月4日至8月6日在东莞松山湖举办。相比去年&#xff0c;今年的华为开发者大会足足提前了三个月&#xff0c;而本次大会主角之一无疑是全新国产操作系统鸿蒙4&#xff08;HarmonyOS 4&#xff09;。 官方之前用了三个词来形容鸿蒙…

python将多张图片拼成一张矩阵图,合成一张大图

用Python实现将多张图片排列成n*m的图像矩阵图 目录 引言环境准备代码实现效果演示总结 引言 在图像处理和图像展示的应用中&#xff0c;将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。 环境准备 为了实…

Windows上安装 Go 环境并配置环境变量 (超详细教程)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…