问题标签 [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 投票
10 回答
15695 浏览

multithreading - 哪些 CPU 架构支持比较和交换 (CAS)?

只是想知道哪些 CPU 架构支持比较和交换原子原语?

0 投票
7 回答
79474 浏览

c++ - 检测 CPU 架构编译时

编译 C 或 C++ 代码时找出 CPU 架构最可靠的方法是什么?据我所知,不同的编译器有自己的一组非标准预处理器定义(_M_X86在 MSVS 中__i386____arm__在 GCC 中等)。

有没有一种标准的方法来检测我正在构建的架构?如果没有,是否有各种编译器的此类定义的完整列表的来源,例如带有所有样板#ifdef的标头?

0 投票
8 回答
8729 浏览

architecture - 在 32 位 CPU 上,“整数”类型是否比“短”类型更有效?

在 32 位 CPU 上,一个整数是 4 个字节,一个短整数是 2 个字节。如果我正在编写一个使用许多数值的 C/C++ 应用程序,这些数值总是在提供的短整数范围内,使用 4 字节整数还是 2 字节整数更有效?

我听说它建议 4 字节整数更有效,因为这适合从内存到 CPU 的总线带宽。但是,如果我将两个短整数相加,CPU 是否会将这两个值并行打包一次(从而跨越总线的 4 字节带宽)?

0 投票
12 回答
36047 浏览

c# - 如何确定可执行文件是为哪个平台编译的?

我需要使用为 x86、x64 和 IA64 制作的 Windows 可执行文件。我想通过检查文件本身以编程方式找出平台。

我的目标语言是 PowerShell,但可以使用 C# 示例。如果您知道所需的逻辑,那么其中任何一个都失败了,那就太好了。

0 投票
2 回答
3482 浏览

build-process - 在 scons 中检测 CPU 架构(32 位 / 64 位)?

是否有任何“标准”插件可用于检测scons中的 CPU 架构?

顺便说一句,这个问题已经在这里以更一般的形式提出......只是想知道是否有人已经花时间将这些信息合并到 scons 中。

0 投票
5 回答
2477 浏览

embedded - 小型 RISC 模拟器

我正在寻找将虚拟机构建到游戏中,并且想知道是否有人知道任何非常简单的虚拟机(我认为 RISC/PIC 接近我想要的),这些虚拟机通常用于嵌入式项目,例如控制机器人、电机、传感器等。如果我自己动手,我主要担心的是必须编写一个编译器/汇编器。我会很高兴使用已经存在的工具,或者以最简单的形式使用可以为其编译的 C 编译器:-p。

我真的不想在这里重新发明轮子,但我还需要在虚拟世界中运行数千个这样的设备,因此它们必须尽可能简单和快速。正如一个人已经提到的那样,我也不关心现实世界的问题,例如时间和公共汽车以及所有有趣的东西。我认为他们的虚拟时钟将仅限于非常慢的东西。最终我可能不得不研究原生编译以使它们运行得更快,但现在我只是将原型放在一起以获得一般的概念证明。

作为输入,我计划安装在圆柱体周围的距离、光线、材料和触摸传感器(16 个,可能是 32 个),然后只需 2 个用于定向输出的电机来控制每侧的一种轮子。本质上,处理不会太费力,世界将足够简单,以至于机器不必在简单的任务上投入大量的处理能力。

在内存方面,我希望他们能够存储足够的数据,以便在不干预构建地图和收集统计数据的情况下单独放置几天。我不喜欢 8bit 会因为处理或内存而减少它,但 16bit 肯定会是一个竞争者。32 位和 64 位只会推动它,而且它们的每个内存不可能超过 1mb - 可能更接近 256-512k。(比尔一说640k就足够了,我为什么不能!!)

0 投票
6 回答
79383 浏览

linux - 确定 Linux 中二进制文件的目标 ISA 扩展名(库或可执行文件)

我们有一个与在带有 Via C3 处理器的 Advantech POS 板上的(相当旧的)FC3 下运行的 Java 应用程序相关的问题。Java 应用程序有几个通过 JNI 访问的已编译共享库。

Via C3 处理器应该与 i686 兼容。前段时间在具有相同处理器的 MiniItx 板上安装 Ubuntu 6.10 后,我发现前面的说法并非 100% 正确。由于缺少C3处理器中设置的i686的一些特定和可选指令,Ubuntu内核在启动时挂起。在使用 i686 优化时,GCC 编译器默认使用 i686 集的 C3 实现中缺少的这些指令。在这种情况下,解决方案是使用 i386 编译版本的 Ubuntu 发行版。

Java 应用程序的基本问题是 FC3 发行版是通过从另一台 PC(这次是 Intel P4)的 HD 映像克隆而安装在 HD 上的。之后,该发行版需要进行一些黑客攻击才能使其运行,例如用 i386 编译版本替换一些软件包(例如内核)。

问题是工作一段时间后系统完全挂起,没有任何痕迹。我担心某些 i686 代码会留在系统中的某个位置,并且可以随时随机执行(例如从挂起模式恢复后或类似的情况)。

我的问题是:

  • 是否有任何工具或方法可以找出二进制文件(可执行文件或库)需要哪些特定架构扩展?file没有提供足够的信息。
0 投票
15 回答
5642 浏览

performance - 现代 CPU 到底有多“快”?

当我曾经对嵌入式系统和早期的 8/16 位 PC(6502、68K、8086)进行编程时,我对每条指令执行所需的时间(以纳秒或微秒为单位)有很好的把握。根据系列,一个(或四个)周期相当于一个“内存获取”,并且无需担心缓存,您可以根据所涉及的内存访问次数猜测时间。

但是对于现代CPU,我很困惑。我知道它们要快得多,但我也知道如果不知道每条指令需要多少个时钟周期,标题千兆赫的速度是没有帮助的。

因此,任何人都可以为(假设)2GHz Core 2 Duo 上的两个示例指令提供一些时间。最好和最坏的情况(假设缓存中没有任何内容/缓存中的所有内容)将很有用。

指令#1:将一个 32 位寄存器加到一秒。

指令 #2:将 32 位值从寄存器移动到内存。

编辑:我问这个的原因是尝试开发一个“经验法则”,它可以让我查看简单的代码并粗略地衡量最接近的数量级所花费的时间。

编辑#2:有很多有趣的答案,但没有人(还)写下一个及时测量的数字。我很欣赏这个问题有“复杂性”,但是来吧:如果我们可以估计NYC 的钢琴调音师的数量,我们应该能够估计代码运行时间......

采取以下(愚蠢的)代码:

我们如何估算运行... 1 飞秒需要多长时间?1 千兆年?

0 投票
5 回答
795 浏览

c# - 设计一个可以直接处理 IL 的 CPU 有什么意义吗?

如果我理解正确:

当前的 CPU 开发公司,如 AMD 和 Intel,拥有自己的 API 代码(汇编语言),他们认为是机器代码(1G 语言)之上的 2G 语言

是否有可能或希望(性能或其他)拥有一个在其核心执行 IL 处理而不是当前 API 调用的 CPU?

0 投票
4 回答
5710 浏览

hardware - 双处理器机器如何处理中断?

我对双核 CPU 如何处理中断有所了解。我想知道如何在具有多个物理处理器的板上实现中断处理。

任何中断责任是否由物理板的配置决定?每个处理器都必须能够处理某些类型的中断,例如磁盘 I/O。除非有一些电路来管理和分配中断到适当的处理器?我的猜测是该方案必须是处理器中立的,以便任何处理器和内核都可以运行中断处理程序。

如果一个内核正在等待磁盘读取,那么当磁盘准备好时,该内核会是运行中断处理程序的内核吗?