相关疑难解决方法(0)

如何以编程方式将程序的CPU使用率限制在70%以下?

最近,我在构建我的程序时变得更加健康,我观察到大多数程序需要2或3分钟才能执行,当我检查任务调度程序时,我发现它们消耗了100%的CPU使用率,可以我在代码中以编程方式限制了这种用法?这肯定会让我在给定的时间运行多个程序.

谢谢,Nidhi

c# performance system.diagnostics cpu-usage

44
推荐指数
5
解决办法
3万
查看次数

为什么我的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
查看次数

为什么程序编译后第一次运行时运行速度较慢?

我有这个简单的你好世界程序:

#include <stdio.h>

int main() {
  printf("Hello, world!\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我像平常一样用 LLVM Clang(v15.0.1,从 Homebrew 构建,所以不是 Apple 的版本)编译了这个程序,然后运行并计时了输出。令我惊讶的是,程序第一次运行的时间比第二次长了近 10 倍,但接下来的 3 次执行运行速度要快得多。

#include <stdio.h>

int main() {
  printf("Hello, world!\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在 Intel Core i5 mac 上运行此程序,运行 macOS Big Sur v11.6.8。shell 是bash随 macOS 一起提供的。

我的代码中没有任何内容涉及时间,而且我认为没有任何内容可以缓存,所以我不确定为什么第一次执行运行得这么慢。我怀疑操作系统可能正在进行某种优化,但我不知道是什么/如何进行。造成运行时间如此巨大差异的原因是什么?

c macos benchmarking x86 clang

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

英特尔的时间戳读取asm代码示例是否使用了两个以上的寄存器?

我正在研究使用x86 CPU中的时间戳寄存器(TSR)来测量基准性能.它是一个有用的寄存器,因为它以单调时间单位测量,不受时钟速度变化的影响.很酷.

这是一份英特尔文档,显示了使用TSR进行可靠基准测试的asm片段,包括使用cpuid进行管道同步.见第16页:

http://www.intel.com/content/www/us/en/embedded/training/ia-32-ia-64-benchmark-code-execution-paper.html

要读取开始时间,它说(我注释了一下):

__asm volatile (
    "cpuid\n\t"             // writes e[abcd]x
    "rdtsc\n\t"             // writes edx, eax
    "mov %%edx, %0\n\t" 
    "mov %%eax, %1\n\t"
    //
    :"=r" (cycles_high), "=r" (cycles_low)  // outputs
    :                                       // inputs
    :"%rax", "%rbx", "%rcx", "%rdx");       // clobber
Run Code Online (Sandbox Code Playgroud)

我不知道为什么暂存寄存器用来取的价值观edxeax.为什么不删除MOVS和读取TSR值右出的edxeax?像这样:

__asm volatile(                                                             
    "cpuid\n\t"
    "rdtsc\n\t"
    //
    : "=d" (cycles_high), "=a" (cycles_low) // outputs
    :                                       // inputs
    : "%rbx", "%rcx");                      // clobber     
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以保存两个寄存器,从而降低C编译器需要溢出的可能性.

我对吗?或者那些MOV在某种程度上是战略性的?

(我同意你确实需要临时寄存器来读取停止时间,因为在那种情况下指令的顺序是相反的:你有rdtscp,...,cpuid.cpuid指令破坏了rdtscp的结果).

谢谢

c benchmarking assembly inline-assembly rdtsc

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

使用rdtsc对intel进行汇编器基准测试给出了奇怪的答案,为什么?

前一段时间,我问了一个关于堆栈溢出的问题,并展示了如何在C++中执行rdtsc操作码.我最近使用rdtsc创建了一个基准函数,如下所示:

inline unsigned long long rdtsc() {
  unsigned int lo, hi;
  asm volatile (
     "cpuid \n"
     "rdtsc" 
   : "=a"(lo), "=d"(hi) /* outputs */
   : "a"(0)             /* inputs */
   : "%ebx", "%ecx");     /* clobbers*/
  return ((unsigned long long)lo) | (((unsigned long long)hi) << 32);
}

typedef uint64_t (*FuncOneInt)(uint32_t n);
/**
     time a function that takes an integer parameter and returns a 64 bit number
     Since this is capable of timing in clock cycles, we won't have to do it a
     huge …
Run Code Online (Sandbox Code Playgroud)

x86 assembly intel microbenchmark rdtsc

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

CPU 限制在发布模式下的 Xcode 中不再起作用

我有一个对性能敏感的 XCode C++ 项目,并且我正在使用 CPU 节流技巧。本质上我添加了这段代码:

// function to occupy a thread for an infinite amount of time
void coreEngager() {
    while (true) {}
}

// call it in the background thread
std::thread t1(coreEngager);

// call it once the work is done
t1.detach();
Run Code Online (Sandbox Code Playgroud)

这个小技巧可以将计算速度提高约 50%,这对我来说非常重要。但我最近发现了一个问题 - 如果我尝试在发布模式下运行该项目,此代码会崩溃。函数中发生崩溃coreEngager。我以前没有这个问题,现在在 Linux 和 Windows 上也没有这个问题。您能否告知发生了什么变化或如何使 CPU 限制在 MacOS 上发挥作用?

c++ macos cpu xcode throttling

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

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

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

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

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

x86 assembly temperature

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