草庐IT

OPTIMIZATION

全部标签

c++ - 寻找一种良好的空间分区数据结构以从中快速生成数百万个原子键

我正在执行一些涉及数百万原子系统的MD模拟。我已经编写了一些代码来生成一个文件,该文件只是一个XYZ原子坐标列表。现在我需要在原子之间生成键。如果两个原子彼此之间的距离在一定范围内,则认为是键。示例XYZ文件:1002007001000900所以我有五个原子。如果我的距离阈值是2个单位,那么我的债券list将是:123545(其中数字对应于XYZ文件中坐标的索引)。生成这个列表的简单方法是:fori=1:numAtomsforj=i+1:numAtomsifdistance(atom[i],atom[j])但是,这很快就会达到算法极限,即使在针对数百万个原子高度优化的C语言中,速度也很

c++ - 是否允许 C++ 编译器优化未引用的本地对象

我使用以下类在某个函数的开头自动设置等待光标,并在函数返回时重置光标。classWaitCursorSetter{public:WaitCursorSetter(){QApplication::setOverrideCursor(Qt::WaitCursor);}virtual~WaitCursorSetter(){QApplication::restoreOverrideCursor();}};我在函数开始时创建一个本地WaitCursorSetter对象。由于在对象的析构函数中重置了等待游标,因此我不必在方法中的每个返回语句之前重置游标,因为当函数返回并且对象超出范围时会调用析构函

c++ - 如何使用#pragma 在 G++ 中启用优化

我想在没有命令行参数的情况下在g++中启用优化。我知道GCC可以通过在我的代码中编写#pragmaGCCoptimize(2)来做到这一点。但它似乎不适用于G++。此页面可能有帮助:http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html我的编译器版本:$g++--versiong++(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1$gcc--versiongcc(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1我写了一些这样的代码:#pragmaGCCoptim

c++ - 内联函数指针以避免 if 语句

在我的jpg解码器中,我有一个带有if语句的循环,该语句将始终为真或始终为假,具体取决于图像。我可以创建两个单独的函数来避免if语句,但出于好奇我想知道使用函数指针而不是if语句对效率有什么影响。如果为真,它将指向内联函数;如果为假,它将指向一个空的内联函数。classjpg{private://emtpyfunctionvoidinlinenothing();//realfunctionvoidinlinefunction();//pointertoinlinefunctionvoid(jpg::*functionptr)()=nullptr;}jpg::nothing(){}mai

c++ - 自动查找给定机器上最快的 exe 的编译器选项?

是否有一种方法可以自动找到最佳的编译器选项(在给定的机器上),从而产生最快的可执行文件?当然,我使用g++-O3,但是还有一些额外的标志可以使代码运行得更快,例如-ffast-math和其他一些,其中一些依赖于硬件。有谁知道我可以放入我的configure.ac中的一些代码文件(GNUautotools),以便标志将由./configure自动添加到Makefile中命令?除了自动确定最佳标志外,我还对一些有用的编译器标志感兴趣,这些标志适合用作大多数优化可执行文件的默认值。更新:大多数人建议只尝试不同的标志并根据经验选择最佳的。对于该方法,我有一个后续问题:是否有一个实用程序列出了我

C++ - 如何有效地找出 vector 中的任何字符串是否可以从一组字母中组装出来

我正在为一个大学项目实现基于文本的拼字游戏。我有一个包含大约40万个字符串的vector(我的字典),并且在每个回合的某个时刻,我将不得不检查字典中是否还有一个可以用玩家手中的棋子。我正在检查玩家是否还有任何移动...如果没有,则有问题的玩家游戏结束...对此,我唯一的解决方案是逐一遍历字符串,并使用子例程检查所讨论的字符串是否可以由玩家的棋子组成。我将实现快速失败检查用户是否有任何元音字母,但它仍然非常低效。包含字典的文本文件已经按字母顺序排列,因此vector已排序。有什么建议吗?下面的评论中提出了一个问题:关于如何考虑板上已经存在的字母有什么建议吗?

c++ - 使用 C++ 在 NxN 数组中查找 M 个最大元素的优化方法

我需要一种快速的方法来找到NxN数组中M个最大元素的二维位置和值。现在我正在这样做:structSourcePoint{Pointpoint;floatvalue;}SourcePoint*maxValues=newSourcePoint[M];maxCoefficients=newSourcePoint*[for(intj=0;jmaxValues[0].value){intq=1;while(sample>maxValues[q].value&&qPoint结构只是两个整数-x和y。此代码基本上对传入的值进行插入排序。maxValues[0]始终包含具有最低值的SourcePoin

c++ - 在 C++ 中不能内联虚函数总是正确的吗?

据说虚函数不能内联。如果一个函数被声明为虚函数,它就不能在代码中的任何地方内联,或者它是否只适用于某些情况,这是否总是正确的?(例如,从基指针调用方法与在引用上调用方法等) 最佳答案 不,虚函数确实可以内联。虚拟分派(dispatch)仅在以多态方式调用虚拟方法时使用(即,在指针或对对象的引用上)。但是,当在对象value上调用虚拟方法时,不会使用虚拟分派(dispatch),编译器可以根据需要自由内联。 关于c++-在C++中不能内联虚函数总是正确的吗?,我们在StackOverflo

c++ - 优化此功能(在 C++ 中)

我有一个消耗CPU的代码,其中一些带有循环的函数被执行了很多次。此循环中的每一次优化都会带来显着的性能提升。问题:你会如何优化这个循环(虽然没有太多要优化的......)?voidtheloop(int64_tin[],int64_tout[],size_tN){for(uint32_ti=0;imax)max=v;out[i]=max;}}我尝试了一些东西,例如我用在每个循环中递增的指针替换数组,但(令人惊讶的是)我失去了一些性能而不是获得...编辑:更改了一个变量的名称(itsMaximums,错误)函数是类的一个方法in和put是int64_t,所以是negative和posit

c++ - 在 AVR 中逻辑右移 2 次方的速度更快吗?

我想知道在按2的幂移动时执行逻辑右移是否更快例如,是myUnsigned>>4任何快于myUnsigned>>3我很感激每个人的第一react都是告诉我,人们不应该担心像这样的小事,它正在使用正确的算法和集合来削减重要的数量级。我完全同意你的看法,但我真的想尽我所能地从嵌入式芯片(ATMega328)中挤出——我刚刚得到了一个值得“哇哦!”的性能转变。通过用移位替换除法,所以我向你保证这确实很重要。 最佳答案 让我们看一下数据表:http://atmel.com/dyn/resources/prod_documents/8271S.