Articles of 性能

上下文切换可能导致高CPU

我们正在分析性能问题,我们最多可能有500个工作线程,CPU使用率不是很高。 上下文切换可能导致高CPU? 换句话说,由于CPU使用率不高,上下文切换(500个线程)在这里不成问题。

欧拉问题的性能问题和Int64types的recursion

目前我正在学习使用欧拉问题项目的Haskell作为我的操场。 我很惊讶我的Haskell程序竟然与其他语言编写的类似程序相比有多慢。 我想知道是否有什么东西,或者如果这是使用Haskell时期望的性能惩罚。 以下程序受到331问题的启发,但在发布之前我已经更改了,所以我不会为其他人破坏任何东西。 它计算在2 ^ 30 x 2 ^ 30网格上绘制的离散圆弧的弧长。 这是一个简单的尾部recursion实现,我确保跟踪弧长的累加variables的更新是严格的。 不过花了差不多一分半钟就完成了(用ghc编译-O标志)。 import Data.Int arcLength :: Int64->Int64 arcLength n = arcLength' 0 (n-1) 0 0 where arcLength' xy norm2 acc | x > y = acc | norm2 < 0 = arcLength' (x + 1) y (norm2 + 2*x +1) acc | norm2 > […]

有没有办法看到每个核心进程使用多lessCPU使用率?

