multithreading - 每个内核都有自己的掩码(k0-k7)寄存器吗?
问题描述
我知道每个内核都有自己的一组寄存器。这是否包括 AVX-512 掩码寄存器 k0 - k7?我问是因为我有一个随机数据错误的程序;它广泛使用掩码寄存器,所以如果掩码寄存器是共享的,那么这可以解释它。从逻辑上讲,它们似乎都必须有自己的一组掩码寄存器。
解决方案
是的,所有寄存器都是核心/线程私有的,是操作系统必须在任务之间的上下文切换时保存/恢复的每个核心架构状态的一部分。就像 RAX..R15 和 ZMM0..ZMM31、段寄存器等等。
正如您所猜测的,如果不同的线程或逻辑内核都共享相同的架构掩码寄存器,那么 AVX512 掩码在多任务操作系统下基本上无法使用。
此外,在您假设的疯狂设计中,保持内核之间的掩码寄存器同步将是严重的 CPU 设计挑战。为每个内核提供自己的一组私有寄存器要容易得多。在约 4GHz 的内核之间以单周期延迟进行通信会很困难。
推荐阅读
- powershell - 使用 PowerShell 和基于文件的数据库操作
- python - 当for循环没有运行整个代码时如何修复它
- python - 如何将 f-string 与变量一起使用,而不是与字符串文字一起使用?
- linux - 从管道读取输入时执行问题
- php - 删除多个文件
- symfony - TYPO3 9.5 - PLESK 17.8 - NGINX
- xamarin.forms - 如何为 Android 创建状态栏图标
- go - 如何将命名模板的结果发送到函数
- javascript - Javascript自下而上创建SVG路径与自上而下
- julia - 为什么 Julia Int64、Float64 和 boolean 支持 getindex