10得票2回答
为什么MS-DOS不初始化DS和ES寄存器?

为什么程序员需要手动初始化DS和ES寄存器? 例如: MOV AX, DTSEG MOV DS, AX 另一方面,CS和SS寄存器由操作系统(在MS-DOS中)初始化。为什么会这样呢?

11得票2回答
UOPs的参考材料是什么?

对于那些不了解的人,Intel(宏)指令如XADD、ADD等会被分解为一系列微操作(uops),其中一个宏指令可以有多个微操作。 我知道Intel开发者指南,但它们似乎没有详细说明任何关于uops的内容,只有x86指令参考。 是否有人知道特定于各种uops的可用材料?

12得票1回答
如何在AVX或SSE指令中进行间接加载(收集-分散)?

我已经搜索了一段时间,但似乎在文档或者SO上找不到有用的东西。这个问题对我没有什么帮助,因为它涉及修改汇编代码,而我是在C语言中编写。我有一些代码进行了间接访问,我想将其向量化。for (i = 0; i < LENGTH; ++i) { foo[bar[i]] *= 2; } 由...

12得票1回答
GCC编译前导零计数存在问题,除非指定Haswell。

GCC支持__builtin_clz(int x)内建函数,它可以计算参数中连续的最高位零数,这在实现lg(unsigned int x)函数时非常有效,该函数可以以2为底对x取对数并向下取整。 /** return the base-2 log of x, where x > 0 *...

10得票1回答
将加载的目标地址保留在寄存器中,直到指令退役。

我想在XeonE5 Sandy Bridge上使用精确事件采样(PEBS)记录特定事件的所有地址(例如缓存未命中),但是,CoreTM i7处理器和Intel® XeonTM 5500处理器性能分析指南第24页包含以下警告: 由于PEBS机制捕获指令完成时寄存器的值,因此无法重建以下类型的负...

8得票1回答
两个__m128i中64位部分的最佳混洗方式是什么?

我有两个__m128i,分别是a和b,我希望将它们洗牌,使得a的高64位落在dst的低64位上,b的低64位落在dst的高64位上。即: dst[ 0:63] = a[64:127] dst[64:127] = b[0:63] 相当于: __m128i dst = _mm_unpac...

37得票4回答
在Windows 10上,通过Android Studio设置向导运行Intel® HAXM安装程序需要很长时间

我刚安装了Android Studio,下载组件时遇到了设置向导“运行Intel® HAXM安装程序”无法进行的问题: 我该怎么办?如果我在任务管理器中结束Android Studio的任务,我的所有已下载的组件会丢失吗?因为仅仅取消Android Studio设置向导可能没有任何作用!...

15得票4回答
如何编写能够高效运行在现代x64处理器上的自修改代码?

我正在尝试加速一种可变位宽整数压缩方案,并且有兴趣实时生成和执行汇编代码。目前花费了大量时间在错误预测的间接分支上,基于找到的位宽序列生成代码似乎是避免此处惩罚的唯一方法。 这种技术通常称为“子程序线程”(或“调用线程”,虽然这也有其他定义)。其目标是利用处理器有效的call/ret预测以避免...

7得票5回答
为什么增加管道深度并不总是意味着增加吞吐量?

这可能更像是一个讨论问题,但我认为stackoverflow可能是问这个问题的正确地方。我正在学习指令流水线的概念。我被教导说,增加流水线阶段的数量会增加流水线的指令吞吐量,但在某些情况下,吞吐量可能不会改变。在什么条件下会发生这种情况?我认为停顿和分支可能是答案,但我想知道是否有重要的遗漏。

62得票9回答
如何控制进程运行在哪个核心上?

我可以理解如何编写使用多个进程或线程的程序:fork()一个新进程并使用IPC,或创建多个线程并使用这些通信机制。 我也了解上下文切换。也就是说,只有一个CPU的情况下,操作系统为每个进程安排时间(有许多调度算法可用),从而实现同时运行多个进程。 现在我们拥有了多核处理器(或多处理器计算机...