我知道在perfmon中,你可以看到每个内核被利用了多less,一个特定的进程使用了​​多lessCPU。 然而,我似乎无法find一个方法来看看一个进程正在使用核心分解多lessCPU。 有没有一个内置的方式来查看这些信息? 有没有一个程序化的方式来看到这个? (C#首选)我是否通过问这个问题来certificateWindows(Vista)如何处理核心使用和上下文切换的误解? 编辑:更多的澄清我想找出。 我的过程只使用30-40%的总CPU(四核),因为它没有足够的multithreading来利用更多,还是因为它太I / O限制,磁盘访问是瓶颈? 那么没有办法做到这一点? (除了确保计算机上没有其他CPU活动)

什么是从malloc()做的Windows和Linux本地操作系统/系统调用?

我最近看到以下post: 内存分配器不低于malloc。 (默认分配器通常直接或间接调用malloc) 分配器只允许你指定不同的分配策略。 例如,你可以使用一次调用malloc一次的分配器来检索一个大的内存池,然后对于后续的分配请求,它只返回一小块这个池。 或者你可以把它作为一个钩子让你在每次分配内存或释放内存时执行一些额外的任务。 至于你的第二个问题,malloc是你可以去的最低的,而不会丢失可移植性。 malloc通常是使用一些特定于操作系统的内存分配函数来实现的 ,所以这个级别还是比较低的。 但是这与你的主要问题无关,因为C ++分配器是一个更高级别的抽象。 来自: C ++:内存分配器 我的问题是如何在以下操作系统中实现malloc? 对于Windows 对于Linux 什么是特定于OS的函数被称为/实现malloc()?

为什么使用DeviceIoControl枚举文件在VB.NET比在C + +更快?

我正在尝试阅读Windows主文件表(MFT)快速枚举文件。 直到现在我已经看到了两种方法来做到这一点: 正如Jeffrey Cooperstein和Jeffrey Richter使用DeviceIoControl所build议的那样 直接parsing一些开源工具和NTFSparsing器库中提供的MFT 对于我的项目,我正在关注的方法[ 1 ]。 我面临的问题主要与执行时间有关。 要明确,以下是我的制度和发展环境: IDE – Visual Studio 2013 语言 – C ++ 操作系统 – Windows 7 Professional x64 为C ++和.NET代码生成32位二进制文​​件。 问题 我将[ 1 ]中提到的版本(略作修改)与codeplex上提供的VB.NET实现进行了比较 。 问题是如果我取消注释在Inner Loop中的语句,C ++代码执行时间增加了7-8倍。 我没有在C ++代码中实现path匹配(在VB代码中可用)。 Q1。 请build议如何提高C ++代码的性能。 在我的机器上枚举C:\驱动器的计时器 : C ++(在内部循环中有未注释的语句) – 21 seconds VB.NET(附加path匹配代码) – 3.5 seconds 为了更清楚下面是C ++和VB.NET片段。 C […]

适用于Windows的体面分析器?

窗户是否有任何体面的取样(例如非仪表)型材? 最好在MacOS上类似于鲨鱼,尽pipe我愿意接受我将不得不在Windows上支付这样一个分析器。 我已经试过了VS Team Suite中的剖析器,并没有太深刻的印象,并想知道是否还有其他好的。 [编辑:Erk,我忘了说这是C / C + +,而不是.NET – 抱歉有任何混淆]

加快Qt程序的性能:Windows vs Linux

我已经在这里发布了这个问题,但是因为这可能不是Qt特有的,我想我也可以在这里尝试一下我的机会。 我希望这样做不是不恰当的(只要告诉我是否是这样)。 我开发了一个小的科学程序,执行一些math计算。 我试图优化它,以便尽可能快。 现在我几乎完成了对Windows,Mac和Linux用户的部署。 但是我还没能在很多不同的电脑上testing它。 这是我的麻烦:为Windows部署,我已经使用了一台同时安装了Windows 7和Ubuntu 12.04的笔记本电脑(双启动)。 我比较了在这两个系统上运行的应用程序的速度,我惊讶地发现它在Windows上的速度至less是它的两倍! 如果有一个小小的差异,我不会感到惊讶,但是怎么能说明这种差别呢? 这里有一些精确度: 我做这个程序的计算只是一些残酷而愚蠢的math计算,基本上它是在一个被称为十亿次的循环中计算乘积和余弦。 另一方面,计算是multithreading的:我启动了6个QThreads。 笔记本电脑有两个核心@ 1.73Ghz。 起初我以为Windows可能没有使用其中一个内核,但是随后我看着处理器活动,根据小graphics,两个内核都运行在100%。 然后我认为Windows的C ++编译器没有使用Linux的C ++编译器自动完成的优化选项(如-O1 -O2之类的东西),但显然是这样的。 我很困扰,在Windows上,这个应用程序太慢了(2到4次),真的很奇怪。 另一方面,我还没有尝试过与Windows的其他计算机。 不过,你有什么想法,为什么不同? 附加信息:一些数据… 尽pipeWindows似乎在使用两个内核,但我认为这可能与线程pipe理有关,原因如下: 样本计算n°1(此次启动2个QThreads): PC1窗口:7.33s PC1-linux:3.72s PC2-linux:1.36s 样本计算n°2(这个启动3个QThreads): PC1窗口:6.84s PC1-linux:3.24s PC2-linux:1.06s 样本计算n°3(这个启动6个QThreads): PC1窗口:8.35s PC1-linux:2.62s PC2-linux:0.47s 哪里: PC1-windows =我的2核笔记本电脑(@ 1.73Ghz)与Windows 7 PC1-linux =我的2核心笔记本电脑(@ 1.73Ghz)与Ubuntu 12.04 PC2-linux =我的8核心笔记本电脑(@ 2.20Ghz)与Ubuntu 12.04 (当然,PC2的速度并不令人震惊,我不可思议的是PC1-windows和PC1-linux的区别)。 注意:我也尝试在最近的PC上运行程序(4或8核心@ 3Ghz,不记得准确)在Mac OS,速度相当于PC2-linux(或稍快)。 […]

Windows – 用C#命名pipe道性能build议

我目前正在使用.NET / C#评估Windows上IPC的命名pipe道。 我目前正在寻找一个单一的生产者,一个消费者的情况。 有没有好的性能考虑指导方针? 在我的第一个testing案例中,我比较了大消息和小消息的速度,似乎是大(64k)消息发送的速度和小(48字节)的包一样快。 这是与默认参数。 我可能会添加更多的testing场景,但是这非常耗时,因此我正在寻找指导方针。

如何使CreateFile尽可能快

我需要在启动时读取几千个小文件的内容。 在Linux上,只使用fopen和阅读速度非常快。 在Windows上,这发生得非常缓慢。 我已经使用ReadFileEx切换到使用重叠I / O(asynchronousI / O),其中Windows在数据准备好读取时执行callback。 然而,实际上成千上万的CreateFile调用本身仍然是一个瓶颈。 请注意,我提供了自己的缓冲区,打开NO_BUFFERING标志,提供SERIAL提示等。但是,对CreateFile的调用需要几十秒的时间,而在Linux上,所有操作都要快得多。 有什么可以做的,让这些文件准备好更快地阅读? 对CreateFile的调用是: hFile = CreateFile(szFullFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN, NULL);

使用wevtutil安装WPT清单时出现问题

我试图将性能计数器和自定义事件添加到一个软件,以便我可以使用Windows Performance Toolkit程序(如XPerf和GPUView)查看这些程序。 我将竭尽全力克制自己的力量,对软件文档的状态发起一场激烈的咆哮,现在我浪费时间试图从网上取笑线索。 我将描述我如何到达现在的位置,以防万一这对其他迷失的灵魂有用。 到目前为止,我已经收集到我必须为我的性能计数器和事件编写事件清单。 您可以通过手动或使用名为“ ecmangen.exe ”的工具来完成此操作。 该程序的文档为事件创build清单提供了一个很好的一步一步的指南,但不解释如何将这些与您的代码集成。 就我而言,下一步就是使用两个神秘的命令行应用程序“ MC.exe ”和“ CTRPP.exe ”。 这些似乎分别生成C或C#头文件,源文件和资源文件,用于将事件和计数器检测添加到代码中。 接下来,你必须build立你的代码(查看'C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ winbase \ Eventing'中的示例),然后我们来到目前卡住的地方:正确使用下一个神秘工具“ wevtutil.exe ” 这个工具需要两件事情:你用它编译的二进制文件(exe或者DLL)和你用来生成这些资源的清单文件。 我遇到的麻烦是对二进制文件的位置非常挑剔,我一直无法确定这种挑剔的forms。 咒语和山羊牺牲没有结果。 如果清单文件中的'provider'标签的'resourceFileName'字段中定义了一个path,例如'c:\ MYDIR \ TEd.exe',那么就可以了。 但是,如果我把相同的exe文件放在一个不同的文件夹(失败的是C:\ tw \ TEd.exe),它会报错。 给出的错误信息是“警告:发布者TEd-Event-Provider资源不可访问”。 但没有更多的解释,为什么,或试图看看。 那么,我是否会以错误的方式添加检测工具,是否已经有了一个指导来解释所有的问题,以及“wevtutil.exe对目录名称的奇怪select性的性质是什么。 提前致谢, 蒂姆。