一些问题的答案记录 (持续更新中)

前言:

博士期间会不断的学习和查阅在线资料, 甚至有时候能发现一些特别出彩的小问题及其答案。 与其花时间记住全部的答案, 不如将他们记录下来,以便后期查阅, 故写此文。

问题集:

如何清空CPU Cache
答: intel提供的指令WBINVD指令虽然能够清空LLC cache, 但只能在kernel模式下才能运行, 普通用户可以通过运行无关内存赋值清空cache, 如下:

inline void drop_cache() {
    char * tmp_buf = (char *)malloc(1 << 26); // 64 MB
    memset(tmp_buf, 0x5a, (1 << 26));
    asm volatile("sfence" ::: "memory");
    free(tmp_buf);
}

如何在代码中统计一个整型中二进制表示下的1的个数和0的个数
答: 使用gcc内嵌的__builtin_popcount()函数, 可以直接统计整型中的1的数量。相似的, 统计0的数量只需要取反就行了。另外, intel也提供了相关的指令, 利用intel内置函数 _mm_popcnt_u32() 即可。

如何高效搜索intel的开发者文档 (intel公司对自己的很多产品都写了详细的说明文档,但是从intel官方网页上无法搜索,使用百度/谷歌搜索也很难找到)
答:使用高级搜索,在关键词后面加上"site:https://software.intel.com", 即可完成在指定服务器上搜索对应关键字的搜索需求。同样的,如果想要搜索其他服务器上的相关文档,使用<site:网址> 可以实现快速过滤无关的网页。

如何设置和查看L2 cache 的硬件预取机制
答. 在x86架构CPU中,提供了一系列Model Specific Register (特殊模块寄存器, 简称MSR寄存器)。地址为0x1A4的MSR寄存器可以用于设置包括L1/L2 cache的硬件预取开关/特性。
在Linux内核源码中提供了读写CPU MSR寄存器模块,使可以在用户空间直接读写MSR寄存器。 因此,我们可以使用命令rdmsr 0x1a4 读取当前硬件预取的MSR寄存器值,也可以通过wrmsr 0x1a4 <value>设置成指定的值。根据intel 文档,用户可以知道如何设定满足需要的寄存器预取机制。

如何将excel的某一行/列反转
答:使用OFFSET函数和COLUMN函数,例如我们希望反转行范围A1:K1, 在一个新行某个空格内输入公式=OFFSET($A$1, 0, COLUMN($K$1) - COLUMN(A1)),随后往右拖拽即可得到行范围的反转结果。对其他反转行号,起始列和结束列值,只需要在公式内相应位置替换成相应值。如果希望反转某一列,只需要先进行转置,执行反转,再执行转置。

如何开启Intel TSX(硬件事务内存)指令集
Intel近年的CPU均支持TSX指令集,但是由于其存在漏洞——TSX Asynchronous Abort (TAA) ,大多数CPU都提供了相应的减轻对策。可以在linux系统下通过 cat /sys/devices/system/cpu/vulnerabilities/tsx_async_abort 查看当前CPU的减轻策略,对应的值含义可在TAA system information 找到,如下图所示:
TAA value
可以看出部分CPU直接关闭了TSX支持,因此默认情况下是不支持_xbegin()_xend()接口的。如果希望在TAA值为Mitigation: TSX disable的CPU上打开TSX支持,可以修改boot option,在boot option后面添加tsx=on tsx_async_abort=full,即可打开TSX支持。

Windows Subsystem 的Ubuntu20.04发行版gzip无法使用的问题
在玩耍WSL时,我发现ubuntu20.04发行版里面的gzip无法使用,报gzip运行格式错误。参考这个链接wsl vscode-remote-ssh issue,使用echo -en '\x10' | sudo dd of=/usr/bin/gzip count=1 bs=1 conv=notrunc seek=$((0x189))便可以使gzip正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值