曾几何时,为了编写x86汇编程序,你会得到一条说明"加载EDX寄存器的值为5","递增EDX"寄存器等的指令.
对于具有4个核心(甚至更多)的现代CPU,在机器代码级别上它看起来就像有4个独立的CPU(即只有4个不同的"EDX"寄存器)?如果是这样,当你说"递增EDX寄存器"时,是什么决定了哪个CPU的EDX寄存器递增?现在x86汇编程序中是否存在"CPU上下文"或"线程"概念?
核心之间的通信/同步如何工作?
如果您正在编写操作系统,那么通过硬件公开哪种机制可以让您在不同的内核上安排执行?这是一些特殊的特权指示吗?
如果您正在为多核CPU编写优化编译器/字节码VM,那么您需要具体了解x86,以使其生成能够在所有内核中高效运行的代码?
对x86机器代码进行了哪些更改以支持多核功能?
有人可以向我推荐一些文档来说明多CPU,多核和超线程之间的区别吗?我总是对这些差异以及不同场景中每个架构的优缺点感到困惑.
编辑:这是我在网上学习并从别人的评论中学习后的当前理解; 有人可以评论评论吗?
乔治,提前谢谢
软件线程,硬件线程和Java线程有什么区别?
软件线程,Java线程和硬件线程是独立的还是相互依赖的?我问这个是因为,我知道Java线程是在jvm(java.exe)的进程内创建的.
这些不同的进程是否在不同的硬件线程上执行也是如此?
关于多核CPU或多处理器系统中使用的高速缓存存储器,我有几个问题.(虽然与编程没有直接关系,但是当一个人为多核处理器/多处理器系统编写软件时会产生很多反响,因此在这里问!)
在多处理器系统或多核处理器(Intel Quad Core,Core two Duo等......)中,每个cpu核心/处理器都有自己的缓存(数据和程序缓存)吗?
一个处理器/核心可以访问彼此的高速缓存,因为如果允许它们访问彼此的高速缓存,那么我认为可能存在较少的高速缓存未命中,如果特定处理器高速缓存没有一些数据但是其他一些处理器的缓存可能有它,从而避免从内存读入第一个处理器的缓存?这个假设是否有效且真实?
允许任何处理器访问其他处理器的高速缓冲存储器会有任何问题吗?
我遇到了一个关于线程不要访问相同缓存行的建议,我真的不明白为什么,也在对该主题进行搜索时,我遇到了这个问题: 多线程和 CPU 缓存 ,其中一个答案建议:
您只想避免两个线程同时尝试访问位于同一缓存行上的数据
在我看来,缓存存储内存页面以便从进程快速访问,正如它在这里所说:http : //en.wikipedia.org/wiki/Thread_%28computing%29#How_threads_differ_from_processes
线程共享它们的地址空间
两个线程访问相同的缓存行应该不成问题,因为如果页面在缓存中并且尝试访问内存的线程将获得缓存命中,而不管其他线程如何。
我听说过关于避免线程在几个不同的场合访问相同的缓存行的争论,所以这不是一个神话。我在这里缺少什么?