我想以这种方式对我的应用程序进行压力测试,因为它似乎在一些非常老的客户机中失败了.
起初我读了一些关于QEmu的内容并考虑了硬件仿真,但这似乎是一个很长的镜头.我在超级用户那里问过,但是还没有收到太多反馈.
所以我转向你们......你们这样的测试怎么样?
我听到大家都在谈论多线程如何提高性能.我不相信这一点,除非有我遗漏的东西.如果我有一个包含100个元素的数组并且遍历它需要6秒.当我在两个线程之间划分工作时,处理器将不得不经历相同的工作量和时间,除了它们同时工作但速度只有一半.不应该多线程使它更慢?既然您需要额外的工作分割说明吗?
我使用的Dell Latitude E7440 笔记本电脑与Windows 7企业OS,8GB RAM,64位操作系统,英特尔(R)核心(TM)i7-4600U CPU @ 2.10GHz处理器,2701兆赫,2个核,4个逻辑处理器(那是4个核心).
我使用的是Dell Precision塔式7810 桌面与Windows 7企业版操作系统,32GB的RAM,64位操作系统,英特尔(R)至强(R)CPU E5-2620 V3 @ 2.40GHz的2个处理器,2401兆赫,6个核心,12逻辑处理器(24核).
我使用R的一个很好的演示是使用gbmRStudio在具有约300个特征的100K大小的数据上运行二进制分类.但无论我在我的笔记本电脑R版本(所有其他软件关闭,不使用并行化)上做什么,都比我的桌面R版本快得多.怎么可能?我需要做些什么才能找到答案?
笔记本电脑:
> sum <- 0; system.time(for (i in 1:1000000) sum <- sum + i)
user system elapsed
0.36 0.00 0.36
> memory.limit()
[1] 8097
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United …Run Code Online (Sandbox Code Playgroud) 如果摩尔定律成立,并且CPU/GPU变得越来越快,那么软件(以及协会,您的软件开发人员)是否仍然会在您仍然需要优化代码的范围内突破界限?或者一个天真的因子解决方案是否足以满足您的代码(等)?
特技是我还需要能够在多核机器上完成.我在C#的教育有点破碎.我已经管理了以下代码.谁能帮我吗?我尝试使用"_Total"标志,我尝试修改一些其他代码片段,看起来他们试图检测核心数量.我被告知他们不包括HT,只支持物理非逻辑处理器.我试图让它做到这两点.显然他们是一种手动执行此操作的方法
("Process", "% Processor Time", "1" process.ProcessName))
("Process", "% Processor Time", "2" process.ProcessName))
("Process", "% Processor Time", "3" process.ProcessName))
Run Code Online (Sandbox Code Playgroud)
但是,如果内核不存在,我发现硬件不起作用.我希望我能遇到更灵活的事情.我一直在研究这几天几小时,我要把头发拉出来.
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Collections;
using System.IO;
namespace Program_CPU_Monitor
{
class Program
{
static void Main(string[] args)
{
StreamWriter log;
log = File.AppendText("c:\\CPUMON.txt");
log.WriteLine("");
log.WriteLine("**Started logging Program CPU Monitor (2.6.0.63)**");
log.Close();
Console.Title = "Program CPU Monitor 2.6.0.63";
Console.WriteLine("Monitoring Program CPU & Memory usage...(1-min intervals)");
Console.WriteLine("Monitoring will start when Program is detected as running."); …Run Code Online (Sandbox Code Playgroud) 我能够在此处理器比较中找到Xeon E5-2690的理论DP峰值性能371 GFlop/s (有趣的是,在英特尔的竞争对手中比在英特尔支持页面本身更容易找到此信息).但是,当我尝试推导出峰值性能时,我的推导不匹配:
add和mul操作,因此我们得到:3.8 x 2 = 7.6因此,Gflop/s的峰值性能为243.2 GFlop/s而不是371 GFlop/s?
有人告诉我,对于I/O绑定的应用程序,非阻塞I/O会更好.对于CPU绑定应用程序,阻塞I/O要好得多.我找不到这种说法的理由.试过谷歌,但很少有文章只涉及这个话题没有太多细节.有人可以提供深度理由吗?
有了这个,我想清楚自己,非阻塞I/O的缺点是什么.
通过另一个线程会后在这里,一个原因,我可能涉及在外面是如果I/O过程是沉重得那么只有我们使用非阻塞I/O可以看到显著的性能提升.它还指出,如果I/O操作的数量很大(典型的Web应用程序场景),其中有许多请求寻找I/O请求,那么我们也看到使用非阻塞I/O的重大改进.
因此,我的问题归结为以下列表:
在CPU密集型应用程序的情况下,最好是启动线程池(或scala的executionContext)并在线程池的线程之间划分工作.(我想它肯定比产生自己的线程和手动划分工作更有优势还使用asyn未来概念,甚至可以使用回调返回CPU密集型工作,从而避免与阻塞多线程相关的问题?).此外,如果存在足够快的I/O,则使用线程池本身的线程上的阻塞原则来执行I/O. 我对吗?
在技术上使用非阻塞I/O实际上有什么缺点或开销?如果I/O足够快或者需要的I/O操作非常少,为什么我们看不到使用非阻塞I/O会带来多大的性能提升?最终它是处理I/O的操作系统.无论I/O的数量是大还是小,让操作系统处理这种痛苦.是什么让这里有所不同.
我想改变CPU频率。我已经安装了 cpufrequtils。命令“ cpufreq-info”给我信息
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 0.97 ms.
hardware limits: 1.20 GHz - 2.40 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 1.20 GHz and 2.40 GHz.
The governor "performance" may decide which speed to use …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我需要构建列表或字典,速度很重要。通常我只会声明一个适当长度的零列表并一次分配一个值,但我需要能够检查长度并使其仍然有意义。
将键值对添加到字典或将值附加到列表会更快吗?列表和字典的长度通常很小(小于 100),但这并不总是正确的,在最坏的情况下可能会更大。
如果这两个操作都太慢,我也可以用一个变量来跟踪我在列表中的位置。
我一直在尝试研究在多核系统开发项目中更改 Raspberry Pi 中时钟速度的影响。在这方面,我必须更改 Raspberry Pi 3 的时钟频率。
据我从互联网上读到,Raspberry Pi 使用动态缩放来调整其时钟速度。即当负载低于100%时,时钟速度为600Mhz,当负载为100%时,它切换到1.2Ghz以提供更好的性能。
到目前为止,我已经获得了以下信息,但还没有能够为 Raspberry Pi 设置恒定的时钟频率:
1- 使用 cpufrequutils 包,
cpufreq-set -g userspace
cpufreq-set -f 1.2Ghz
Run Code Online (Sandbox Code Playgroud)
cpufreq-info 查看结果
2- 设置通过 /boot/config.txt
arm-freq=800
Run Code Online (Sandbox Code Playgroud)
3-写入内核文件,例如:
echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
Run Code Online (Sandbox Code Playgroud)
我还没有理解这三种方法之间的确切区别,也无法设置恒定频率。由于树莓派3默认只能在600Mhz和1.2Ghz之间切换,所以当我通过cpufreq-info查看cpu当前的时钟速度时,我看到的是600Mhz或1.2Ghz。
如何设置600Mhz和1.2Ghz以外的不同频率,比如把这些值改成750Mhz-1000Mhz或者干脆做成750Mhz-750Mhz;在这方面,无需编译新内核。
如果有任何关于问题的缺失信息,请在下面评论,我会尽力提供。
非常感谢任何帮助。
干杯,
cpu-speed ×10
performance ×4
blocking ×1
c# ×1
console ×1
cpu ×1
driver ×1
frequency ×1
gpu ×1
hardware ×1
kernel ×1
linux ×1
low-memory ×1
moores-law ×1
multicore ×1
nonblocking ×1
optimization ×1
python ×1
r ×1
simulation ×1