intel相关内容

在固定不同 CPU 的 2 个线程之间传递一些变量的最佳方法

我有一个问题,我需要了解是否有更好的解决方案.我编写了以下代码来将一些变量从写入器线程传递到读取器线程.这些线程固定到共享相同 L2 缓存的不同 CPU(禁用超线程). writer_thread.h struct a_few_vars {uint32_t x1;uint32_t x2;uint64_t x3;uint64_t x4;} __attribute__((aligned(64) ..
发布时间:2021-09-29 19:37:48 其他开发

我怎么知道我是否可以使用 FMA 指令集进行编译?

我看到了有关如何使用 FMA 指令集的问题,但在我开始使用它们之前,我首先想知道我是否可以(我的处理器是否支持它们).我发现一个帖子说我需要查看(在 Linux 上工作)的输出: more/proc/cpuinfo 来了解一下.我明白了: 处理器:0vendor_id : 正版英特尔CPU系列:6型号 : 30型号名称 : Intel(R) Xeon(R) CPU X3470 @ 2.93G ..
发布时间:2021-09-29 19:36:16 服务器开发

x86 乘以 3:IMUL 与 SHL + ADD

我在 x86-64 汇编中开发了一个程序,它需要通过相同的操作多次迭代: IMUL rdx, 3 # rdx 总是不同的 但是,我需要让运行时间更快,所以我想到了对上面那一行的优化: MOV rcx, rdxSHL rdx, 1添加 rdx, rcx 现在我问你们:这个修改会改善程序的运行时间(更少的时钟),还是我应该坚持使用 IMUL 命令? 解决方案 与 lea rdx, [r ..
发布时间:2021-09-29 19:30:04 其他开发

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

尽管词的常见定义(如维基百科所述)是: 用于指定内存中位置的最大可能地址大小通常是硬件字(此处,“硬件字"是指处理器的全尺寸自然字,与使用的任何其他定义相反). x86 系统,根据 一些来源,注意它被视为 16 位: 在 x86 PC(Intel、AMD 等)中,虽然架构早已支持 32 位和 64 位寄存器,它的原生字长又回来了到它的 16 位起源,以及一个“单"字是 16 位. ..
发布时间:2021-09-28 18:30:49 其他开发

英特尔处理器:“如果CPUID.06H:EAX.[7]= 1& quot;意义?

以下注释在英特尔处理器数据表中是什么意思?如何在Linux的驱动程序代码中进行检查? 如果是CPUID.06H:EAX.[7]= 1 我在寄存器描述表的注释列中看到了SW开发人员手册(针对Intel处理器)中的此类声明. 参考: https://software.intel.com/sites/default/files/managed/22/0d/335592-sdm-vol- ..

汇编程序如何从汇编代码转换为机器代码?

我知道这个问题已经被问过很多次了,但是我正在寻找一个简单的解释. 假设我有C ++编译器生成的一些汇编代码. 现在,汇编程序开始工作,它必须将汇编代码转换为机器代码. 问题1). C ++汇编程序编译器会查看每个汇编指令具有相应机器代码指令的表吗? 问题2).如果C ++程序在intel处理器上运行,则汇编器需要查看Intel团队发布的表格,对吗?因为最后,C ++程序在英 ..
发布时间:2021-05-16 19:19:38 C/C++开发

基座与位移之间的差异

在理解我遇到的两条指令时,我遇到了一些问题. 第一个如下: imul eax,DWORD PTR [esi + ebx * 4-0x4] 此指令是否意味着=>将您在括号之间计算的地址处的值乘以eax并将其存储在同一寄存器(eax)中?如果是这样,我们是否像这样计算括号之间的地址? ebx * 4 esi +操作1的结果 从结果中减去4 转到地址(结果)并获取其中的值. ..
发布时间:2021-05-16 19:19:34 其他开发

代码段描述符中的D标志对于x86-64指令有什么作用?

当在x86-64代码中使用时,我试图了解代码段描述符中 D标志的工作原理.如下图所示,在代码段描述符的 D/B 位22中进行了设置: 3.4.5段描述符)表示以下内容: 解决方案 如果为代码段描述符设置了 L (长模式),则必须清除 D .L = 1/D = 1组合当前是无意义的/保留的.英特尔会在您正在查看的同一文档中对此进行记录. 如果清除了 L ,则 D 会在16位和32 ..
发布时间:2021-05-16 19:19:28 其他开发

持久性内存缓存策略以进行读写

是否有人在尝试使用当我测试AEP内存时,我发现重复刷新一条缓存行比刷新不同的缓存行具有更高的延迟.我想知道造成这种现象的原因.是英特尔论坛上的损耗平衡机制吗?这表明重复写入同一缓存行可能比您预期的还要糟糕. 我认为,UC还意味着强大的命令性,这会伤害OoO执行人员.我认为UC还会阻止您使用NT存储进行全行写入.它还会完全破坏读取性能,所以我认为这不值得考虑. WT也许值得考虑作为 clwb ..

为什么使用寄存器R12时POP慢?

在最近的Intel CPU上, POP 指令通常每个周期具有2条指令的吞吐量.但是,当使用寄存器 R12 (或 RSP ,除了前缀之外,具有相同的编码)时,如果指令通过旧式解码器,则吞吐量将下降至每个周期1(如果µops来自DSB,则吞吐量保持在每个周期2个左右). 可以使用 nanoBench 复制如下: sudo ./nanoBench.sh -asm"pop R12"; 在Ha ..

循环地址对齐如何影响Intel x86_64的速度?

我看到编译成完全相同的机器指令但位于不同对齐地址上的同一C ++代码的性能下降了15%.当我的微小主循环从0x415220开始时,速度比在0x415250处更快.我正在Intel Core2 Duo上运行它.我在x86_64 Ubuntu上使用gcc 4.4.5. 有人可以解释速度下降的原因吗?我怎样才能迫使gcc最佳地对齐循环? 这是带有事件探查器注释的两种情况的反汇编: 4152 ..
发布时间:2021-05-16 19:19:13 C/C++开发

OpenCL Intel Iris集成图形退出并中止陷阱6:超时问题

我正在尝试编写一个使用OpenCL执行蒙特卡洛模拟的程序.我遇到了一个涉及指数的问题.当变量 steps 的值变大,大约为20000时,指数的计算将意外失败,并且程序将退出并显示"Abort Trap:6".鉴于步骤不应该影响内存分配,这似乎是一个奇怪的错误.我尝试将 normal , alpha 和 beta 设置为0,但这并不能解决问题,但是注释掉了指数并将其替换为常数1似乎可以解决此问题.我 ..
发布时间:2021-05-16 19:19:06 其他开发

匹配英特尔代码以反汇编输出

我开始使用英特尔参考页来查找和了解操作码(而不是询问SO的所有内容).我想确保我的理解是正确的,并询问基本的asm程序和intel指令代码之间的输出问题. 这是我必须将各种 mov 指令比较到 rax -ish寄存器中的程序(是否有更好的说法"rax"及其32位代码,16位和8位组件?): .globl _start_开始:movq $ 1,%rax#立即移入8字节rax(rax)mov ..
发布时间:2021-05-16 19:19:01 其他开发

CR8寄存器如何用于对x86-64 CPU中的中断进行优先级排序?

我正在阅读有关控制寄存器的英特尔文档,但仍在努力了解如何使用CR8寄存器.引用文档( 但是与接收中断以查看是否必须阻止该中断相比,CR8中的优先级值是多少? 当中断被阻止时,这意味着什么?是“延迟"到以后,还是只是被丢弃,即丢失了? 解决方案 CR8指示CPU的当前优先级.当中断待处理时,将中断向量号的位7:4与CR8进行比较.如果向量较大,则将对其进行维修,否则将其保持待处理 ..
发布时间:2021-05-16 19:18:58 其他开发

FLOP测量

我正在尝试使用intel vtune Amplifier估计我的应用程序的FLOPS,并且我在此处使用此帖子作为准则: ..
发布时间:2021-05-16 19:18:55 其他开发

当写入2个缓存行的一部分时,为什么在Skylake-Xeon上`_mm_stream_si128`要比`_mm_storeu_si128`慢得多?但是对Haswell的影响较小

我有类似以下的代码(简单的加载,修改,存储)(我已对其进行了简化以使其更具可读性): __ asm__ __volatile__("vzeroupper":::);尽管(...) {__m128i in = _mm_loadu_si128(inptr);__m128i out = in;//实际代码的作用远不止于此,但我已经对其进行了简化_mm_stream_si12(outptr,out); ..
发布时间:2021-05-16 19:18:52 其他开发