标签: cpu-speed

如何理解棘手的加速

对不起,可能是太抽象的问题,但对我来说这是非常实用+可能是一些专家有类似的经验,可以解释它.

我有一个大代码,大约10000行.

我注意到如果在某个地方我放了

if ( expression ) continue;
Run Code Online (Sandbox Code Playgroud)

其中expression 始终为false(使用代码逻辑和cout进行双重检查),但取决于未知参数(因此编译器不能简单地在编译期间摆脱此行),程序的速度提高了25%(计算结果)是相同的).如果我测量环路本身的速度,则加速因子大于3.

为什么会发生这种情况?如果没有这些技巧,有什么方法可以使用这种加速的可能性?

PS我使用gcc 4.7.3,-O3优化.


更多信息:

  1. 我尝试过两种不同的表达方式.

  2. 如果我将行更改为:

    if ( expression ) { cout << " HELLO " << endl; continue; };
    
    Run Code Online (Sandbox Code Playgroud)

    加速消失了.

  3. 如果我将行更改为:

    expression;
    
    Run Code Online (Sandbox Code Playgroud)

    加速消失了.

  4. 围绕该行的代码如下所示:

    for ( int i = a; ;  ) {
      do {
        i += d;
        if ( d*i > d*ilast ) break;
    
          // small amount of calculations, and conditional calls of continue;
    
      } while ( expression0 );
      if ( d*i > dir*ilast ) …
    Run Code Online (Sandbox Code Playgroud)

c++ optimization cpu-speed

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

ATLAS安装:真的需要通过CPU节流检查

ATLAS 3.10.1不会安装在我组织的CentOS 6.x平台上,因为它会检测CPU限制.在旧版本的软件包中,有一个配置标志可以将油门检查关闭(-Si cputhrchk 0)并且无论如何都要向前进.该选项在几个版本之前就被删除了.我理解这个决定背后的原因 - 开发人员担心他们软件的性能和声誉以及CPU限制使得ATLAS无法自我调整.精细.我的问题是,无论ATLAS的性能如何,我只需要完成构建.我知道,有很多方法可以停止节流,但是我没有,也许不会获得许可在这台机器上乱用CPU频率.所以我需要的是一种通过ATLAS油门检查的方法.我已经看到了一些关于破解配置脚本的讨论,但是我看不出自己该怎么做.没有人在ATLAS sourceforge网站上回答,这不是批评那里的任何人.只是想表明我的情况.所以:任何人都知道如何通过ATLAS的油门检查?谢谢.

linux install cpu-speed atlas

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

为什么我的CPU无法在HPC中保持最佳性能

我开发了一个高性能的 Cholesky分解程序,它应该在单个CPU上具有大约10.5 GFLOP的峰值性能(没有超线程).但是当我测试它的性能时,有一些我不明白的现象.在我的实验中,我通过增加矩阵维数N(从250到10000)来测量性能.

  • 在我的算法中,我已经应用了缓存(具有调整的阻塞因子),并且在计算期间总是以单位步长访问数据,因此缓存性能是最佳的; 消除了TLB和寻呼问题;
  • 我有8GB的可用RAM,实验期间的最大内存占用量低于800MB,因此没有交换;
  • 在实验过程中,没有像Web浏览器那样的资源需求过程同时运行.只有一些非常便宜的后台进程正在运行以记录CPU频率以及每2秒CPU温度数据.

对于任何NI测试,我都希望性能(在GFLOP中)应保持在10.5左右.但是,如第一张图所示,在实验中间观察到显着的性能下降.

CPU频率和CPU温度见第2和第3图.实验在400年代结束.实验开始时温度为51度,CPU忙时迅速升至72度.之后,它慢慢增长到78度的最高点.CPU频率基本稳定,温度升高时不下降.

所以,我的问题是:

  • 由于CPU频率没有下降,为什么性能会受到影响?
  • 温度究竟如何影响CPU性能?从72度到78度的增量真的会让事情变得更糟吗? 在此输入图像描述 在此输入图像描述 在此输入图像描述

CPU信息

System: Ubuntu 14.04 LTS
Laptop model: Lenovo-YOGA-3-Pro-1370
Processor: Intel Core M-5Y71 CPU @ 1.20 GHz * 2

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0,1
Off-line CPU(s) list:  2,3
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 61
Stepping:              4
CPU MHz:               1474.484
BogoMIPS:              2799.91
Virtualisation: …
Run Code Online (Sandbox Code Playgroud)

x86 hpc matrix cpu-speed matrix-multiplication

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

如何在执行时间方面描述django应用程序?

我的Django应用程序非常慢,我想知道花时间:

我试过Django-debug-toolbar但是找不到可以让我分解加载时间的面板.

我的要求:

  • 堆栈跟踪类型输出,每个模块的执行时间被调用以呈现页面.
  • 我想知道整个页面渲染过程的哪一部分花时间?
  • 另外,哪些部分消耗了多少CPU [最重要]?

django-debug-toolbar做到吗?[什么小组?]

任何其他可以做到这一点的django-app?

python django performance cpu-speed django-debug-toolbar

11
推荐指数
2
解决办法
7551
查看次数

Windows:从内核模式驱动程序禁用CPU空闲C状态

我正在编写一个音频设备驱动程序,需要实时处理设备中断.当CPU进入C3状态时,中断会延迟,从而导致驱动程序出现问题.有没有办法让驱动程序告诉操作系统不要进入空闲的C状态?

我发现可以从用户空间禁用空闲C状态:

const DWORD DISABLED = 1;
const DWORD ENABLED = 0;
GUID *scheme;
PowerGetActiveScheme(NULL, &scheme);
PowerWriteACValueIndex(NULL, scheme, &GUID_PROCESSOR_SETTINGS_SUBGROUP, &GUID_PROCESSOR_IDLE_DISABLE, DISABLED);
PowerSetActiveScheme(NULL, scheme);
Run Code Online (Sandbox Code Playgroud)

但是,它是一个全局设置,可以被用户或其他应用程序覆盖(例如,当用户更改电源计划时).

我需要的是像PoRegisterSystemState,但不是S和P状态,而是C状态.(参考:https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/preventing-system-power-state-changes)

有没有办法实现这个目标?

=====

事实证明,没有一种支持的方法可以从内核空间禁用空闲C状态,并且用户空间中没有服务提供通用API来执行此操作.控制C状态的方法来自"更改高级电源设置"对话框中的"处理器电源管理",通过注册表或通过C API PowerWriteACValueIndex/PowerWriteDCValueIndex.

最初的问题是除了C1空闲状态之外的所有延迟中断,所以我需要禁用C2,C3和更深的空闲状态.禁用所有空闲C状态(包括C1(如示例代码PowerWriteACValueIndex(NULL,scheme,&GUID_PROCESSOR_SETTINGS_SUBGROUP,&GUID_PROCESSOR_IDLE_DISABLE,DISABLED)中所示)的问题是CPU使用率报告为100%,并且某些应用程序(DAW)获得困惑.

我的问题的解决方案是禁用除C1空闲状态之外的所有状态,这可以通过在处理器电源管理中设置以下值来完成: - 处理器空闲阈值缩放 - >禁用缩放; - 处理器空闲提升阈值 - > 100%; - 处理器空闲降级阈值 - > 100%.

也许我会创建一个只使用PowerWriteACValueIndex/PowerWriteDCValueIndex API的服务.

c windows device-driver cpu-speed

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

通过计算装配说明来测量CPU速度

编辑:我原来的例子有一个愚蠢的错误.修好之后,我仍然会得到奇怪的结果.


在我天真的尝试以"蛮力"的方式测量我的CPU速度时,我制作了以下程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#pragma comment(linker, "/entry:mainCRTStartup")
#pragma comment(linker, "/Subsystem:Console")

int mainCRTStartup()
{
    char buf[20];
    clock_t start, elapsed;
    unsigned long count = 0;
    start = clock();
    __asm
    {
        mov EAX, 0;
    _loop:
        add EAX, 3; // accounts for itself and next 2 instructions
        cmp EAX, 0xFFFFFFFF - 0x400;
        jb _loop;
        mov count, EAX;
    }
    elapsed = clock() - start;
    _gcvt(count * (long long)CLOCKS_PER_SEC / (elapsed * 1000000000.0), 3, buf);
    puts(buf);
}
Run Code Online (Sandbox Code Playgroud)

哪个反汇编成:

mainCRTStartup:
  push   ebp …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly cpu-speed visual-c++

10
推荐指数
2
解决办法
2720
查看次数

如何以C编程方式查找CPU频率

我试图找出是否有任何想法来了解我的C代码正在运行的系统的CPU频率.

为了澄清,我正在寻找一个抽象的解决方案(一个不会与特定架构或操作系统绑定的解决方案),它可以让我了解我的代码正在执行的计算机的运行频率.我不需要准确,但我想进入球场(即我有一个2.2GHz处理器,我希望能够在我的程序中告诉我我在几百之内)那个MHz)

有没有人有想法使用标准C代码?

c cpu-speed

10
推荐指数
3
解决办法
2万
查看次数

x*x 或 x**2 哪个更快?

我正在尝试优化我的 Python 代码。之间:

y = x*x
Run Code Online (Sandbox Code Playgroud)

或者

y = x**2
Run Code Online (Sandbox Code Playgroud)

如果我需要在一个速度关键的程序中进行一万亿次迭代,我应该选择哪一个?

python performance mathematical-optimization cpu-speed

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

如何编程对数?

他们是刚刚使用蛮力方法想出来的还是有算法呢?

algorithm math parallel-processing logarithm cpu-speed

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

模数运算符为什么慢?

从"编程珍珠"一书中解释(关于旧机器上的c语言,因为本书是从90年代后期开始的):

整数算术运算(+,-,*),而可能需要大约10纳秒%操作员最多需要100毫微秒.

  • 为什么会有这么大的差异?
  • 模数运算符如何在内部工作?
  • /在时间方面它与division()相同吗?

modulo integer-division cpu-speed programming-pearls

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