相关疑难解决方法(0)

如何使MSVC调试版本运行得更快

我们有一个大的C++应用程序,有时我们需要作为调试版本运行以调查错误.调试版本比发布版本慢得多,几乎无法使用.

有哪些技巧可以使MSVC Debug构建执行得更快而不会牺牲太多的可调试性?

c++ debugging performance visual-c++

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

分析WPF应用程序

我有一个WPF应用程序,有时会冻结半分钟,然后工作正常.我正在考虑描述该应用程序.有谁知道如何配置WPF应用程序的好教程?或者任何人都想知道何时冻结?冻结不一致,与任何使用模式无关

感谢帮助.

加桑

wpf profiling

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

分析mex函数

我刚刚用c ++重写了一个matlab程序作为mex函数来加速,结果非常棒.这个优化决策是一个非常好的主意,在没有线程的情况下可以加速20倍.它仍然让我对mex-function花费时间和想要识别可能的瓶颈感到好奇.

我正在寻找一种分析mex功能的方法.matlab profiler用处不大,我下载的其他分析器(免费和试用版)都希望运行可执行文件.我不是mex-guru,但据我所知,运行mex的唯一方法是在Matlab中.mex-function被编译成一个dll,但被称为.mex64.所以这个问题应该类似于分析一个DLL.为了编写c ++ mex-function我使用的是单用户VS2005(即不是团队版本),而是在x64平台上运行.

有没有人知道配置mex功能的好方法?我应该使用什么工具,当我从Matlab开始时如何使用它?或者有没有其他方法来分析c ++代码?

matlab profiling mex

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

valgrind,分析计时器到期了吗?

我尝试使用valgrind来描述一个简单的c prog:

[zsun @ nel6005001~] $ valgrind --tool = memcheck ./fl.out
== 2238 == Memcheck,内存错误检测器
== 2238 == Copyright(C)2002-2009,GNU GPL'd,Julian西沃德等人.
== 2238 ==使用Valgrind-3.5.0和LibVEX; 重新运行-h版权信息
== 2238 ==命令:./ fl.out
== 2238 ==
== 2238 ==
== 2238 == HEAP SUMMARY:
== 2238 ==在退出时使用:1,168字节in 1个块
== 2238 ==总堆使用量:1个allocs,0个frees,1,168个字节分配
== 2238 ==
== 2238 == LEAK SUMMARY:
== 2238 ==绝对丢失:0个块中的0个字节
== 2238 = =间接丢失:0个块中的0个字节
== 2238 ==可能丢失:0个块中的0个字节
== 2238 ==仍然可达:1个块中的1,168个字节
== 2238 ==抑制:0个块中的0个字节
== 2238 ==重新运行--leak-check = full以查看泄漏内存的详细信息
== 2238 ==
== 2238 …

valgrind

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

递归开销 - 有多严重?

可能重复:
递归是否比循环更快?

大约15年前,我第一次接受C语言培训.我的雇主想要高度优化的代码来处理计算困难的任务.我记得不止一次被建议将递归重写为循环,即使是在昂贵的可读性方面,以避免"递归开销".正如我所理解的那样,递归开销是将数据推送到堆栈然后将其弹出所需的额外工作.

现在我用C,Python,Perl编写,有时用Java编写代码,我有时会想到递归.还有什么东西可以通过重写来获得吗?如果它们是尾递归怎么办?现代编译器让所有这些问题都没有实际意义吗?这些担忧是否与解释语言无关?

optimization recursion programming-languages tail-recursion interpreted-language

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

为什么在C++中这么慢?

我已经将这个简单的方法从C#转换为C++.它读取路径表并填充整数列表(或整数向量的向量).

路径表中的示例行类似于

0 12 5 16 n
Run Code Online (Sandbox Code Playgroud)

我知道有一般这样做的更好的办法,但现在我只想知道为什么我的C++代码正在采取这么多的时间.例如10分钟而不是C#版本的10秒钟.这是我的C++代码.我猜我做的事情有点严重错误.

//Parses the text path vector into the engine
void Level::PopulatePathVectors(string pathTable)
{
    // Read the file line by line.
    ifstream myFile(pathTable);

        for (unsigned int i = 0; i < nodes.size(); i++)
        {
            pathLookupVectors.push_back(vector<vector<int>>());

            for (unsigned int j = 0; j < nodes.size(); j++)
            {
                string line;

                if (getline(myFile, line)) //Enter if a line is read successfully
                {
                    stringstream ss(line);
                    istream_iterator<int> begin(ss), end;
                    pathLookupVectors[i].push_back(vector<int>(begin, end));
                }
            }
        }
    myFile.close();
}
Run Code Online (Sandbox Code Playgroud)

