标签: intel

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

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

在aCPU上运行OpenCL代码有什么好处?

我正在学习OpenCL编程,并注意到一些奇怪的东西.

也就是说,当我在我的机器上列出所有支持OpenCL的设备(Macbook Pro)时,我得到以下列表:

  • Intel(R)Core(TM)i7-4850HQ CPU @ 2.30GHz
  • Iris Pro
  • GeForce GT 750M

第一个是我的CPU,第二个是英特尔的板载图形解决方案,第三个是我的专用显卡.

研究表明,英特尔已将其硬件OpenCL兼容,以便我可以利用板载图形单元的强大功能.那将是Iris Pro.

考虑到这一点,CPU与OpenCL兼容的目的是什么?仅仅为了方便,内核可以在CPU上运行,因为备份不应该找到其他卡,或者当运行代码作为OpenCL内核而不是常规(C,良好线程)程序时,是否存在任何速度优势中央处理器?

c performance processor intel opencl

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

发送到不处于等待 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
查看次数

在什么情况下会触发基于 L1 IP 的跨距预取器?

Intel 硬件预取器 Intel 网站显示有四种硬件预取器。由第 3 位控制的预取器是 L1 步幅预取器。我正在运行一个测试代码来测试 stride 预取器的触发条件是什么。我按照以下步骤运行代码(将 MSR0x1a4 设置为 0x7,这意味着仅启用基于 L1 IP 的 strider 预取器):

repeat following for 10000 times:
    flush
    training phase: access line 0 3 6 9 
    sleep for near 1000 cycles
    measure phase: measure line 12
Run Code Online (Sandbox Code Playgroud)

我希望看到第 12 行被预取到缓存中。但是我只能看到缓存中的第 0 3 6 9 行被命中。即使我更改了步幅或访问模式的长度,也无法观察到步幅预取活动。所以我想知道是否有人在英特尔处理器中看到过预取活动,或者有一些我没有注意到的特殊触发条件?

对这个案例有兴趣的可以试一下测试代码。运行sudo ./run.sh就可以了。我的机器上的结果显示,第 12 行的访问时间大多大于 180 个周期。我认为时间测量代码没有问题,因为如果我将测量的行从缓存行 12 更改为缓存行 6(只需在 test.c,第 103 行更改),那么访问时间主要是 25 个周期。

x86 intel prefetch cpu-cache micro-architecture

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

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
查看次数