标签: intel

Core i3/5/7 CPU是否提供了测量IPC的机制?

过去十年中的所有英特尔CPU(至少)都包括一组可以计算各种事件的性能监视器.最新的Intel CPU,Core i3,i5和i7(又名Nehalem)是否提供计算每时钟指令(IPC)的机制?如果是这样,他们是如何使用的?

如果这是可能的,我可能会在汇编中为此编写代码,但Windows或Linux系统调用也可能有用.

x86 intel performancecounter

8
推荐指数
1
解决办法
2175
查看次数

IA-32e 64位IDT门描述符

英特尔的64位IDT门描述符中有一个段选择器.但是,根据我对5部分英特尔手册的理解,中断处理程序的线性地址从IDT门描述符中指定的64位偏移量加载到RIP中.

段选择器的唯一用途是检查:

  1. 如果权限级别有变化
  2. 中断处理程序真正指向代码段

我的问题是:

  1. RIP仅取自64位偏移量吗?或者RIP =偏移(符号扩展到64位)+段选择器基数?
  2. IDT门描述符中的段选择器指向的基址是否被忽略?或者它有用吗?

提前谢谢了!

assembly operating-system x86-64 intel

8
推荐指数
1
解决办法
1908
查看次数

英特尔针脚:检测运行过程

我创建了一个简单的pin工具,可以转储任何win32 CreateFileW调用.它工作正常,但当我尝试将它附加到已经运行的进程时,该过程只是终止.尝试了几个应用程序(记事本,wordpad,Internet Explorer),相同的结果.这是我使用的命令:

.\pin -pid 8804 -t dumpfile.dll
Run Code Online (Sandbox Code Playgroud)

我有一个提示尝试关闭多线程,如下所示:

.\pin -mt 0 -pid 8804 -t dumpfile.dll
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.还尝试了另一个,开箱即用的pintool,也没有工作,所以问题不在我的pintool.有任何想法吗?

提前致谢!

c++ x86 instrumentation intel intel-pin

8
推荐指数
1
解决办法
2057
查看次数

在NASM中使用OR r/m32,imm32

生成的操作码:

or ebx, 0ffffffffh
Run Code Online (Sandbox Code Playgroud)

与NASM是:

83CBFF
Run Code Online (Sandbox Code Playgroud)

但在英特尔说明手册中:

81 /1 id      OR r/m32, imm32
83 /1 ib      OR r/m32, imm8
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么NA​​SM使用操作码83代替81,以及如何生成操作码81

这是NASM的命令行: nasm -fwin32 file.asm -l list.lst

x86 assembly amd intel

8
推荐指数
1
解决办法
422
查看次数

发送到不处于等待 SIPI 状态的活动 AP 的启动 IPI 会发生什么情况

在之前的Stackoverflow 回答中,玛格丽特·布鲁姆 (Margaret Bloom) 说道:

\n\n
\n

唤醒 AP

\n\n

这是通过向所有 AP 发出 INIT-SIPI-SIPI (ISS) 序列来实现的。

\n\n

将发送 ISS 序列的 BSP 使用“全部排除自身”简写作为目的地,从而针对所有 AP。

\n\n

SIPI(启动处理器间中断)会被所有在收到 SIPI 时被唤醒的 CPU 忽略,因此,如果第一个 SIPI 足以唤醒目标处理器,则第二个 SIPI 将被忽略。出于兼容性原因,英特尔建议这样做。

\n
\n\n

我多年来一直在编写多处理代码,我对硬件的观察是,在某些处理器上,它似乎与所述不同。我很确定我已经观察到应用处理器 (AP) 在收到启动 IPI 后修改了其指令指针,即使它处于活动状态(不在等待启动 IPI 中)。

\n\n

是否有任何英特尔文档说明 AP在不处于等待启动 IPI 状态时收到启动 IPI 后将执行的操作,或将行为记录为未定义?我似乎无法在英特尔软件文档手册或补充英特尔文档Minimal Boot Loader for Intel\xc2\xae Architecture中找到明确的答案。

\n\n

通常,我编写初始化代码来初始化并启动 AP,假设 AP 可以获取 SIPI 并在活动状态(而不是等待启动 IPI 状态)下重置其指令指针。

\n\n

我正在尝试确定 Margaret Bloom 声明的准确性,即先前已唤醒的 …

boot x86 multicore intel osdev

7
推荐指数
1
解决办法
3014
查看次数

在运行时收到“cl_version.h:CL_TARGET_OPENCL_VERSION未定义。默认为220(OpenCL 2.2)”警告

在这篇文章这篇文章之后,我正在这个 GitHub Gistmain.c上编译代码。

运行 CMake 命令find_package(OpenCL REQUIRED)我得到这个:

-- 寻找 CL_VERSION_2_2 - 已找到
-- 找到 OpenCL: C:/Program Files (x86)/IntelSWTools/system_studio_2020/OpenCL/sdk/lib/x86/OpenCL.lib (找到版本“2.2”)

表明已找到 OpenCL SDK 版本 2.2。这与我从clinfo工具中检测到适用于英特尔 SDK/平台的 1.2 OpenCL 的结果相矛盾。现在,当运行可执行文件时,我得到:

