问题标签 [cpu-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
19 回答
17753 浏览

c++ - 将 32 位 C++ 代码移植到 64 位 - 值得吗?为什么?

我知道 x64 架构的一些明显优势(更高的可寻址 RAM 地址等)......但是:

  • 如果我的程序没有真正需要在本机 64 位模式下运行怎么办。无论如何我应该移植它吗?
  • 结束 32 位支持是否有任何可预见的截止日期?
  • 我的应用程序会像原生 x64 代码一样运行得更快/更好/更安全吗?
0 投票
9 回答
24786 浏览

operating-system - 程序如何执行?操作系统在哪里发挥作用?

程序从某种语言编译为 ASM --> 机器代码(直接可执行)。当人们说这取决于平台时,意味着形成的二进制文件将(正确)仅在具有相同指令集架构(如 x86、x86-64)的 CPU 上运行。由于 ISA 的不同,它可能(错误地)/可能(根本不)在其他进程上运行。正确的?

现在,二进制文件的概念让我感到困惑。一切都与“机器语言代码”和“CPU”有关。操作系统在哪里发挥作用?我的意思是编译后的二进制文件在加载到内存时有直接的 CPU 指令。& CPU 一次执行一条指令。除了进程管理链接文本之外,我在任何地方都看不到操作系统的作用。无论操作系统如何,它都应该在相同 ISA 的 CPU 上运行。正确的?

然而事实并非如此。如果我在 Windows 机器上构建 x86 的代码。它不会在 Mac x86 机器或 Linux x86 机器上运行。

我在这里遗漏了一些东西。请清除我的困惑。

0 投票
2 回答
3864 浏览

windows - 启用超标题的系统上的 CPU 编号

我试图找出操作系统(Windows,linux)如何在启用超线程的环境中将数字分配给逻辑 CPU。?

两个操作系统是否首先为物理 CPU 连续分配编号,然后开始对逻辑 CPU 进行编号,或者是否遵循其他规则..?例如,在具有超线程的 2 个物理 cpu 系统中,操作系统是否将编号 0,2 分配给第一个物理 cpu,然后将 1,3 分配给第二个物理 cpu ..?

任何参考将不胜感激。

提前致谢。

问候,-杰。

编辑:回答艾伦的问题:我需要知道这一点,因为在我的工作中,我需要将各种线程绑定到特定的 CPU 以避免上下文切换,并且我想确保某些任务(线程)绑定到单独的物理 CPU。谢谢

0 投票
3 回答
290 浏览

macos - 系统架构

如何判断当前运行的 Mac OS X 系统是 32bit 还是 64bit 机器?

0 投票
4 回答
554 浏览

windows - Windows 可移植可执行文件如何跨机器架构移植

Windows 可移植可执行文件真的可以跨机器架构移植吗?如果是这样,它是如何工作的?如果不是,那么“可移植可执行文件”是什么意思或可执行文件的哪一部分是可移植的?

谢谢,西瓦钱德兰

0 投票
7 回答
9976 浏览

c - 设计代码以适应 CPU 缓存?

在编写模拟时,我的朋友说他喜欢尝试编写足够小的程序以放入缓存中。这有什么实际意义吗?我知道缓存比 RAM 和主内存快。是否可以指定您希望程序从缓存中运行或至少将变量加载到缓存中?我们正在编写模拟,因此任何性能/优化增益都是巨大的好处。

如果您知道任何解释 CPU 缓存的好链接,请向我指出那个方向。

0 投票
4 回答
257 浏览

c - C 编程和 error_code 变量效率

我读过的大多数代码都使用int标准错误处理(从函数等返回值)。但是我想知道使用uint_8will a compiler 是否有任何好处——阅读:大多数架构上的大多数 C 编译器——使用立即地址模式生成指令——即将 1 字节整数嵌入到指令中? 我正在考虑的关键指令是函数返回后的比较,使用 uint_8 作为其返回类型。

我可能会错误地思考事情,因为引入 1 字节类型只会导致对齐问题——编译器喜欢将东西打包成 4 字节可能是完全理智的原因,这可能是每个人都只使用整数的原因——并且因为这是与堆栈相关的问题,而不是堆,所以没有真正的开销。

做正确的事是我的想法。但是,为了争论,可以说这是一种流行的廉价微处理器,用于智能手表,它配置有 1k 的内存,但在其指令集中确实有不同的寻址模式:D

另一个稍微专门化讨论的问题(x86)是:文字是:

同类型?或者编译器会在第二种情况下生成一个 8 字节的文字。如果是这样,它可以使用它来生成一个比较指令,该指令将文字作为立即值,并将返回的 int 作为寄存器引用。请参阅 CMP 指令类型。.

x86 指令集的另一个参考。

0 投票
2 回答
137 浏览

c - 保留执行管道

经常检查返回类型是否有错误。但是,可以以不同的方式指定将继续执行的代码。

或者

重量级 CPU 可以使用简单的统计数据来推测接近/局部的分支的一种方法——我研究了一种用于分支推测的 4 位机制 (-2,-1,0,+1,+2),其中 0 是未知的,而 2将被视为一个真正的分支。

考虑到上面的简单技术,我的问题是关于如何构造代码。我假设主要编译器和主要架构之间必须有一个约定。这是我的两个问题

  1. 当代码不是一个经常访问的循环时,当管道被填充时哪个布尔值有偏差?
  2. 关于分支的推测必须从真或假或零开始(管道必须充满一些东西)。可能是哪个?
0 投票
3 回答
1311 浏览

macos - 在 OSX 上为 Intel 和 PPC CPU 编译

我有一台配备 64 位 Intel Core 2 Duo 处理器的 MacBook Pro,我正在使用 gcc (i686-apple-darwin9-gcc-4.0.1) 编译可以在我自己的机器上正常运行的可执行文件。最近有人试图在 PowerBook G4 上运行我的应用程序并收到“可执行文件中的错误 CPU 类型”错误,我认为这是因为他们的 CPU 是 PPC 而不是 Intel(也可能是 32 位而不是 64 位)

我是否可以使用 gcc 生成适用于所有各种 Mac 架构的二进制文件,如果可以,我应该使用哪些选项?

0 投票
2 回答
1558 浏览

c - 结构尺寸优化

我有一个我想优化其足迹的结构。

据我了解,编译器会在您定义它们时在内存中创建结构。所以应该首先声明较大的类型,以便较小的类型可以填充对齐孔。

我已阅读有关数据结构对齐的 WikiPedia 文章和有关该问题的其他文章。 http://en.wikipedia.org/wiki/Data_structure_alignment

但我仍然不确定,我目前的订购是最优化的还是我错过了什么?

注意:我的编译器不支持“#pragma pack”