相关疑难解决方法(0)

优化!- 它是什么?怎么做?

听到"高度优化的代码"或某些开发人员需要优化他们和诸如此类的东西,这是常见的.然而,作为一个自学成才的新程序员,我从来没有真正理解人们在谈论这些事情时究竟是什么意思.

关心一般的想法呢?此外,推荐一些阅读材料,无论你想在这件事上说什么.随意咆哮和讲道.

language-agnostic theory algorithm optimization

12
推荐指数
4
解决办法
725
查看次数

Linux上的性能分析

在*nix上分析C/C++应用程序的最佳工具是什么?

(我希望能够分析一个混合了(阻塞)文件IO,epoll for network和fork()/ execv()的服务器来解决一些繁重的问题;但是一般的帮助和更一般的工具都很受欢迎.)

您是否可以在一个概述中获得RAM,CPU,网络和磁盘的大系统图片,并深入研究它?

内核列表上有很多关于类似事情的讨论perf timechart,但我还没有发现Ubuntu中出现过任何问题.

c c++ unix linux performance

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

如何开始使用WCF性能分析

我正在试图找出如何配置WCF服务,以便我可以识别任何瓶颈.
我已经在网上找到了一些信息,但没有任何假设没有先前的知识,这就是我所处的位置.

推荐什么免费工具?

- visual studio tools
- clrprofiler 
Run Code Online (Sandbox Code Playgroud)

以下是我发现使用vsperfcmd.exe来分析wcf服务的信息,根据这一点,它非常简单,但我需要填补从哪里开始的空白.我的假设是将VsPerfCLREnv和VsPerfCmd复制到托管我的wcf服务的服务器,并执行一些我不太确定的配置步骤.我也不太确定如何能够看到调用堆栈来评估每个调用的性能.

clrprofiler看起来有点简单.我假设我会将clrprofiler.exe复制到服务器,File->Profile Service并添加名称和启动/停止命令.(这是一个友好的名称或文件名或服务显示名称?)我假设我会对服务运行我的测试,我可以在clrprofiler中看到调用堆栈.这听起来不对吗?

[编辑]
我对测试网络并不感兴趣,因为这是在测试服务器上,这是一个大型wcf项目,上面有多个开发人员,我无法对项目进行更改,仅用于监控性能.我想专注于其中的实际方法的性能.

非常感谢任何入门帮助.

performance wcf instrumentation profiling visual-studio-2010

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

有没有比定时更好的方法来对C程序进行基准测试?

我正在编写一个小程序,必须对一个大型数组(最多400万个文本字符串)进行排序.似乎我在这方面做得很好,因为radixsort和mergesort的组合已经将原始q(uick)排序执行时间减少了不到一半.

执行时间是主要的一点,因为这是我用来我的代码进行基准测试的.

我的问题是:

是否有更好的(即更可靠的)基准测试程序的方式,而不仅仅是执行的时间?它有点工作,但是如果运行两次,相同的程序(运行相同的后台进程)通常具有稍微不同的执行时间.

这有点挫败了检测小改进的目的.一些小的改进可能会增加一个很大的...

提前感谢任何输入!

结果:

我设法让gprof在Windows下工作(使用gcc和MinGW).与我的普通编译器(tcc)相比,gcc表现不佳(考虑执行时间),但它给了我很多洞察力.

c sorting benchmarking

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

限制CPU速度以进行性能分析

我正在尝试优化应用程序上的几个瓶颈,该应用程序应该运行在各种各样的CPU和架构上(其中一些非常接近嵌入式设备).

然而,由于我的CPU速度,我的分析器的结果并不是很重要.有没有办法(最好是在Windows或Mac OS X下)限制我的CPU速度以进行性能分析?

我曾考虑使用虚拟机,但没有发现任何具有此类功能的虚拟机.

c++ cpu profiling

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

C(gcc)是否有分析器来分别编码代码行?

我来自Matlab背景,所以我习惯了一个分析器,它可以描述每一行而不仅仅是每个函数都像gprofcallgrind.有没有C类似功能的探查器?

谢谢!

截图matlab profiler

c profiler profiling

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

R中的并行优化

