7得票1回答
为什么要将32位寄存器移动到堆栈,然后再从堆栈移动到xmm寄存器?

我正在64位机器上使用gcc -m32进行编译。 以下两者有何区别?注意,这是AT&T语法。 # this movd %edx, %xmm0 # and this movl %edx, (%esp) movd (%esp), %xmm0

10得票3回答
如何高效地并行设置位向量中的位?

考虑一个N位的比特向量(N很大)和一个数字数组M(M适中,通常远小于N),每个数字在范围0..N-1内,指示向量的哪个比特必须设置为1。后面的数组未排序。比特向量只是整数数组,具体来说是__m256i,其中256个比特被打包进每个__m256i结构中。 如何有效地将这项工作分割到多个线程中?...

30得票4回答
函数指针是否会强制清除指令流水线?

现代CPU具有广泛的流水线技术,即在实际执行指令之前,它们会提前加载所需的指令和数据。 有时,加载到流水线中的数据会失效,必须清除流水线并重新加载新的数据。重新装载流水线所需的时间可能相当长,并导致性能下降。 如果我在C中调用函数指针,流水线是否聪明到足以意识到流水线中的指针是一个函数指针...

7得票1回答
学习SSE/SSE2和汇编优化

我熟悉C/C ++和汇编x86 / x64语言,但现在我需要学习图形优化(SSE / SSE2以及一般的汇编优化),有哪些资源/书籍/链接可以用来学习这些主题? 我已经在网上搜索了很久,但没有太多运气。

8得票3回答
16位汇编指令集

COM文件使用哪个指令集?我一开始以为是8086,但似乎我错了。在我找到的8086手册中,shl只能接受1或cl作为第二个参数,而对于我来说,除了1之外的立即值都可以正常工作。如果有影响的话,我正在使用NASM。谢谢你的时间。

21得票4回答
使用int和unsigned int与double混合时的速度差异

我有一个应用程序,其中内部循环的一部分基本上是: double sum = 0; for (int i = 0; i != N; ++i, ++data, ++x) sum += *data * x; 如果x是一个无符号整数,那么使用无符号整数的代码执行时间会比使用有符号整数的代码长3倍...

12得票4回答
移位指令比IMUL指令更快吗?

哪个更快 - val = val*10; 或者val = (val<<3) + (val<<2); imul指令相比于移位指令需要多少时钟周期?

8得票2回答
在使用DIV指令之前,为什么EDX应该为0?

我注意到当EDX包含一些随机的默认值,比如00401000,然后我使用这样的DIV指令: mov eax,10 mov ebx,5 div ebx 这会导致整数溢出错误。然而,如果我将edx设置为0并采取同样的操作,它就可以工作。我曾经认为使用div会导致商覆盖eax,余数覆盖edx。 ...

41得票4回答
我已经建立了一个"Any CPU"的Windows服务,为什么它在我的64位机器上以32位模式运行?

我已经构建了一个 "Any CPU" 的 Windows 服务。然而,在我的 64 位机器上运行时,它以 32 位模式运行。如何解决这个问题?我正在使用 .NET 和 C#,我的操作系统是 Windows 2008 R2。 如果我在 x64 上构建它,则可以正确地在 64 位模式下加载。但是...

29得票3回答
x86汇编指令的好参考资料

我正在寻找一份关于x86汇编指令的好参考资料,其中包含有关指令的所有信息,例如操作码、大小等。