cpu相关内容

在 L1 和 L2 预取数据

在 Agner Fog 的手册 Optimizing software in C++ 的第 9.10 节“Cahce 争用大数据结构"他描述了当矩阵宽度等于称为临界步幅的东西时转置矩阵的问题.在他的测试中,当宽度等于临界步幅时,L1 中矩阵的成本要高 40%.如果矩阵更大并且只适合 L2,成本是 600%! 这在他的文本中的表 9.1 中得到了很好的总结.这与在为什么要转置512x512 的矩阵比 ..
发布时间:2022-01-06 13:00:58 其他开发

CPU 架构演变如何影响虚拟函数调用性能?

多年前,我正在学习 x86 汇编器、CPU 流水线、缓存未命中、分支预测和所有爵士乐. 这是一个分为两部分的故事.我阅读了处理器中冗长管道的所有奇妙优势,即指令重新排序、缓存预加载、依赖交错等. 缺点是任何偏离规范的代价都非常大.例如,IIRC 早期千兆赫时代的某个 AMD 处理器每次通过指针 (!) 调用函数时都会受到 40 个周期 惩罚,这显然是正常的. 这不是一个可以忽略的 ..

为什么编译器将数据放在 PE 和 ELF 文件的 .text(code) 部分,CPU 如何区分数据和代码?

所以我参考这篇论文: 二元搅拌:自随机指令地址旧版 x86 二进制代码 https://www.utdallas.edu/~hamlen/wartell12ccs.pdf 代码与数据交错:现代编译器积极地交错PE 和 ELF 二进制文件中的代码段中的静态数据性能原因.在编译的二进制文件中,通常没有区分数据字节和代码的方法.不经意间将数据与代码一起随机化会破坏二进制文件,为指令级随 ..
发布时间:2022-01-06 12:34:17 其他开发

x86 寄存器:MBR/MDR 和指令寄存器

据我所知,IA-32 架构有十个 32 位寄存器和六个 16 位寄存器. 32位寄存器如下: 数据寄存器 - EAX、EBX、ECX、EDX 指针寄存器 - EIP、ESP、EBP 索引寄存器 - ESI、EDI 控制寄存器 - EFLAG(EIP 也被归类为控制寄存器) 16 位寄存器如下: 代码段:它包含要执行的所有指令. 数据段:它包含数据、常量和工作区. ..
发布时间:2022-01-06 12:31:28 其他开发

如何在 x86 Windows 中执行 CPU 缓存刷新?

我对在 Windows 中强制刷新 CPU 缓存感兴趣(出于基准测试的原因,我想在 CPU 缓存中没有数据的情况下进行模拟),最好是基本的 C 实现或 Win32 调用. 是否有一种已知的方法可以通过系统调用或什至像说一个大的memcpy那样偷偷摸摸地做到这一点? Intel i686 平台(P4 及以上也可以). 解决方案 幸运的是,显式刷新缓存的方法不止一种. 指令“ ..
发布时间:2022-01-06 12:29:09 其他开发

准确计算 Linux 中以百分比给出的 CPU 使用率?

这是一个被问过很多次的问题,但是我找不到得到充分支持的答案. 很多人建议使用top命令,但是如果你运行top一次(因为你有一个脚本例如每1秒收集一次Cpu使用情况)它总是会给出相同的Cpu使用结果(示例 1,示例 2). 计算 CPU 使用率的更准确方法是读取 /proc/stat 中的值,但大多数答案仅使用 /proc/stat 来计算它(一个例子 这里). /proc/sta ..
发布时间:2022-01-04 22:03:50 服务器开发

整体一核专用于单进程

在 Linux 中是否有任何方法可以将一个 CPU 内核分配给特定的给定进程,并且不应在该内核上调度任何其他进程或中断处理程序? 我已经阅读了 Linux 中的进程关联使用任务集实用程序将进程绑定到 CPU 但这并没有解决我的问题,因为 它只是尝试将给定的进程关联到该核心,但它是可能在这个核心上安排了其他进程,这是我想要避免的. 我们是否应该更改用于调度的内核代码? 解决方案 ..
发布时间:2022-01-04 22:00:26 服务器开发

为什么我们需要针对不同的平台(例如 Windows/Linux)进行编译?

我已经了解了 CPU/ASM/C 的基础知识,但不明白为什么我们需要为不同的操作系统目标编译不同的 C 代码.编译器所做的是创建汇编代码,然后将其组装成二进制机器代码.由于指令集架构不同,ASM 代码当然因 CPU 架构(例如 ARM)而异. 但是由于Linux和Windows运行在同一个CPU上,像MOVE/ADD/...这样的机器操作应该是相同的.虽然我确实知道有特定于操作系统的功能,例 ..
发布时间:2022-01-04 21:41:30 其他开发

Node.js CPU 负载均衡

我用 JMeter 创建了测试来测试 Ghost 博客平台的性能.Ghost 用 Node.js 编写并安装在具有 1Gb RAM、1 CPU 的云服务器中. 我注意到在 400 个并发用户之后 JMeter 出现错误.直到400个并发用户负载是正常的.我决定增加 CPU 并添加 1 个 CPU. 但是错误重现并添加了2个CPU,总共4个CPU.400个并发用户后出现问题. 我不 ..
发布时间:2022-01-04 12:33:46 其他开发

Python - 在 Windows 中获取进程名称、CPU、内存使用情况和峰值内存使用情况