这是C#版本: …

c# c++ io

10
推荐指数
3
解决办法
1376
查看次数

分析(可能是I/O绑定)进程以减少延迟

我想在更大的应用程序中改进特定方法的性能.

目标是改善延迟(在特定功能中花费的挂钟时间),而不是(必要的)系统负载.

要求:

  1. 我预计很多延迟都是由I/O引起的,考虑到等待/阻塞所花费的时间(换句话说:查看挂钟时间而不是CPU时间)
  2. 因为程序比我想要优化的片段做得更多.需要有一种方法可以以编程方式启动/停止分析,或者过滤输出以仅显示进入和退出我正在优化的功能之间的时间.
  3. 方法级别的分析是可以接受的(如果它可以在指令级别上完成,甚至更好.如果它只分析系统调用,那可能是不够的)
  4. 这是一个爱好项目,所以昂贵的工具不是一个真正的选择
  5. 仪表(-finstrument-functions)是可以接受的
  6. 我感兴趣的关键代码很难手动中断(因为它已经相对快速且难以在循环中实际调用),因此需要某种自动化.

迄今为止丢弃的工具:

  • gprof,oprofile,callgrind(要求1)
  • 使用getrusage建立自定义的东西(要求1)
  • poormansprofiler.org(要求2)
  • strace -T,dtrace,http://perf.wiki.kernel.org(要求2和3)
  • VTune,Zoom(要求4)
  • 手动调用堆栈采样(要求6)
  • google-perftools(应该能够测量墙壁时间,但这似乎不适用于我的情况,大概是因为SIGALRM干扰.
  • systemtap(我的内核没有打包包含utrace)

我尚未进一步评估的其他选项:

  • cprof(这里没有开箱即用,似乎只有i386)
  • 手动插入跟踪点(例如,使用lttng)

我很想知道:

  • 其他选择
  • 也许我太早丢弃了一些工具?
  • 我尚未评估的选项是否有可能发挥作用,如果是的话,如何做到最好.

我终于安顿下来了:

这个粗糙工具产生的痕迹很难解释,我可以很容易地想象一些工具来进一步处理它的输出,使它更加有用.但是,这对我来说现在已经完成了这项工作,所以我把这个项目放到了以后;).

linux performance trace profiling sampling

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

为一个变量分配零可能比一个百万次迭代的For循环花费更多的时间吗?

由于我的代码分析,我得到一个奇怪的输出.对于代码的主要计算,它正确地表明超过70%的时间花在这些部分上,但还有一些其他有趣的点.以下行占用%5.8

int counter = 0 ; // %5.8 of total time
Run Code Online (Sandbox Code Playgroud)

以下For循环消耗的时间较少(nx = 800&ny = 800)!这怎么可能?附上了剖析器结果的图片. 在此输入图像描述

c# optimization profiler

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

用于分析.NET Compact Framework应用程序性能的工具

我发现的唯一的东西是EQATEC Profiler.是否还有其他可用于配置.NET CF应用程序的分析器?

.net performance profiling compact-framework

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

如何使用谷歌perf工具

我刚开始使用谷歌性能工具(google-perftools以及libgoogle-perftools4ubuntu中的软件包),我发誓我正在谷歌上搜索一天,我没有找到答案!问题是我没有通过CPU分析获得所有函数的结果.这是我的代码:

#include "gperftools/profiler.h"
#include <iostream>
#include <math.h>
using namespace std;
void bar()
{
        int a,b,c,d,j,k;
        a=0;
        int z=0;
        b = 1000;
        while(z < b)
        {
                while (a < b)
                {
                        d = sin(a);
                        c = cos(a);
                        j = tan(a);
                        k = tan(a);
                        k = d * c + j *k;
                        a++;
                }
                a = 0;
                z++;
        }
}
void foo()
{
        cout << "hey " << endl;
}

int main()
{
        ProfilerStart("/home/mohammad/gperf/dump.txt");

        int a = 1000; …
Run Code Online (Sandbox Code Playgroud)

profiling gperftools

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