cost 430 ms
GCC(不是 clang)如何使这种优化决定一个结构成员的存储不能影响另一个成员的成员?

[英]How does GCC (not clang) make this optimization deciding that a store to one struct member couldn't affect a member of another?

这是有问题的代码: clang-14 -O3 产生: gcc 11.2 -O3 产生几乎相同的结果,但遗漏了一个mov : Clang读取D字段两次,而GCC只读取一次并重新使用。 显然 GCC 并不害怕第一个赋值改变任何对第二个赋值有影响的东西。 我试图了解是否/何时允许这样做。 当 U ...

为什么 mod 2^n 对有符号数使用 CLTD 指令

[英]Why does mod 2^n use CLTD instruction for signed numbers

所以我知道当你对无符号运算执行x mod 2^n时,编译器只会将该运算转换为x & (2^n - 1) 。 但是当我查看使用带符号数的编译器实现时,例如 我得到这样的东西( https://godbolt.org/z/xY3Ef6WEc ): 这背后的逻辑是什么? ...

流水线处理器如何处理过度展开的循环?

[英]How does a pipelined processor handle excessively unrolled loops?

认为 被编译器展开成看起来像的东西 如果循环展开超出它们应该展开的范围会怎样? 例如,如果N为 101,则i将在某个时刻为 100,但索引 101、102、103 超出了数组的边界。 也许我们希望在展开和像正常情况一样计算循环结束时保持保守——但即便如此,如果在运行时确定迭代次数,那么对循环可以展 ...

按位异或运算和弹出计数的 AVX 性能较慢

[英]AVX performance slower for bitwise xor op and popcount

我不熟悉编写一些基于 avx 内在函数的代码,因此需要一些帮助来理解我的观察结果是否符合预期。 我有两种实现距离计算的方法,这两种方法都采用 2 个浮点数 arrays 及其维度并返回一个浮点距离。 第一种方法计算欧氏距离 第二种方法计算按位异或,然后计算 1 的个数,即汉明距离 对于相同的位数,l ...

为什么需要 Data.Text.Lazy? 编译器优化器不能生成惰性结构的严格块吗?

[英]Why is Data.Text.Lazy needed? Couldn't strict chunks of a lazy structure be made by a compiler optimizer?

我想知道 Haskell 编译器优化器是否通常不能将较大的惰性数据结构拆分为较小的严格块以获得更高性能的程序。 例如,通过Data.Text.Lazy我们做出相同的行为。 较大的惰性结构中严格的Data.Text块。 如果这种优化是可能的,我们是否可以只使用String而不是具有相同性能并使代码更 ...

为什么在 in 和 out 上具有相同数据结构(相同暗淡)的组合自递归函数不与其他递归一起内联?

[英]Why aren't composed self-recursive functions with same data structure (same dims) on in and out inlined together with other recursions?

tutorial https://markkarpov.com/tutorial/ghc-optimization-and-fusion.html#fusion-without-rewrite-rules中的代码示例,不会被fusion优化。 我的问题是:为什么 function foldr0 ...

为什么 NVCC 不针对文字优化 ceilf()?

[英]Why does NVCC not optimize away ceilf() for literals?

(编译时上限 function 的后续问题,对于文字,在 C 中? ) 考虑以下 CUDA function: 应该很容易对其进行优化以生成一个只返回 1008 的设备 function: 但相反,它将(使用 NVCC 11.5)编译成更昂贵的: 如果代码是: 作为优化机会,编译器应该更容易“注 ...

是否有 gcc 的 `__attribute__((hot))` 的 clang 模拟

[英]Is there a clang analogue of gcc's `__attribute__((hot))`

我希望标记 function 以进行更积极的优化。 function 不经常调用,因此 PGO 无济于事,但我仍然希望它的延迟尽可能低。 gcc为此具有hot属性。 我缺少一些 clang 等价物吗? 顺便说一句 clang 确实接受__attribute__((hot)) ,但 AFAICT ...

为什么 GCC 分配的堆栈 memory 比需要的多?

[英]Why does GCC allocate more stack memory than needed?

我正在阅读“计算机系统:程序员的视角,3/E”(CS:APP3e),以下代码是书中的一个示例: 书中给出了GCC生成的汇编代码: 我可以理解这段代码:编译器在堆栈上分配了 32 个字节的空间,其中前 16 个字节保存了传递给proc的 arguments,最后 16 个字节保存了 4 个局部变量。 ...

当被除数为 64 位且商为 32 位时,如何使 gcc 或 clang 使用 64 位/32 位除法而不是 128 位/64 位除法?

[英]How to make gcc or clang use 64-bit/32-bit division instead of 128-bit/64-bit division when the dividend is 64-bit and the quotient is 32-bit?

目前,通过研究和各种尝试,我很确定解决这个问题的唯一方法是使用汇编。 我发布这个问题是为了显示一个现有的问题,并且可能会引起编译器开发人员的注意,或者从有关类似问题的搜索中获得一些点击。 如果将来有任何变化,我会接受它作为答案。 这是一个与 MSVC 非常相关的问题。 在x86_64机器中,使用 ...

Clang 在加载字节时不会将高位归零。 这是一个错误还是一个故意的选择?

[英]Clang does not zero the upper bits when loading a byte. Is this a bug or a deliberate choice?

例如,对于这个 function, gcc生产, 虽然我不明白它为什么要填充dx和ax ,但这是来自clang 。 它不会像gcc这样看似不必要的mov ,但它也不关心使用movzx清除高位。 据我所知, gcc做movzx的原因是为了去除脏高位的错误依赖,但也许clang也有不做的原因,所以我 ...

遗传算法是否通过将种群基因初始化为已知更好的解决方案来更快地搜索?

[英]Does Genetic Algorithm search faster by initializing the gene of population to known better solution?

如果对我的情况有更好的解决方案,是否会通过将它们添加到我的基因中来初始化种群来加快搜索时间? 长问题: 我想通过遗传算法解决编译器阶段排序问题。 但是当我运行别人写的代码时,寻找解决方案的时间太长了。 现在,我知道 O1、O2、O3 的传球。 如果我用这些来初始化基因,它会加快搜索速度吗? ...

-mavx2 打开时为 __builtin_popcnt 生成的臃肿代码

[英]Bloated code generated for __builtin_popcnt when -mavx2 is on

对于这样的 function, clang (有时gcc在某些情况下我无法最低限度地重现)似乎会在-mavx2开关打开时生成臃肿的代码。 这是来自gcc并且非常简单。 然而clang决定在-mavx2开启时产生这种巨大的膨胀。 -mpopcnt也被设置。 clang的代码类似于gcc仅-mpop ...

C# 编译器是否重新排序 File-IO 指令?

[英]Does the C# compiler reorder File-IO instructions?

我有以下 C# 算法用于配置文件写回: 它是这样工作的: 原来的 File.txt 被重命名为 File.backup。 新的 File.txt 被写入。 File.backup 被删除。 这样,如果在写入操作期间发生断电,仍然存在完整的备份文件。 备份文件只有在写操作完成后才会被删除。 读取过 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM