我需要帮助才能使这段代码更快:
UnitBase* Formation::operator[](ushort offset)
{
UnitBase* unit = 0;
if (offset < itsNumFightingUnits)
{
ushort j = 0;
for (ushort i = 0; i < itsNumUnits; ++i)
{
if (unitSetup[i] == UNIT_ON_FRONT)
{
if (j == offset)
unit = unitFormation[i];
++j;
}
}
}
else
throw NotFound();
return unit;
}
Run Code Online (Sandbox Code Playgroud)
所以,为了给出一些背景知识,我有这个类Formation,它包含一个指向UnitBase对象的指针数组,称为UnitFormation.该UnitBase*数组具有相同大小的数字数组,表示每个对应的UnitBase对象的状态,称为UnitSetup.
我已经重载了[]运算符,只返回指向那些具有特定状态的UnitBase对象的指针,所以如果我要求itsFormation[5],该函数不一定返回UnitFormation[5],而是具有状态的UnitFormation的第5个元素UNIT_ON_FRONT.
我尝试过使用上面的代码,但根据我的分析器,它占用了太多时间.这是有道理的,因为算法必须在返回请求的指针之前计算所有元素.
我是否需要完全重新思考整个问题,还是可以以某种方式更快地进行?
提前致谢.
似乎Ants剖析器在完全相同的时间进行了检测和代码采样,我发现它非常有趣
我使用了VS分析器,你必须运行两个不同的配置文件会话来识别瓶颈 - ANTS如何捕获IO绑定函数调用而无需修改代码并将代码注入编译函数?
编辑:蚂蚁是使用仪器还是采样?
我最近安装了Visual Studio 2008 TS(eval),以便能够对应用程序进行一些分析.现在我只知道当应用程序比"Hello World"更复杂时我对(真实世界)分析知之甚少.
我的主要问题是集成调试器似乎增加了所有线程所花费的时间,所以我得到总运行时间的几倍,某些函数(如sleep)会出现几次,我假设它们被多个线程调用.
现在我的问题是:我怎样才能让这个更容易检查?我只感兴趣的一个主题(主要是完成所有工作),其他人只是在等待某些东西,完全受到主线程运行时间的限制.(它们在相同的模块中,有时也称为相同的功能.)
有没有办法设置分析?有什么方法可以处理结果,以使它们对我的场景更有意义吗?除VS 2008之外的任何其他解决方案(如2010或外部探查器)?
我现在正在使用仪器(在我的视图中给出了比在我的视图中采样更好的结果)和.net 3.5下的C#.
我有一些使用intel fortran编译器ifort编译的fortran代码.当我使用gprof进行配置文件测试时,我得到的大部分时间用于IO操作,我想找到文件的结尾,但我找不到更多关于此的文档:
index % time self children called name
<spontaneous>
[1] 20.6 0.07 0.00 _IO_wfile_seekoff [1]
-----------------------------------------------
<spontaneous>
[2] 20.6 0.07 0.00 sforcepf_ [2]
-----------------------------------------------
<spontaneous>
[3] 20.6 0.02 0.05 _IO_wfile_underflow [3]
0.01 0.04 258716/258717 strncmp [4]
-----------------------------------------------
0.00 0.00 1/258717 _IO_wdefault_doallocate [15]
0.01 0.04 258716/258717 _IO_wfile_underflow [3]
[4] 14.7 0.01 0.04 258717 strncmp [4]
0.04 0.00 3104592/3109256 strerror_r [5]
-----------------------------------------------
0.00 0.00 4664/3109256 __strcmp_sse42 [14]
0.04 0.00 3104592/3109256 strncmp [4]
[5] 11.8 0.04 0.00 3109256 strerror_r [5]
-----------------------------------------------
Run Code Online (Sandbox Code Playgroud)
那么,问题是,这个IO是针对Linux,还是针对ifort,还是针对fortran?我正在尝试优化此代码,并且在google中找不到有关此条款的有用信息.
我的代码中有一个循环,迭代1亿次(模拟模型的1亿次复制需要).对于1亿次迭代中的每次迭代,我myarray通过索引一个名为的整数变量从数组()中检索一个值age.由于阵列的长度,它是唯一有效的索引myarray[age]为age=0,...,99.但是,实际的域名age是0,...,inf.
所以,我有以下功能
int tidx(const int& a) {
return std::min(a,99);
}
Run Code Online (Sandbox Code Playgroud)
允许索引myarray[tidx(age)].
我怎么能更有效地做到这一点?
[下面的PERF输出]
构建源文件的示例,该文件说明了我正在使用的编译器标志:
Building file: ../SAR.cpp
Invoking: GCC C++ Compiler
g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"SAR.d" -MT"SAR.d" -o"SAR.o" "../SAR.cpp"
Finished building: ../SAR.cpp
Run Code Online (Sandbox Code Playgroud)
从perf record接下来是perf report:
Samples: 280 of event 'cycles', Event count (approx.): 179855989
24.78% pc2 libc-2.17.so [.] __GI_____strtod_l_internal
11.35% pc2 pc2 [.] samplePSA(int, double, int, NRRan&) …Run Code Online (Sandbox Code Playgroud) 我正在使用"time"命令在Linux上分析程序.问题是它的输出在统计上不是很相关,因为它只运行一次程序.是否有工具或方法可以获得平均几次"时间"运行?可能与偏差等统计信息一起?
就像标题所说,我想知道两个命令和它们产生的结果之间的区别.
从阅读本文我明白gprof需要一个额外的标志(-g,gdb需要相同的吗?),但这并没有给我一个关于分析器之间差异的答案.
这两个工具都是 Linux 性能和分析探测工具。我发现“perf”看起来更强大,因为它可以追溯到内核调用级别。所以我的问题是,有了“perf”,是否还需要学习和保留“gprof”/
我的意思是,有没有什么工作只能用 gprof 才能完成,而 perf 却不能很好地工作?
我无法在网上找到这个.我希望找到使用分析器如何更好地优化我的代码,并且当排序时哪些函数累积消耗最多的时间,str(),print和其他类似广泛使用的函数之类的东西占用了大部分的配置文件.分析python程序以获取用户定义函数的最佳方法是什么,只是为了查看他们可以优化的代码区域?
我希望这是有道理的,任何关于这个问题的光都会非常感激.
世纪的问题?我基本上想知道如果我将这段代码写成几个不同的变量或者我使用的是小数组,哪个会更有效.
int x = 34;
int y = 28;
int z = 293;
Run Code Online (Sandbox Code Playgroud)
VS
double coordinate[3] = {34, 28, 293};
Run Code Online (Sandbox Code Playgroud)
我有一个坐标结构,我将按以下方式使用:
typedef struct coordinates_t {
double x = 0.0;
double y = 0.0;
double z = 0.0;
} coordinates;
typedef struct car_t {
coordinates start; // car starting point
coordinates location; // car current Location
coordinates targCarVector; // Vector to car from target
coordinates altitude; // Altitude of car
coordinates distance; // Distance from car start to current position
} …Run Code Online (Sandbox Code Playgroud) performance ×5
profiling ×4
c ×2
c# ×2
c++ ×2
gprof ×2
linux ×2
optimization ×2
profiler ×2
algorithm ×1
benchmarking ×1
built-in ×1
comparison ×1
cprofile ×1
fortran ×1
perf ×1
python ×1
statistics ×1
std ×1