Python如何处理其sleep()功能?我想创建一个时钟,使其永远运行,并每60秒打印一次时间,其余时间保持睡眠状态。Python睡觉时会占用CPU时间吗?
谢谢!
我目前正在开发平台并尝试实现时间步长,但对于超过60的帧速率限制,CPU使用率从1%上升到25%甚至更高.
我制作了这个最小程序来演示这个问题.代码中有两条注释(第10-13行,第26-30行)描述了问题以及我测试过的内容.
请注意,FPS的东西与问题无关(我认为).
我试着让代码简洁明了:
#include <memory>
#include <sstream>
#include <iomanip>
#include <SFML\Graphics.hpp>
int main() {
// Window
std::shared_ptr<sf::RenderWindow> window;
window = std::make_shared<sf::RenderWindow>(sf::VideoMode(640, 480, 32), "Test", sf::Style::Close);
/*
When I use the setFramerateLimit() function below, the CPU usage is only 1% instead of 25%+
(And only if I set the limit to 60 or less. For example 120 increases CPU usage to 25%+ again.)
*/
//window->setFramerateLimit(60);
// FPS text
sf::Font font;
font.loadFromFile("font.ttf");
sf::Text fpsText("", font, 30);
fpsText.setColor(sf::Color(0, 0, 0));
// FPS …Run Code Online (Sandbox Code Playgroud) 我正在使用运行在具有48个CPU和250GB RAM的主机上的VirtualBox 5.1,我正在导入的虚拟机(来宾)最初有2个CPU和4GB RAM.
在这台机器内部,我正在运行一个带有Java的进程,它启动动态数量的线程来执行某些任务.
我使用以下配置运行它:
在我的笔记本电脑的整个过程(2CPU/4GB RAM)~11秒
服务器虚拟机中的相同程序(15个CPU和32GB RAM)~45秒
服务器虚拟机中的相同程序(20个CPU和32GB RAM)~100+秒
服务器虚拟机中的相同程序(10个CPU和32GB RAM)〜5秒以上
我首先想到我是如何从Java管理线程的,但经过多次测试后,我发现虚拟机的cpus数量和性能之间存在关联,最大值为10,之后机器的整体性能下降(cpu饥饿?)
虚拟机运行Oracle Enterprise Linux 6.7,主机运行Oracle Enterprise Linux 6.9
我在VM文档中找不到有关CPU数量的任何硬限制
是否需要设置一个设置以启用/利用VirtualBox实例中的10个以上的CPU?
从最新消息来看,新的苹果处理器A11 Bionic在Geekbench基准测试中比移动英特尔酷睿i7得分更高。
据我了解,该基准测试中有很多不同的测试。这些测试模拟了不同的负载,包括日常使用中可能发生的负载。
有人指出,这些结果无法与x86结果进行比较。他们说x86能够执行“更复杂的任务”。例如,他们领导Photoshop,视频转换,科学计算。我同意ARM的软件通常只是台式机软件的“轻量级”版本。但是在我看来,这种限制是由移动操作系统的格式(移动中完成工作,没有鼠标等)引起的,而不是由ARM的性能引起的。
作为相反的示例,让我们看一下Safari。浏览器是一个复杂的程序。Safari在iPad上的工作原理与Mac一样。此外,如果我们采用Sunspider(JS基准测试)的结果,事实证明iPad上的Safari得分更高。
我认为在日常任务(Web,Office,音乐/电影)中,ARM(A10X,A11)和x86(双核移动英特尔i7)的性能是可比的和相等的。
ARM真的有远远落后于x86的任何类型的任务吗?如果是这样,原因是什么?是什么阻止了Apple在ARM上发布笔记本电脑?从POWER迁移到x86,他们已经做了同样的事情。这是技术限制,还是营销?
我对这一点非常具体.我需要知道,如果该设备具有具有异构内核的CPU等ARM的技术的big.LITTLE,例如,一组4的ARM Cortex-A53的+另一组4更强大的ARM Cortex-A72,共计8个内核,2基本上处理器在同一芯片中.处理器模型并不重要.
我正在考虑的是读取scaling_max_freq所有内核并将那些具有不同最大频率的内容分组(然后比较它们)但我注意到在某些设备中,任何不是cpu0的内核的路径实际上是/ sys/devices /的符号链接system/cpu/cpu0/cpufreq/scaling_max_freq
也就是说,如果我尝试读取cpu3的scaling_max_freq,它将是cpu0的scaling_max_freq的链接.我想知道在这种情况下我是否可以认为我们不是在异构中运行.
public final class CPU {
// To be formatted with specific core number
private static final String CPU_DIR = "/sys/devices/system/cpu/cpu%d";
private static final String CPUFREQ_DIR = CPU_DIR + "/cpufreq";
public static final String SCALING_MAX_FREQ = CPUFREQ_DIR + "/scaling_max_freq";
private static final String DEFAULT_FREQS = "200000 400000 800000 1200000";
private CPU() {
}
// Here I'd replace 0 with (other) core number
@NonNull
public static …Run Code Online (Sandbox Code Playgroud) 在不同的机器上获得不同的结果,并且想知道这是否是预期的行为或某些CPU实施'>>>操作时可能出现的错误?
Linux qemux86-64 4.18.41-yocto-standard #1 SMP PREEMPT Tue Oct 8 20:33:31 UTC 2019 x86_64 GNU/Linux
root@qemux86-64:~# node --v8-options|head -n 1
SSE3=1 SSSE3=1 SSE4_1=0 SAHF=1 AVX=0 FMA3=0 BMI1=0 BMI2=0 LZCNT=0 POPCNT=0 ATOM=0
root@qemux86-64:~# node -v
v8.12.0
root@qemux86-64:~# node -e 'console.log(undefined >>> 0)'
4294967295
Run Code Online (Sandbox Code Playgroud)
(未定义>>> 0)在我测试的其他计算机上的值为0。但是,然后启用 CPU功能: AVX FMA3 BMI1 BMI2 LZCNT POPCNT
在 C 等语言中,不同线程对同一内存位置的不同步读取和写入是未定义的行为。但在 CPU 中,缓存一致性表示,如果一个核心写入某个内存位置,然后另一个核心读取它,则另一个核心必须读取写入的值。
如果上一层将丢弃内存层次结构的连贯抽象,为什么处理器需要费心暴露它呢?为什么不让缓存变得不连贯,并要求软件在想要共享某些内容时发出特殊指令呢?
有时你需要知道你的程序在高峰期间需要多少内存,但可能不太关心这个高峰何时发生以及持续多长时间等。Pytorch 有一个很好的工具,可以报告在 GPU 上运行时的内存使用情况,您只需在程序结束时调用一次:
memory_usage = torch.cuda.memory_stats()["allocated_bytes.all.peak"]
torch.cuda.reset_peak_memory_stats()
Run Code Online (Sandbox Code Playgroud)
这段代码非常简单,因为它使您无需运行一个单独的线程每毫秒监视您的内存并找到峰值。
现在我的问题是:为什么这只适用于 GPU?我找不到像 torch.cpu.memory_stats() 这样的东西。在CPU上运行时,这个挂件是什么?
cpu ×10
android ×1
benchmarking ×1
c ×1
c++ ×1
cpu-cache ×1
cpu-usage ×1
frame-rate ×1
gpu ×1
instructions ×1
intel ×1
javascript ×1
linux ×1
linux-kernel ×1
load ×1
memory ×1
multiplying ×1
node.js ×1
performance ×1
python ×1
pytorch ×1
root ×1
sfml ×1
sleep ×1
starvation ×1
timer ×1
v8 ×1
virtualbox ×1