草庐IT

PERFORMANCE

全部标签

c++ - 需要缓存友好的数据结构来将字母的邻居存储在二维数组中

假设以下是我们正在操作的二维数组abcdefghijklmnop“f”的周围邻居是[abcegijk]。我正在尝试创建一个缓存友好的数据结构来存储节点的邻居。现在我有这样的东西structNeighbor{size_tneighborPosition[8][2];size_tsize;};typedefsize_tPosition[2];typedefNeighbor**NeighborTable;请注意,一个节点最多可以有8个邻居。有人有什么建议吗?我需要该结构是一个恒定时间的邻居查找,所以我将预先计算每个节点的邻居。 最佳答案

C++循环展开性能

我正在阅读“C++模板完整指南”一书,其中有一部分是关于元编程的。有一个循环展开(17.7)的示例。我已经实现了点积计算程序:#include#includeusingnamespacestd;templatestructFunctor{staticTdot_product(T*a,T*b){return*a**b+Functor::dot_product(a+1,b+1);}};templatestructFunctor{staticTdot_product(T*a,T*b){return*a**b;}};templateTdot_product(T*a,T*b){returnFun

C++ 创建对象、初始化列表与赋值?

我最近与一位friend讨论,他们说在C++中创建对象时使用初始化列表(而不是简单地分配数据成员)会提高性能。这是为什么(如果是真的)?我找到了这个页面:http://www.parashift.com/c++-faq/init-lists.html他们提到了临时对象,但我认为最近的编译器可以避免这种情况? 最佳答案 使用赋值时,对象是在您进行赋值之前默认构造的。如果构造和复制一个对象是昂贵的操作,你至少应该去掉其中的一个。初始化列表摆脱了额外的复制操作。复制构建允许同时执行这两项操作。

c++ - 如果我想要最大速度,我应该只在 std::vector 上使用数组吗?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter为指导。8年前关闭。我正在编写一些需要尽可能快的代码,而不会占用我所有的研究时间(换句话说,没有手动优化的程序集)。我的系统主要由一堆3D点(原子系统)组成,因此我编写的代码进行了大量距离比较、最近邻搜索以及其他类型的排序和比较。这些是大型的、百万或十亿点系统,并且简单的O(n^2)嵌套for循环不会削减它。对我来说最简单的方法是使用std::vector保持点坐标。起初我认为

c++ - 不仅性能而且内存大小的内存对齐优化

我们知道当你这样定义A时,A的大小是不同的:classA{shorta;doubleb;shortc;};或者像这样classA{shorta;shortc;doubleb;};我假设我们正在为32位操作系统编译并且我们已经告诉编译器对齐到32位。编译器是否真的很难通过重新排序定义来获得最小大小,同时实现相同的性能? 最佳答案 这太难了。结构特别需要按照与结构定义完全相同的顺序对字段进行排序。这个要求可能是对Pascal没有这样的要求并导致令人惊讶的结果的react。无论如何,并非所有CPU架构都需要对齐或填充。在大多数情况下,它会

c++ - CString += 运算符性能问题

我正在处理一个较旧的MFC/C++项目,该项目使用MFC的CString解析大型文本文件。处理字符串的类。我注意到在解析过程中有很多小部分添加到一个整体的大CString对象中://'strContainer'=CString//'tag'=CStringofamuchsmallersizestrContainer+=L"";当strContainer变量达到某个更大的大小时,上面的运算符似乎会降低CString的整体性能。我假设发生这种情况是因为+=运算符经常重新分配内存。所以我很好奇,有什么办法可以改善这一点吗?PS1。我不知道预先分配结果字符串的大小。PS2。由于项目本身的复杂性

c++ - 在 Visual Studio 中发布版本仍然更慢?

当然,Debug构建比Release构建慢。但是,当我在Release模式下构建时,应用程序从资源管理器手动启动时的性能比从VisualStudio中启动时要好得多。例如,在我的项目中,文件系统访问需要大约10倍的时间。由于是同一个可执行文件,我认为它应该运行相同的指令。为什么从VisualStudio内部启动的Release构建如此缓慢?我怎样才能获得完整的原生速度? 最佳答案 我认为区别在于堆。MSDN说:调试器创建的进程(也称为派生进程)的行为与调试器未创建的进程略有不同。调试器创建的进程不使用标准堆API,而是使用特殊的调试

c++ - Matlab 仍然比 C++ 中的 opencv 慢吗

根据这个link还有这个one,据说opencv比matlab快多了。第一个链接写于2012年3月,第二个链接比那个晚一点。在第一个链接中,它说,“用OpenCV编写的程序比用Matlab编写的类似程序运行得快得多。”并评价Matlab:2/10和OpenCV:9/10考虑一下,我有两个floatMatrix,它们的大小是1024*1024(ma​​t1和ma​​t2)。我想关联这个矩阵。在matlab中,corr2(mat1,mat2);//70-75ms在opencv、c++中Matresult(1,1,CV_32F);matchTemplate(mat1,mat2,result,

c++ - 如何加速 dijkstra 单源、单目标回溯?

我正在尝试解决ADijkstra问题Alpha#20ProbC并在Case31上获得TLE,它有100000节点和99999边。我假设我的代码的复杂度为O(ElgV),大约为499995。我认为它足够快,但由于结果不成功,我通过使用内联代码进行回溯和一些优化(例如在目标节点从队列中删除后立即中断dijkstra)来加快速度。我认为这不会影响结果,就像删除一个节点一样,这意味着找到了最佳路径,我们可以继续享受了。我现在已经没有优化此代码的想法,因此来到这里。代码如下:#include#include#include#include#include#includeusingnamespac

c++ - 发布版本中成员函数和全局函数的性能差异

我实现了两个函数来执行两个Vector(不是std::vector)的叉积,一个是成员函数,另一个是全局函数,这里是关键代码(其他部分省略)//formemberfunctiontemplateSquareMatrixVector::outerProduct(constVector&vec3)const{SquareMatrixresult;for(unsignedinti=0;ivoidouterProduct(constVector&v1,constVector&v2,SquareMatrix&m){for(unsignedinti=0;i它们几乎相同,只是一个是有返回值的成员函数