日期是12/02/10.圣诞节前几天正在逐渐消失,作为一名Windows程序员,我几乎成了一个重要的障碍.我一直在使用AQTime,我已经尝试过困,有光泽,而且非常困,正如我们所说,VTune正在安装.我曾尝试使用VS2008探测器,它一直在积极惩罚,而且经常无法察觉.我使用了随机暂停技术.我检查了呼叫树.我已经解雇了函数跟踪.但令人痛苦的事实是,我正在使用的应用程序超过一百万行代码,可能还有另外一百万行的第三方应用程序.
我需要更好的工具. 我已经阅读了其他主题. 我已经尝试了每个主题中列出的每个分析器.只需要比这些垃圾和昂贵的选择更好的东西,或几乎没有收获的荒谬工作.为了使问题更加复杂,我们的代码经过严格的线程化,并运行了许多Qt事件循环,其中一些非常脆弱,以至于由于时序延迟而导致重负荷仪表崩溃.不要问我为什么我们运行多个事件循环.没有人能告诉我.
在Windows环境中,Valgrind还有更多选择吗?
有没有什么比我已经尝试过的大量破碎工具更好的了?
是否有任何旨在与Qt集成的东西,也许是在队列中有用的事件显示?
我尝试过的工具的完整列表,以及斜体中非常有用的工具:
我没试过的建议工具:
备注:目前 英特尔环境.VS2008,提升库.Qt 4+.他们所有人的悲惨态度:通过trolltech进行Qt/MFC整合.
概要
在许多其他问题中,最近已将许多组件切换到不正确的线程模型,由于我们下面的代码突然不再是多线程的,因此导致严重的挂起.我不能说更多,因为它违反了我的保密协议,但我可以告诉你,通过临时检查甚至正常的代码审查都不会发现这种情况.如果没有分析器,调用图和随机暂停,我们仍然会在美丽的蓝色天空中尖叫着我们的愤怒.值得庆幸的是,我与一些我见过的最好的黑客合作,我可以获得一个充满伟大工具和优秀人才的惊人"诗歌.
Gentlefolk,我非常欣赏这一点,并且唯一的遗憾是我没有足够的代表来奖励你们每个人.我仍然认为这是一个重要的问题,要比我们到目前为止得到的更好的答案.
结果,在接下来的三个星期的每周,我将提供我能负担得起的最大奖金,并用我认为不是常识的最好的工具授予它答案.三个星期后,如果你原谅我的惩罚,我们希望已经积累了一些关于剖析器的确切概况.
外卖
使用分析器.他们对Ritchie,Kernighan,Bentley和Knuth来说已经足够了.我不在乎你认为你是谁.使用分析器.如果你得到的那个不起作用,找另一个.如果你找不到一个,代码一.如果你不能编码一个,或者它是一个小挂机,或者你只是卡住,使用随机暂停.如果一切都失败了,请聘请一些研究生来敲打一个剖析器.
现在,我不得不说我不认为在W7x64环境中分析C++代码有一个明确的选择,但肯定有一些选项无法执行任何有用的服务.
所以,我们看到了很多斐波纳契问题.我个人非常讨厌他们.很多.不止一切.我认为如果我们可以让任何人都不可能再次将其用作面试问题,那就太好了.让我们看看有多接近O(1)我们可以得到斐波那契.
这是我的开始,几乎来自维基百科,当然还有足够的空间.重要的是,这个解决方案将引爆任何特别大的fib,它包含一个相对天真的power函数使用,如果你的库不好,它会把它放在最坏的O(log(n)).我怀疑我们可以摆脱电源功能,或至少专攻它.有人帮忙吗?除了使用查找表的有限*解决方案之外,是否存在真正的O(1)解决方案?
#include <iostream>
#include <math.h>
using namespace std; // would never normally do this.
int main()
{
int target = 10;
cin >> target;
// should be close enough for anything that won't make us explode anyway.
float mangle = 2.23607610;
float manglemore = mangle;
++manglemore; manglemore = manglemore / 2;
manglemore = pow(manglemore, target);
manglemore = manglemore/mangle;
manglemore += .5;
cout << floor(manglemore);
}
Run Code Online (Sandbox Code Playgroud)
*我知道,我知道,这足以满足斐波纳契的任何零实际用途.
有没有人知道一个真正坚如磐石的C++库用于后缀尝试?除了哑剧者之外?
理想情况下,我想:
并发的一些概念.
良好的缓存行为.
许可证.
支持任意字母表.
我无法在一个地方找到任何令人满意的关于这个主题的报道,所以我想知道:什么是最快的交集,联合和分离算法?
有限域名是否有任何有趣的?
任何人都可以击败O(Z),其中Z是交叉点的实际大小?
如果您的方法依赖于排序集,请注意,但不要将其视为不合格因素.在我看来,必须有一个真正的微妙优化仓库来分享,我不想错过任何一个.
我知道的一些算法依赖于vanilla之外的按位运算,因此您可以假设存在SSE4并访问popcount等内在函数.请注意这个假设.
有趣的是: BY Intersect的实现
更新
我们有一些非常好的部分答案,但我仍然希望对这个问题有更完整的攻击.我特别感兴趣的是看到更明确地使用布隆过滤器来解决这个问题.
更新
我已经完成了一些关于将bloom过滤器与cuckoo哈希表相结合的初步工作.它看起来几乎令人讨厌,因为它们有非常相似的需求.我已经接受并接受了答案,但此刻我并不满意.
最近,我结交了一位新朋友.他的名字是_expand,我们进行了一些很好的交谈,我甚至和他一起闲逛过几次.但是当我开始四处询问时,没有人听说过我的_expand.我开始怀疑了.我在微软和一些其他业务部门的朋友中打了几个完全非隐喻的朋友.没有.没人用过它.我在各种搜索引擎和源树周围涂鸦.没有什么,除了粗略提到这里和那里.当然,关于性能和兼容性的信息不足以将_expand引入生产代码或更具针对性的通用库.
更糟糕的是,我没有在任何gnu库中找到的等效功能,所以我与新朋友共处的任何东西都不会是便携式的.这是一个耻辱,因为它真的是一个令人着迷和令人兴奋的能力.当然,我可以深入研究realloc,并将它的功能分开,但问题在于*nixes上的大部分实现都是高度可变的.所以我必须在版本之后编写代码以尝试获得便携式_expand.但是,在glib或扩展的gnu libs中没有类似的东西似乎很荒谬.
为了澄清我的兴趣,我正在尝试构建一个单链接的累加器,它扩展以尽量减少碎片,同时按照传统的双端实现方式分配多个元素块.通过约束元素添加和删除的用例,我希望优化整个结构的删除时间,以及元素插入和索引.结果,_expand的"大声失败"让我让结构能够智能地思考何时以及它是否可以在适当的位置调整,以及它在何处可以放置数据.
模板的可维护性是一个问题.当您在专用于通用库的社区外工作时,这是一个简单的事实.我不希望我的朋友和同事必须使用Clang来运行我的代码,只是因为......嗯...那么它不是真正的通用和便携,是吗?但我迫切希望能够偶尔编写一些模板化的代码.
您使用哪些技巧来使模板化代码更易于使用,更易于维护,并且更具可读性?像描述性模板参数,enable-ifs和代码风格的类似小怪癖,一直到关于哪些编译器支持可变参数模板或要避免哪些模板(反)模式的建议.
简而言之,我应该避免哪些成语?我应该依靠哪个?
我希望我的代码优雅但不太优雅.
我发现的一些资源:
C++ FAQ
Error Decrypt
什么是可变参数模板?
无论出于何种原因,我们都会从破坏弱指针中看到相当多的成本.这是罪魁祸首代码:
~weak_count() // nothrow
{
if(pi_ != 0) pi_->weak_release(); // Consumes a huge chunk of our time.
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
id_ = 0;
#endif
}
Run Code Online (Sandbox Code Playgroud)
我们没有处于调试模式,并且调试挂钩未被使用.弱释放正在消耗真正惊人的时间.这是一个已知的问题?我们做错了吗?
Boost版本:1.36
编译器:VS2008编译器套件.
不幸的是,由于各种原因,我们被锁定在这个Boost版本中,所以我更想知道这些奇怪的支出是否可以在新版本上重复,或者代表已知不良做法的结果.我们只破坏了500k弱指针的顺序,它们不会因破坏相似数量的原始指针而在性能上产生明显的差异.当然不会增加2.5-4倍的成本.请注意,我们不会删除所述指针所针对的对象.这笔费用完全来自指针本身的破坏.
这里发生了什么?
因此,我正在努力将一系列优秀的数据结构实现集合在一起,部分用于我的个人收集,部分用于尝试构建一组更高度优化的结构,用于某些特定目的.部分原因来自于deque和set的痛苦,分别造成了意想不到的开销和惊人的痛苦删除成本.其中一部分源于黑客的好奇心.
但是,根据许可证,我可能无法满足我喜欢的特许经营权,这种许可证可以用于潜在的商业用途.理想情况下,我想帮助在C++中找到一个极好的和异常安全的后缀trie实现,以及类似的健壮前缀trie.奖金回合包括一个实心的哈希特里.
为了分享,这是我到目前为止所得到的:
Ned!
RLC后缀阵列
但我正在寻找更多选择.
如果我们得到一些好的,我也会破解一些基准测试代码.
c++ ×6
algorithm ×4
optimization ×2
benchmarking ×1
boost ×1
fibonacci ×1
maintenance ×1
malloc ×1
nlp ×1
performance ×1
profiler ×1
profiling ×1
qt ×1
readability ×1
templates ×1
tree ×1
trie ×1