integer - gdb 将 __m256i 打印为 8x 32 位元素而不是默认的 4x 64 位元素?

标签 integer gdb intrinsics avx

我使用 gdb 调试通过 immintrin.h header 使用 AVX2 内部函数的程序。

使用 gdb,我可以毫无问题地打印出 __m256 值,如下所示:

>>> print scl8
$4 = {[0] = 0.0078125, [1] = 0.0078125, [2] = 0.0078125, [3] = 0.0078125, [4] = 0.0078125, [5] = 0.0078125, [6] = 0.0078125, [7] = 0.0078125}

在此特定示例中,所有 8 条泳道都包含值 1/128。 并注意 gdb 打印出所有 8 个 channel !

如果我想打印出 __m256i 值的 epi32 值,就会出错:

>>> print msk8
$6 = {[0] = 4294967297, [1] = 4294967297, [2] = 4294967297, [3] = 4294967297}

为什么 gdb 会为 __m256i 打印 4 条 channel (我假设是 64 位整数),而为 __m256 值打印 8 条 32 位 float channel ?这里的一致性在哪里?

如何使用 gdb 从 __m256i 打印 8 个 epi32 值?

$ gdb --version
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git

最佳答案

我还没有找到更简单的解决方案,但您可以将您的值转换为 __v8si,即 (__v8si) ones 将打印 8 个 channel 。

因此可能 watch 表达式、调试器控制台或保留未使用的变量(将在发布版本中优化)有助于调试。

我希望看到一些可以放在调试版本中的属性或注释,这会影响 GDB。

关于integer - gdb 将 __m256i 打印为 8x 32 位元素而不是默认的 4x 64 位元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62399455/

相关文章:

floating-point - 如何在 Elm 中将 Float 转换为 Int?

c - 沉默 gdb "switching to thread"输出消息

c - ARM NEON 内部函数 : Limit values of a vector to 0-255

mysql - 在 MySQL 中使用 INT(1) 和 TINYINT(1) 有区别吗?

c - 如何从整数创建时间字符串

c - 快速整数标准偏差?

c++ - gdb 在 Windows 中无法正常工作

objective-c - Xcode 警告 : could not open OSO file

c++ - __m128 何时在 xmm 寄存器中?

c - 给定一个 int 偏移量 vector ,如何使用 AVX512 内部函数收集单个字节?