我想获得所有进程名称、CPU、内存使用和峰值内存使用的列表.我希望我可以使用 ctypes.但我很高兴听到任何其他选择.感谢您抽出宝贵时间. 解决方案 您可以使用 psutil. 例如获取进程名称列表: process_names = [psutil.process_iter() 中的 proc.name()] 有关 CPU 的信息,请使用 psutil.cpu_percent ..
发布时间:2022-01-02 19:34:12 Python

Linux 进程状态

在 Linux 中,当需要从磁盘读取块时,进程的状态会发生什么变化?被屏蔽了吗?如果是,如何选择另一个进程执行? 解决方案 在等待 read() 或 write() 到/从文件描述符返回时,进程将进入一种特殊的睡眠状态,称为“D"或“磁盘睡眠".这是特殊的,因为在这种状态下无法杀死或中断进程.等待 ioctl() 返回的进程也会以这种方式进入睡眠状态. 一个例外是当一个文件(如终端或 ..
发布时间:2022-01-02 19:19:55 服务器开发

每个内核的最佳线程数

假设我有一个 4 核 CPU,我想在最短的时间内运行某个进程.该进程在理想情况下是可并行化的,因此我可以在无限数量的线程上运行它的块,并且每个线程花费相同的时间. 由于我有 4 个内核,因此我不希望通过运行比内核更多的线程来提高速度,因为单个内核只能在给定时刻运行单个线程.我对硬件不太了解,所以这只是一个猜测. 在比内核更多的线程上运行可并行化进程是否有好处?换句话说,如果我使用 40 ..
发布时间:2021-12-30 20:55:45 其他开发

如何在终端 (mac) 中以 % 为单位获取 CPU 利用率

我在 linux 和 windows 上看到过同样的问题,但在 mac(终端)上没有看到过.谁能告诉我如何以 % 为单位获取当前处理器利用率,因此示例输出将是 40%.谢谢 解决方案 这适用于 Mac(包括 %): ps -A -o %cpu |awk '{s+=$1} END {print s "%"}' 稍微分解一下: ps 是进程状态工具.大多数 *nix 之类的操作系统都 ..
发布时间:2021-12-28 10:45:45 其他开发

std::chrono::clock,硬件时钟和周期计数

std::chrono 提供多个时钟来测量时间.同时,我猜 cpu 评估时间的唯一方法是计数周期. 问题 1:除了计数周期外,cpu 或 gpu 是否还有其他方法来评估时间? 如果是这样,因为计算机计数周期的方式永远不会像原子钟那样精确,这意味着“秒"(period = std::ratio) 对于计算机而言,实际上可能比实际秒更短或更大,从而导致计算机时钟与 GPS 之间的时间测量的 ..
发布时间:2021-12-23 19:39:12 C/C++开发

定时python程序的CPU时间?

我想为我的代码片段计时,我只想计算 CPU 执行时间(忽略操作系统进程等). 我试过 time.clock(),它看起来太不精确了,每次都给出不同的答案.(理论上,如果我再次为相同的代码片段运行它,它应该返回相同的值??) 我玩了 timeit 大约一个小时.对我来说基本上是“设置"过程,我最终不得不导入大约 20 个函数,这是不切实际的,因为我实际上只是将我的代码重新编写到设置部分以 ..
发布时间:2021-12-23 19:38:24 Python

获取 CPU/GPU/内存信息

我需要获取有关 CPU/GPU/内存的任何信息.核心数、内存值、内存和 CPU 使用率...我找到了一种为 IE 执行此操作的方法:如何使用 JavaScript 查找硬件信息 其他浏览器的解决方案我不知道.知道怎么做吗?也许 webgl 可以访问有关您计算机的信息?或闪光?或任何其他技术? 非常感谢 解决方案 此代码将打印 GPU 信息,并列出您可以使用此浏览器的性能对象获得 ..
发布时间:2021-12-21 10:22:55 前端开发

GCC 对读/写指令的重新排序

Linux 的同步原语(自旋锁、互斥锁、RCU)使用内存屏障指令来强制内存访问指令重新排序.这种重新排序可以由 CPU 本身或编译器完成. 有人可以展示一些 GCC 生成的代码示例,其中进行了这种重新排序吗?我主要对 x86 感兴趣.我问这个的原因是为了了解 GCC 如何决定可以重新排序哪些指令.不同的 x86 mirco 架构(例如:sandy 桥 vs ivy 桥)使用不同的缓存架构.因 ..
发布时间:2021-12-21 10:10:41 其他开发

从操作系统/应用程序分析 CPU 缓存/内存?

我希望编写能够基本上分析 CPU 缓存(L2、L3,可能是 L1)和内存的软件,以分析性能. 我是否认为这是不可行的,因为软件无法访问缓存内容? 我的问题的另一种表述方式:有没有办法从操作系统/应用程序级别知道哪些数据已加载到缓存/内存中? 编辑:操作系统 Windows 或 Linux 和 CPU Intel Desktop/Xeon 解决方案 您可能想看看英特尔的 P ..
发布时间:2021-12-20 11:36:38 服务器开发

冲突未命中和容量未命中有什么区别

由于缓存无法包含程序执行所需的所有块(程序工作集远大于缓存容量)而导致从缓存中丢弃块,因此发生容量缺失. 在集合关联或直接映射块放置策略的情况下会发生冲突未命中,当多个块映射到同一个集合或块帧时会发生冲突未命中;也称为碰撞未命中或干扰未命中. 它们实际上非常密切相关吗? 例如,如果所有的缓存行都填满了,我们有一个对内存 B 的读请求,为此我们必须驱逐内存 A. 那么,既然我 ..
发布时间:2021-12-20 11:28:11 其他开发