如何在不触发向量化代码中的未定义行为的情况下执行越界读取?

问题描述 投票:0回答:0

在编写向量化代码时,有时会希望执行内存对齐操作。

所以假设我有一个

unsigned char[]
在 16 字节边界之前结束,但我想一次加载整个 16 字节对齐的块(然后大概屏蔽掉我不需要的数据)。

在不触发未定义行为的情况下跨 Clang、MSVC 和 GCC 执行此操作的正确方法是什么?

(我们不要假设任何特定的向量类型或操作 - 我希望方法对未对齐的

__m256i
和未对齐的
unsigned int
一样有效。)

注意:我不是在问这是否/何时有用或合法。我已经知道这些问题的答案了。当我们已经知道它在硬件级别有用且合法但在语言级别非法时,我在问如何在这 3 个主流编译器上执行此操作。

c++ undefined-behavior simd
© www.soinside.com 2019 - 2024. All rights reserved.