相关疑难解决方法(0)

何时可以重用avx指令中的源寄存器

在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用?

例如:我想使用vgatherdps消耗两个 ymm 寄存器的指令,其中之一是位移索引。我意识到vgatherdps收集数据需要花费大量时间,因为数据的局部性较差。

位移索引寄存器是否会在指令执行期间被保留,或者我可以在后续指令中重用它而无需挂起管道?

assembly simd cpu-architecture avx micro-optimization

3
推荐指数
1
解决办法
503
查看次数

汇编代码的长度可以指示执行速度吗?

我正在学习C,请考虑以下代码片段:

#include <stdio.h>

int main(void) {
  int fahr;
  float calc;

  for (fahr = 300; fahr >= 0; fahr = fahr - 20) {
    calc = (5.0 / 9.0) * (fahr - 32);
    printf("%3d %6.1f\n", fahr, calc);
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是将Celsius到华氏温度转换表从300打印到0.我用以下代码编译:

$ clang -std=c11 -Wall -g -O3 -march=native main.c -o main
Run Code Online (Sandbox Code Playgroud)

我还使用此命令生成汇编代码:

$ clang -std=c11 -Wall -S -masm=intel -O3 -march=native main.c -o main
Run Code Online (Sandbox Code Playgroud)

哪个生成1.26kb文件和71行.

我稍微编辑了代码并将逻辑移到另一个函数中,该函数在main()中被初始化:

#include <stdio.h>

void foo(void) {
  int fahr;
  float calc;

  for (fahr = 300; fahr >= …
Run Code Online (Sandbox Code Playgroud)

c assembly clang

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

在流水线操作时,你可以连续将mov写入同一个寄存器,还是需要3个NOP,比如add?

这是在合并流水线和您需要的必要NOP时实现mov和通过x86添加的正确方法.

 mov $10, eax
 NOP 
 NOP
 NOP
 add $2, eax
Run Code Online (Sandbox Code Playgroud)

如果我想用mov更改eax,我可以立即用另一个mov覆盖它,因为你只是覆盖已经存在的内容,或者我是否需要再次写3个NOP才能完成WMEDF循环?

mov $10, eax
mov $12, eax
Run Code Online (Sandbox Code Playgroud)

要么

mov $10, eax
NOP
NOP
NOP
mov $12, eax
Run Code Online (Sandbox Code Playgroud)

x86 assembly cpu-architecture

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

什么是WAW危害?

维基百科的危害(计算机体系结构)文章:

写后写(WAW)(i2试图在写操作数之前写操作数i1)在并发执行环境中可能发生写后写(WAW)数据危险。

示例例如:

i1. R2 <- R4 + R7   
i2. R2 <- R1 + R3   
Run Code Online (Sandbox Code Playgroud)

的写回(WB)i2必须延迟到i1完成执行为止。

我还不明白

如果i2执行之前有i1什么问题?

assembly pipeline cpu-architecture microprocessors

1
推荐指数
2
解决办法
77
查看次数

在基于 C 的操作系统中,Python 能比 C 更快吗?为什么?

如果 Python 是基于 C 编码的(基于),那么 Python 能超越 C 吗?我知道接下来的阶段是汇编、二进制文件,当它们与操作系统和硬件进行通信时。我有两个假设,因为大多数操作系统都是用 C 编码的,那么如果任何代码都在该操作系统之上运行,那么 Python 不可能更快。

c architecture performance assembly operating-system

0
推荐指数
1
解决办法
75
查看次数

Rasberry Pi 3与英特尔酷睿i7(浮点运算)相比的性能

我做了一个简单的性能比较,侧重于使用C#的浮点运算,针对带有Windows 10 IoT的Raspberry Pi 3 Model 2,我将它与Intel Core i7-6500U CPU @ 2.50GHz进行了比较.

Raspberry Pi 3 Model B V1.2 - 测试结果 - 图表

英特尔酷睿i7-6500U CPU @ 2.50GHz - x64测试结果 - 图表

英特尔酷睿i7 比Raspberry Pi 3 快十二倍(x64)! - 根据那些测试.

准确度为11.67,并计算每个平台在这些测试中实现的最佳性能.两个平台在并行运行的四个线程中实现了最佳性能(非常简单,独立的计算).

问题:测量和比较这些平台的计算性能的正确方法是什么?目的是比较优化算法,机器学习算法,统计分析等领域的计算性能.因此,我的重点是浮点运算.

有一些基准测试(如MWIPS)和MIPS或FLOPS等测量.但我没有找到一种方法来比较不同的CPU平台的计算能力.

我找到了Roy Longbottom的一个比较(谷歌"Roy Longbottom的Raspberry Pi,Pi 2和Pi 3基准" - 我不能在这里发布更多链接)但根据他的基准测试,Raspberry Pi 3的速度只比英特尔酷睿i7快4倍(x64)建筑,MFLOPS比较).与我的结果非常不同.

以下是我执行的测试的详细信息:

测试是围绕应该迭代执行的简单操作构建的:

    private static float SingleAverageCalc(float seed, long nTimes)
    {
        float x1 = seed, x2 = …
Run Code Online (Sandbox Code Playgroud)

c# intel raspberry-pi windows-10-iot-core raspberry-pi3

-1
推荐指数
1
解决办法
8841
查看次数

如何编写x86汇编代码来检查温度对处理器性能的影响

我必须编写一个应该在 Intel x86 处理器上运行的 x86 汇编代码。

其实要写加法或移动指令之类的,看看这些指令对处理器温度性能的影响。这意味着我的代码应该能够控制处理器产生的热量。

如果您有这样的代码或任何有编写此类代码经验的人,请分享。

x86 assembly temperature

-2
推荐指数
1
解决办法
771
查看次数