compiler-optimization相关内容

AVX性能对于按位XOR运算和POP计数较慢

我对编写一些基于AVX内部函数的代码是新手,所以需要一些帮助来理解我的观察结果。我有两个实现距离计算的方法,这两个方法都接受2个浮点数组及其维度,并返回一个浮点距离。第一种方法计算欧几里得距离 static float compute_l2Square(const void *pVect1v, const void *pVect2v, const void *qty_ptr) ..
发布时间:2022-08-17 19:03:27 其他开发

C/C++中高效的溢出免疫算术平均值

两个无符号整数的算术平均值定义为: mean = (a+b)/2 在C/C++中直接实现它可能会溢出并产生错误的结果。正确的实现可以避免这种情况。一种编码方式可能是: mean = a/2 + b/2 + (a%2 + b%2)/2 但这会使用典型的编译器生成相当多的代码。在汇编程序中,这通常可以更高效地完成。例如,x86可以通过以下方式做到这一点(汇编伪代码,我希望您明白这一 ..
发布时间:2022-08-17 18:57:39 C/C++开发

使用NumPy对uint16和uint64阵列求和时没有加速?

我必须对相对较小的整数进行大量的运算(加法),我开始考虑哪种数据类型在64位计算机上性能最好。 我确信,将4uint16加在一起将花费与uint64相同的时间,因为ALU只使用1uint64加法器就可以进行4uint16加法。(进位传播意味着这对于单个64位加法器来说不是那么容易工作,但这就是整数SIMD指令的工作方式。) 显然不是这样的: In [3]: data = np.ran ..
发布时间:2022-08-17 18:47:02 Python

如何使用objump将源代码交织到高度优化的目标文件中?

我得到了一个高度优化的编译的C++目标文件(用g++编译,指定-O3 -g -march=amdfam10 -Wall),带有调试信息。 我正在使用objdump -S "objname"。 不幸的是,交错源代码似乎不起作用,因为有时我看到同一组行(不只是一行)多次重复,而且不只是一个代码行,而是多个代码行,然后是只一条装配线,然后是其他四分之三的源代码行,没有太大意义。 例如,我看 ..
发布时间:2022-07-21 19:35:07 C/C++开发

VSCode禁用Arduino编译优化以进行调试

使用默认的VSCode Arduino配置,编译器将生成的代码优化为完全优化的,因此使用Cortex-Debug进行调试几乎是不可能的,因为代码已优化出来,单步执行到处跳来跳去。 关于如何禁用所有编译器优化有什么建议吗? 推荐答案 我不知道您使用的是什么开发板,我使用的是Adafruit M0 Express。Adafruit已经为他们的大多数SAMD板创建了板配置选项。如果您编 ..
发布时间:2022-07-21 19:26:09 其他开发

在Linux内核中生成和优化文件中的FP/SIMD代码,其中包含KERNEL_FPU_BEGIN()?

我知道禁止在内核中使用任何形式的浮点代码,我们永远不应该使用任何可能生成FP/SIMD指令的GCC标志,但一些使用kernel_fpu_begin()和kernel_fpu_end()的源代码(特别是arch/x86/crypto/*)怎么办? Example 1,example 2。 我有一个老式英特尔酷睿2双核CPU,用于我的64位Linux内核,并且在主要Makefile中我使用 ..

OpenMP的效率与优化级别

我是Open MP的新手,但我已经对此困惑了几天,在网上找不到任何答案。希望这里有人能给我解释一下这个奇怪的现象。 我想比较同一程序的顺序版本和并行版本之间的运行时。当我在GCC-10上用-O或更高级别编译它们时,并行版本的运行速度比顺序版本(~5倍)快得多(但不同级别之间的差异相当小)。 但是,当我使用-O0编译这两个程序时,情况并非如此。事实上,当使用-O0计算这两个版本时,顺序版本甚 ..

函数返回值优化?

我正在编写我自己的编程语言,由于各种原因,它被编译成C语言(其中一个原因是我对汇编几乎一无所知)。 我有一个关于编译器(比如GCC或Clang)如何优化从函数返回值的问题。假设我有这样的代码: int FUNC() { int A = 3; return A; } int main() { int B = FUNC(); } 我的理解是,您希望变量A在从F ..
发布时间:2022-06-12 09:38:45 其他开发

JIT优化浮点问题

背景 所以我用C#做了一个不公平的绞刑的简单游戏(有一个单词列表,这些单词是基于我给玩家的信息(例如,单词长度),这些单词是有效的解决方案,随着时间的推移逐渐缩小,只有当只有一个可能的解决方案并且他们猜到了所有字母时,玩家才会赢)。 无论如何,重要的是要知道我有一行代码,如下所示: availableWords.RemoveAll(word => AmountInCommon(word) ..
发布时间:2022-06-12 09:26:29 C#/.NET

";编译器选项";-aux base-strid有什么作用?

我刚刚使用编译器选项“-fRecords-GCC-Switches”编译了代码,以查看编译器自动选择了哪些选项。现在我可以看到.GCC.command.line部分中的选项。有几个看似合理的编译器选项,但也有一个我找不到任何文档。-auxbase-strip png.o是什么意思。显然,它与png.o有关,但它到底是做什么的? 推荐答案 谷歌搜索shows: Hei Chan: ..
发布时间:2022-06-12 09:15:03 其他开发

可以使用GCC来编译带有特定编译器标志的代码文件的一段吗?

可以使用GCC编译带有特定编译器标志的代码文件的一段吗?例如,假设我有一些正在测试的函数。我希望这些函数严格遵守标准,所以我想用--Pedtic标志来编译它们。但是,执行测试的代码在编译时会发出很多警告。有没有办法只编译那些特定的函数,用--Pedtic? 或者,假设我有一个精心编写但极其昂贵的函数,它需要尽可能快地运行。如何才能只用-Ofast编译该函数(以及其他几个函数),而用-O2或- ..
发布时间:2022-06-11 23:51:36 C/C++开发

Rust会优化掉未使用的函数参数吗?

我有一个 类型的函数 f: fn(x: SomeType, y: Arc) -> ISupposeTheReturnTypeDoesNotMatter 编译时(优化或不优化),y是否会被优化? y的用意是限制f正在运行的实例数量,如果y被引用太多次,f的调用方将不会调用f,直到y的引用计数减少。 编辑:澄清我的意图 目的是控制正在运行的http请求的数量(由上面的 ..
发布时间:2022-06-11 23:45:38 其他开发

为什么我能用GCC做的最小编译可执行文件是67KB?

我想做一个非常小的编译可执行文件,它是用C编写的,但我能设法得到的最小可执行文件是67KB。我用的是MinGW。 我已尝试不使用任何头文件,编译时没有错误: //no header void main() { write(1, "Hello world!", 12); } 如果我构建并运行此程序,GCC没有显示错误,但它也是67KB。 推荐答案 我刚刚在x86_64Linu ..
发布时间:2022-06-11 23:31:13 其他开发

GCC 11.1中对易失性的非一致性优化

在写关于编译器必须如何处理volatile的答案时,我相信我可能无意中发现了GCC的错误,希望有人在我报告它之前进行验证。 我写了一个简单的函数,如下所示: int foo (int a, int b, int c) { b = a + 1; c = b + 1; a = c + 1; return a; } 如果没有优化,这会导致大量毫无意义的数据来回移动。通过优 ..
发布时间:2022-06-11 23:28:01 其他开发