cl_version.h:CL_TARGET_OPENCL_VERSION 未定义。默认为 220 (OpenCL 2.2)

我的问题是:

  1. 为什么我从 CMake 和 获得两个不同版本的 OpenCL clinfo
  2. 我在运行时收到的警告是什么以及如何解决该问题?

PS 是输出cmake .. --debug-find

c windows intel cmake opencl

7
推荐指数
1
解决办法
7104
查看次数

Intel的RAPL如何估算功耗

首先,我不知道我是否应该在这里问这个问题,或者在 Electronics StackExchange 中问这个问题,所以如果您认为我应该在那里问这个问题,请告诉我。

我对测量 Intel CPU 中每个 CPU 核心的能耗感兴趣。我已阅读 Intel 的 Intel 64 开发人员手册,据我了解,RAPL 将提供以下方面的能耗估算:

  • 整个套餐
  • 核心
  • 未指定的非核心设备(仅在客户端处理器中)
  • DRAM(仅在服务器处理器中)

这表明我能期望的最好结果是 CPU 中所有内核的集体能耗值。然而,我也知道“RAPL不是模拟功率计,而是使用软件功率模型”,根据https://01.org/blogs/2014/running-average-power-limit-%E2%80 %93-rapl

我想知道的是,这个模型的工作方式是已知的还是公开的?并且,是否可以使用 RAPL 或其他接口提供的指标来估计各个核心功耗?我知道,如果英特尔不通过 RAPL 提供此信息,则可能无法获得它,但我想至少找到一个证实这一点的来源。

感谢您的帮助!

cpu intel energy cpu-architecture msr

7
推荐指数
1
解决办法
5852
查看次数

在 Intel x86-64 架构上,机器代码指令是否以小端 4 字节字获取?

尽管单词的常见定义(维基百科所述)是:

用于指定存储器中的位置的最大可能地址大小通常是硬件字(这里,“硬件字”是指处理器的全尺寸自然字,而不是使用的任何其他定义)。

根据一些消息来源,x86 系统注意到它被视为 16 位:

在 x86 PC(Intel、AMD 等)中,虽然架构很早就支持 32 位和 64 位寄存器,但其本机字大小可以追溯到 16 位起源,“单个”字为 16 位。“双”字是 32 位。请参阅 32 位计算机和 64 位计算机。

然而英特尔的官方文档(sdm 第 2 卷,第 1.3.1 节)指出:

这意味着字的字节从最低有效字节开始编号。图 1-1 说明了这些约定。

图 1-1 显示了 x86-64 上下文中单词的小端序列中的 4 个字节,而不是 2 个字节或 8 个字节(如上面链接的来源的不同定义所建议的那样):

在此输入图像描述

我对这一切真正感到困惑的是如何获取和解析指令。我正在编写一个模拟器,一旦我解析 PE 格式的可执行文件并进入文本部分,如果我要遵循 4 字节小端格式,这是否意味着将首先解析第 4 个字节?

让我们组成一些字节,例如:

.text segment buffer:
< 0x10, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 > ....
Run Code Online (Sandbox Code Playgroud)

我会将第一条指令解析为 1C、1B、1A、10、20、1F、1E、1D ...(等等,由于长度可变,显然可能有更多的单词需要读取,具体取决于这里的实际字节是什么)

x86-64 intel cpu-word machine-code endianness

7
推荐指数
1
解决办法
1187
查看次数

如何检测Intel Alder Lake CPU中的P/E-Core?

哪个逻辑处理器属于 P 核心组,哪个属于 E 核心组?

我的第一个想法是检查每个逻辑处理器的基本时钟,然后假设最低的基本时钟属于 E 核(根据英特尔规范,E 核的基本时钟总是明显低于 P 核)。

我希望HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor在注册表中进行检查就足够了。不幸的~MHz是始终包含 P 核的基本时钟。

x86 intel cpu-cores cpuid

7
推荐指数
1
解决办法
4100
查看次数

Windows 关键部分的自旋锁中的这些填充指令的目的是什么?

我一直在EnterCriticalSection对 Windows 10 上的函数进行逆向工程,发现了这个有趣的自旋循环:

在此输入图像描述

它是这样的:

lbl_loop:

mov     ecx, [rsp+60h]
mov     ecx, [rsp+60h]
mov     ecx, [rsp+60h]
pause
mov     ecx, [rsp+60h]
inc     ecx
mov     [rsp+60h], ecx

cmp     ecx, eax
jb      lbl_loop
Run Code Online (Sandbox Code Playgroud)

[rsp+60h]所以我的问题是 -循环读取 4 次然后写回的目的是什么?

为什么他们不能这样做:

lbl_loop:

pause
inc     ecx

cmp     ecx, eax
jb      lbl_loop

mov     [rsp+60h], ecx
Run Code Online (Sandbox Code Playgroud)

附言。请注意,这是 Windows 10 的生产版本。其余功能EnterCriticalSection均已优化。所以这不是调试版本。

assembly winapi x86-64 intel spinlock

7
推荐指数
0
解决办法
134
查看次数