这个问题恰逢其时,因为我也在努力优化.我知道R中不同的"正常"优化程序,我知道像雪,降雪,Rmpi等喜欢的并行包.然而,我没有设法在我的计算机上并行运行优化.

一些玩具代码说明:

f <- function(x) sum((x-1:length(x))^2)
a <- 1:5
optim(a,f)
nlm(f,a)
Run Code Online (Sandbox Code Playgroud)

我想要做的是并行化optim()函数(或nlm()函数,它基本相同).我的真实函数f()要复杂得多,一个优化循环持续大约半小时.如果我想运行100个样本的模拟,那个需要很长时间.我想避免为并行计算编写自己的牛顿算法,所以我希望有人能给我一些关于如何在R中使用并行计算来解决复杂优化问题的提示.


我认为这个问题与相关问题的问题不同.我的请求专门针对并行计算,而非一些更快的替代优化.

parallel-processing optimization r

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

这是Scala 2.9.1延迟实现中的错误还是反编译的工件

我正在考虑在一个计算密集的程序上使用Scala.对我们代码的C++版本进行概要分析表明,我们可以从Lazy评估中获益.我已经在Scala 2.9.1中尝试过并且非常喜欢它.但是,当我通过反编译器运行该类时,实现看起来并不正确.我假设它是反编译器的神器,但我想得到一个更确定的答案......

考虑以下简单的例子:

class TrivialAngle(radians : Double) 
{
    lazy val sin = math.sin(radians)
}
Run Code Online (Sandbox Code Playgroud)

当我反编译它,我得到这个:

import scala.ScalaObject;
import scala.math.package.;
import scala.reflect.ScalaSignature;

@ScalaSignature(bytes="omitted")
public class TrivialAngle
  implements ScalaObject
{
  private final double radians;
  private double sin;
  public volatile int bitmap$0;

  public double sin()
  {
    if ((this.bitmap$0 & 0x1) == 0);
    synchronized (this)
    {
      if (
        (this.bitmap$0 & 0x1) == 0)
      {
        this.sin = package..MODULE$.sin(this.radians);
        this.bitmap$0 |= 1; 
      } 
      return this.sin;
    }
  }

  public TrivialAngle(double radians)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,返回区块位于错误的位置,您将始终获得锁定.这不是真正的代码所做的,但我无法证实这一点.任何人都可以确认或否认我有一个虚假的反编译,并且懒惰的实现有点合理(即,只有在计算值时才锁定,并且不会为后续调用获取锁定?)

谢谢!

作为参考,这是我使用的反编译器: …

performance synchronization decompiling scala lazy-evaluation

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

指令级分析:指令指针的含义?

在汇编指令级别分析代码时,如果现代CPU不按顺序或按顺序执行指令,那么指令指针的位置真正意味着什么呢?例如,假设以下x64汇编代码:

mov RAX, [RBX];         // Assume a cache miss here.
mov RSI, [RBX + RCX];   // Another cache miss.             
xor R8, R8;        
add RDX, RAX;           // Dependent on the load into RAX.
add RDI, RSI;           // Dependent on the load into RSI.
Run Code Online (Sandbox Code Playgroud)

指令指针大部分时间用在哪条指令上?我可以为所有人想出好的论点:

  • mov RAX, [RBX] 大概需要100个周期,因为这是一个缓存未命中.
  • mov RSI, [RBX + RCX]也需要100个周期,但可能与前一个指令并行执行.它甚至意味着指令指针位于其中一个或另一个上?
  • xor R8, R8 可能在内存加载完成之前执行乱序并完成,但指令指针可能会保留在此处,直到所有先前的指令也完成为止.
  • add RDX, RAX生成管道停顿,因为它RAX是在缓慢的缓存未命中加载之后实际使用值的指令.
  • add RDI, RSI也停滞,因为它依赖于负载RSI.

performance assembly profiling x86-64 low-level

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

如何测试java应用程序的性能瓶颈?

我正在审查一个大的Java应用程序,看看是否有任何性能瓶颈.真正的问题是我无法确定任何单个模块的性能问题.整个应用程序都很慢.

我可以使用一些工具/技术来帮助我吗?

java performance

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