我正在使用NetBeans 7作为我的IDE在Windows 7中的mingw32下使用g ++编写软件渲染器.
我一直需要对它进行描述,而这种需求已达到临界质量,因为我已经过去了解结构.我环顾四周,对我而言,这个答案显示了同时跨平台和保持简单的最大希望.
这种方法的要点是,可能最基本的(在许多方面,最准确的)分析/优化方法是直接通过暂停执行来直接对堆栈进行采样......不幸的是,NetBeans 不会暂停.所以我试图找出如何直接使用gdb进行此采样.
关于gdb,我不太了解.但是,我从手册页中可以看出,您在运行可执行文件之前设置了断点.这对我没有帮助.
有没有人知道一个简单的方法来获取gdb(或其他gnu工具):
...给出我陈述的配置?
我正在考虑编写一个新的Windows GUI应用程序,其中一个要求是应用程序必须响应迅速,加载速度快,内存占用少.
我已经将WTL用于我之前使用此类要求构建的应用程序,但由于我在日常工作中一直使用.NET,因此返回WTL变得越来越痛苦.我对这个应用程序使用.NET不感兴趣,因为我仍然发现较大的.NET UI缺乏性能,但我有兴趣为UI使用更好的C++框架 - 比如Qt.
在开始之前我想要确定的是,我不会在性能方面对此感到后悔.
那么:Qt快吗?
我将尝试通过我希望接近匹配的示例来限定问题:我当前的WTL应用程序是程序员的记事本.我正在研究的当前版本重约4mb的代码,用于32位版本的单一语言翻译版本.在现代快速PC上加载需要1-3秒,这很重要,因为人们经常启动它以避免IDE等.一旦你编辑了一个内存占用,通常在64位Win7上12-20 mb而.您可以不间断地运行应用程序,将其保持最小化,无论如何,当您切换到它时,它总会立即引起注意.
为了争论,我想说我想将我的WTL应用程序移植到Qt,以便将来可能的跨平台支持和/或更简单的UI框架.如果不与Qt的这种性能水平相匹配,我想接近.
我在Stack Overflow中搜索了类似函数的宏与内联函数的优缺点.
我发现了以下讨论: C中不同宏函数/内联方法的优缺点
......但它没有回答我的主要问题.
也就是说,在内存使用和执行速度方面,使用宏函数(带有变量,可能还有其他函数调用)和内联函数的开销是多少?
开销中是否存在编译器相关的差异?我同时拥有icc和gcc.
我模块化的代码片段是:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)
我将其转换为内联函数/宏的原因是我可以将其放入ac文件中,然后有条件地编译其他类似但略有不同的函数/宏.
例如:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)
(注意第二行的差异......)
这个函数是我的代码的核心功能,在我的程序中每步调用数千次,我的程序执行数百万步.因此,我希望尽可能减少开销,因此我浪费时间来担心内联的转换,将代码转换为宏.
根据之前的讨论,我已经意识到宏的其他优点/缺点(类型独立性和由此产生的错误)...但我最想知道的,目前不知道的是性能.
我知道你们中的一些C老兵会对我有一些很好的见解!
简短版本:我想知道标准三角函数的实现是否比包含的更快math.h.
龙版本:我有一个程序,对NUMERICS相当重(这是一个物理模拟),并需要调用三角函数,主要是sin和cos,有很多.目前我只是使用其中包含的实现math.h.分析显示对这些函数的调用花费比我预期的要多(希望).
虽然代码的其他部分肯定有足够的优化空间,但速度更快sin,cos可能会给我一些额外的百分比..那么,你们有什么建议吗?
在另一篇文章中,建议使用自制的查找表.但也许有其他选择?或者在一些图书馆中提供现成且经过良好测试的查找解决方
检测R包中的性能回归有什么好的工作流程?理想情况下,R CMD check当我在代码中引入显着的性能回归时,我正在寻找可以集成的东西.
一般来说什么是好的工作流程?还有哪些其他语言提供的好工具 它是可以建立在最高单元测试上的,还是通常单独完成的?
除了ruby-prof和核心Benchmark类之外,你用什么来分析你的Ruby代码?特别是,您如何找到代码中的瓶颈?几乎感觉我需要使用我自己的小工具才能找出在我的代码中花费的所有时间.
我意识到ruby-prof提供了这个,但输出坦率地说非常混乱,并且不容易找出你自己的代码的哪些实际块是问题的根源(它告诉你哪些方法调用占用了最多的时间)虽然).因此,我并没有像我想的那样得到更多的东西,而且还没有真正能够利用它.
也许我做错了?还有替代品吗?谷歌搜索不会为我带来任何东西.
在ACM示例中,我必须构建一个用于动态编程的大表.我不得不在每个单元格中存储两个整数,所以我决定去找一个std::pair<int, int>.但是,分配大量的数组需要1.5秒:
std::pair<int, int> table[1001][1001];
Run Code Online (Sandbox Code Playgroud)
之后,我将此代码更改为
struct Cell {
int first;
int second;
}
Cell table[1001][1001];
Run Code Online (Sandbox Code Playgroud)
并且分配花了0秒.
是什么解释了这个巨大的时间差异?
我目前正在决定建立一个科学计算产品的平台,并决定使用Core2 Quad CPU上的英特尔编译器的C#,Java或普通C.它主要是整数运算.
到目前为止,我的基准测试显示Java和C相互之间的差距很大,而.NET/C#的速度约为5% - 但是我的一些同事声称,如果给定足够的时间,那么具有正确优化的.NET将会击败这两者让JIT做它的工作.
我总是认为JIT会在应用程序启动后的几分钟内完成它的工作(在我的情况下可能只需几秒钟,因为它主要是紧环),所以我不确定是否相信它们
任何人都可以了解情况吗?.NET会打败Java吗?(或者我最好只是坚持使用C?).
代码是高度多线程的,数据集的大小是几TB.
在这种情况下,Haskell/Erlang等不是选项,因为有大量现有的遗留C代码将被移植到新系统,而将C移植到Java/C#比Haskell或Erlang简单得多.(当然,除非这些提供了显着的加速).
编辑:我们正在考虑转向C#或Java,因为理论上它们可能更快.我们可以减少每一个处理时间,每年为我们节省数万美元.在这一点上,我们只是试图评估C,Java或c#是否会更快.
我正在以下列方式运行"perf":
perf record -a --call-graph -p some_pid
perf report --call-graph --stdio
Run Code Online (Sandbox Code Playgroud)
然后,我看到了这个:
1.60% my_binary my_binary [.] my_func
|
--- my_func
|
|--71.10%-- (nil)
| (nil)
|
--28.90%-- 0x17f310000000a
Run Code Online (Sandbox Code Playgroud)
我看不出哪个函数调用my_func().我看到"nil"和"0x17f310000000a".难道我做错了什么?这可能不是调试信息问题,因为显示了一些符号而其他符号未显示.
更多信息: