2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 一些问题的答案记录 (持续更新中)

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

时间:2018-09-08 16:03:20

相关推荐

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

前言:

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

问题集:

如何清空CPU Cache

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

inline void drop_cache() {char * tmp_buf = (char *)malloc(1 << 26); // 64 MBmemset(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:", 即可完成在指定服务器上搜索对应关键字的搜索需求。同样的,如果想要搜索其他服务器上的相关文档,使用<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 找到,如下图所示:

可以看出部分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正常运行。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。