cpu相关内容
我想为Raspberry pi 2上的按钮中断编写代码.该板使用四核Broadcom BCM2836 CPU(ARM架构).这意味着,该板上只有一个 CPU(Raspberry pi 2).但是我不知道在多核系统中如何中断.我想知道中断线是连接到每个内核还是一个CPU.所以,我通过谷歌找到了下面的段落. 多核系统上的中断在多核系统上,每个中断都指向一个(并且只有一个)CPU,尽管与哪个无关.
..
我为多个 CPU 编写了性能关键代码.我在运行时检测 CPU,并基于此为检测到的 CPU 使用适当的函数.所以,现在我必须使用函数指针并使用这些函数指针调用函数: void do_something_neon(void);void do_something_armv6(void);void (*do_something)(void);如果(CPU == 霓虹灯){do_something = d
..
我必须让我的设备从 Linux 2.6.38 进入非常深的低功耗模式,因此,有必要暂停所有组件,包括 CPU 和 DDR2. 到目前为止我发现我必须将核心汇编器函数复制到处理器的内部存储器中并从那里执行它.基本上,它看起来像这样: cpaddr = iram_alloc(SZ_1K, &iram_addr);if(!cpaddr) 返回 -ENOMEM;suspend_iram_base
..
在维基百科上阅读“ARM 架构"并发现以下声明: 寄存器 R0-R7 在所有 CPU 模式中都相同;他们从不银行. R13 和 R14 跨所有特权 CPU 模式进行存储,系统除外模式. 银行注册是什么意思? 解决方案 注册银行是指在同一地址提供多个注册副本. 取自 arm 的第 1.4.6 节 文档 该术语指的是无法同时看到所有寄存器的问题的解决方案.
..
在阅读ARM核心文档时,我有这个疑问.CPU如何区分读取的数据和数据总线,是作为指令执行还是作为可以操作的数据? 参考文档摘录—— "数据进入处理器内核通过数据总线.数据可能是执行指令或数据项." 在此先感谢您的启发!/MS 解决方案 每个操作码将包含一条 N 字节的指令,然后期望后续的 M 字节是数据(内存指针等).因此 CPU 使用每个操作码来确定以下字节中有多少是数
..
我不知道 32 位应用程序如何在 64 位操作系统上运行. 我的理解是 32bit/64bit 是指寄存器大小.指令集应该不同,因为它们有不同大小的寄存器. 但我知道有 x86-64 指令集,它是 x86 指令集的 64 位版本. 我们可以在 64 位操作系统上运行 32 位应用程序的原因是因为 x86-64 吗? 如果是这样,为什么 32 位应用程序有时在 64 位窗口中
..
维基网页(https://en.wikipedia.org/wiki/Sandy_Bridge) 提到数据 TLB 对于 4KB、2MB 和 1GB 页面分别有 64、32 和 4 个条目. 我发现这些数字很难理解.Sandy Bridge 有一个 48 位的虚拟地址,这意味着对于 4K 页面,可以有 2^36 个页面,对于 2MB 和 1GB 页面,应该有 2^27 和 2^18 个页面.
..
机器字大小(或更小)写入序列化了吗?只需一个本机操作码即可将寄存器内容复制到 RAM. 解决方案 将数据写入 RAM 是原子的.如果两个 CPU 尝试同时写入同一位置,则内存控制器将决定写入的某个顺序.当一个 CPU 正在写入内存时,另一个 CPU 将根据需要停止尽可能多的周期,直到第一次写入完成;然后它会覆盖它的值.这就是所谓的竞争条件. 小于本机字大小的写入不是原子的——在这种情
..
内存映射 I/O 是一种允许使用中央内存 (RAM) 与外围设备通信的技术.端口映射 I/O 使用端口(带有特殊的汇编指令)通过数字端口进行通信. 一种方法相对于另一种方法的优点是什么? 解决方案 正如克苏鲁所说, 内存映射 I/O 允许对 I/O 设备端口的写入/读取与对普通内存的读取/写入相同(使用相同的机器代码/asm) 但有一个缺点: 您为内存映射的 I/O
..
正如标题所说,是否有任何优雅且安全的方法来确定架构是 32 位还是 64 位.通过优雅,您可以想到精确、正确、简短、干净和聪明的方式.安全,从标准、C89/C99、操作系统独立性等方面考虑安全. 解决方案 指针的大小并不是一个真正值得测试的好东西 - 在标准 C 中没有太多可以用测试结果做的事情. 我的建议是测试((size_t)-1),C可以理解的最大对象大小: if ((si
..
这与问题“为什么栈通常向下增长?"有关a>,但更多是从安全角度考虑.我一般指的是 x86. 当缓冲区通常在内存中向上写入时,堆栈会向下增长,这让我感到奇怪.例如,典型的 C++ 字符串的结尾比开头的内存地址高. 这意味着如果出现缓冲区溢出,您将进一步覆盖调用堆栈,我认为这是一个安全风险,因为它可能会更改返回地址和局部变量内容. 如果堆栈在内存中向上增长,缓冲区溢出不会简单地运行到
..
自从我开始编程以来,我到处阅读,不惜一切代价避免浪费分支. 那很好,虽然没有一篇文章解释我为什么要这样做.当 CPU 解码分支指令并决定执行跳转时,究竟会发生什么?什么是使它比其他指令(如加法)慢的“东西"? 解决方案 分支指令本身并不比任何其他指令慢. 然而,您听说应该避免分支的原因是因为现代 CPU 遵循 流水线架构.这意味着有多个顺序指令同时执行.但是,只有在每个周期都能
..
一直在阅读 Agner Fog 的“Intel、AMD 和 VIA CPU 的微体系结构",并在第 34 页描述了“返回地址预测": http://www.agner.org/optimize/microarchitecture.pdf 3.15 返回(除 P1 之外的所有处理器) 一种更好的方法用于退货.后进先出缓冲区,称为返回栈缓冲区,每次记住返回地址执行调用指令,并使用它来
..
我想查看用户运行的是哪个CPU架构,是不是i386 或 X64 或 AMD64.我想在 C# 中做到这一点.我知道我可以尝试 WMI 或注册表.除了这两个还有别的办法吗?我的项目面向 .NET 2.0! 解决方案 你也可以试试(只有在没有被操作的情况下才有效): System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTU
..
在 32 位 CPU 上,一个整数是 4 个字节,一个短整数是 2 个字节.如果我正在编写一个使用许多数值的 C/C++ 应用程序,这些数值总是适合提供的短整数范围,使用 4 字节整数还是 2 字节整数更有效? 我听说 4 字节整数更有效,因为这适合从内存到 CPU 的总线带宽.但是,如果我将两个短整数相加,CPU 是否会将这两个值并行打包一次(从而跨越总线的 4 字节带宽)? 解决方
..
我想在应用程序域中托管一个 exe 并为其分配 CPU 和内存上限,以便它使用的处理能力不会超过分配的处理能力.这可以做吗?如何做? 解决方案 据我所知,不能直接设置最大内存上限. 但是,从 .NET 4 开始,当前由 AppDomain 分配的内存在 AppDomain.MonitoringSurvivedMemorySize 属性如果 AppDomain.MonitoringIs
..
是否有任何 Java API?我如何才能阅读这些信息. 解决方案 要在 Android 上有频率,只需阅读/sys 目录中的这些特殊文件: #cat "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"#cat "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq"#cat
..
在大多数现代 64 位处理器(例如 Intel Core 2 Duo 或 Intel i7 系列)上,x86_64 命令 mulq 及其变体的速度是否取决于操作数?例如,乘以 11 * 13 会比 11111111 * 13131313 快吗?还是总要经历最坏的情况? 解决方案 我没有任何关于手的参考,但我会把钱放在延迟/吞吐量上,因为操作数的值是不变的.否则,日程安排将是一场噩梦.
..
标题说明了一切.我想知道从内存读取数据的 x86 指令是否将其字节或其位转换为小端顺序.例如,如果我们在地址 0(二进制)(此处以 RAW 格式,顺序写入)有以下数据: 00110010 01010100 我们是这样阅读的: mov ax, word [0] AX 将包含什么 - “01010100 00110010"或“00101010 01001100"?或者翻译成十进制的无符
..
我正在做一个小项目来获取我的 Windows 机器上的 CPU 温度.我决定使用 wmi 模块,并在下面的问题链接上遇到了一段代码,它起初工作正常,但突然间它会停止打印结果,而且 OpenHardwareMonitor 似乎没有向 wmi 报告模块. 在python中访问CPU温度 代码: 导入 wmiw = wmi.WMI(namespace="root\OpenHardwareM
..