问题标签 [altivec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
108 浏览

c++ - 如何在不使用复合文字的情况下从标量初始化 AltiVec 寄存器

我有一些这样的代码

当我编译它时,GCC 警告说“ISO C++ 禁止复合文字”。__vector有没有其他方法可以在没有此构造的情况下从多个标量初始化 AltiVec ?或者我应该忽略警告。

我发现一些 IBM 文档表明(__vector unsigned int)(B[0], B[1], B[2], B[3])(注意括号而不是括号)可以工作,但 GCC 拒绝了这一点。

我能想到的唯一另一件事是首先将四个标量放入一个数组中,然后从内存中加载它。但是,这似乎会比较慢。我基本上是在寻找 SSE2 的_mm_set_epi32内在函数。

0 投票
0 回答
115 浏览

aix - “-qaltivec”与“-qarch=pwr5”不兼容

我无法理解来自 IBM XL C/C++ 的警告。我正在编译农场的 GCC119 上工作,这是一台 AIX ppc64-be 机器。

编译它会导致:

删除-qarch并不能解决问题,因为编译器默认为-qarch=pwr4.

我只在使用 XLC 编译器的 AIX 机器上看到这个问题。GCC 在同一台机器上没问题。我用于测试的另外两台机器都可以。事实上,AIX 机器是 S822,运行 Linux 并安装 XLC 的相同 S822 是可以的。

有什么问题,我该如何解决?为什么我们不能在带有 XLC 的 AIX 上使用 Altivec 和 POWER5?

0 投票
0 回答
37 浏览

altivec - 32 位 altivec 代码可以在 64 位机器上工作吗

我正在将 altivec 代码从 PPC 移植到英特尔架构。当前的 altivec 代码是 32 位的。我的 Intel CPU 是 64 位的。

  1. 32 位编译代码会在 64 位机器上运行吗?
  2. 可以为 64 位机器编译 32 位 Altivec 代码吗?

谢谢

0 投票
1 回答
1043 浏览

c++ - 错误:操作数超出范围(64 不在 0 和 31 之间)

我在 PowerPC 上遇到 GCC 内联汇编。该程序可以正常编译-g2 -O3,但无法编译-g3 -O0。问题是,我需要在调试器下观察它,所以我需要没有优化的符号。

这是程序:

这是错误。(自从使用内联汇编替换 PowerPC vec_xl_be以来,该错误一直存在,但直到现在我都可以忽略它)。

我相信这是 *.s 列表中的痛处:

使用时报告了一些类似的问题lwz,但我没有找到讨论问题的人lxvd2x

有什么问题,我该如何解决?


这是文件的头部*.s


这是生成的代码-O3

0 投票
2 回答
161 浏览

clang - Clang 相当于 GCC 的 __builtin_darn()

我试图在 Power9 上发现 Clang 等效于GCC 。__builtin_darn()Grepping Clang 7.0 的源代码看起来 LLVM 支持它:

但是,我看不到内置:

什么是 GCC 的 Clang 等价物__builtin_darn()

0 投票
1 回答
510 浏览

gcc - 错误:匹配约束在输出操作数中无效

我无法让 GCC 内联汇编器接受一些 Power9 的内联汇编。

我试图让 GCC 接受的常规程序集是darn 3, 1, where 3isr3和is文档中1调用的参数。L它在 big-endian 上反汇编为:

在小端上:

由于各种原因和问题,包括旧的编译器和冒充其他编译器的编译器,我想为指令发出字节码。我的测试程序:

编译它会导致:

这是应该涵盖它的 GCC 内联汇编手册的部分,但我没有看到它解释:6.45.2.3 Output Operands。我还检查了简单和机器约束,但没有看到。

我如何告诉 GCC 执行指令,然后r3进入y


我们在 x86 上使用rdrand. 它在所有版本的 GCC 上都可以正常工作,回到 2.9:

0 投票
1 回答
295 浏览

sse - 检查比较结果的多个向量中的每个向量中至少有一个元素为真 - 水平 OR 然后 AND

我正在寻找相同向量的分量之间的 SSE 按位或。(编者注:这可能是一个 XY 问题,请参阅下面的真实比较逻辑。)

我正在从SPU内在函数移植一些 SIMD 逻辑。它有一个指令

根据文档

spu_orx: OR word across d = spu_orx(a) 向量a的四个字元素进行逻辑或。结果在向量 d 的单词元素 0 中返回。d 的所有其他元素 (1,2,3) 都分配为零值。

我如何使用涉及最少指导的 SSE 2 - 4 做到这一点?_mm_or_ps是我在这里得到的。

更新:

以下是基于 SPU 的代码的场景:

因此,它首先对两个“更大”的比较进行 OR,然后对其结果进行 OR。这些结果中的后几对进行与运算以获得最终的比较值。

(A||B||C||D||E||F||G||H) && (I||J||K||L||M||N||O||P) && ...在 A..D 是 4x 32 位元素的情况下有效fcgt(x,y),依此类推。

显然,垂直_mm_or_ps_mm_cmp_ps结果是减少到 1 个向量的好方法,但是然后呢?Shuffle + OR,还是别的什么?

更新 1

关于“但是然后呢?” 我表演

在 SPU 上是这样的:

在不同的输入上多次,然后将它们全部合成一个结果,最后将其转换为整数 0 或 1(假/真测试)

0 投票
1 回答
155 浏览

simd - 电源上的 SIMD 扩展:编译器标志和处理器支持

我正在研究将 SIMD 之上的通用抽象库移植到电源架构中。

但是,关于哪些扩展支持哪些功能以及如何编译到它们的信息令人困惑。目前只关注 64 位处理器并且不超过 power-7。

一方面我看到了这个文件

指令有 3 种类型:无要求、需要 8 次方和需要 9 次方。

例如vec_cmpgt没有特殊要求。

但是,当我使用时,powerpc64-linux-gnu-g++-10我看到一个错误:

在其他一些地方,我可以找到有关vmxvsx扩展的信息,但也不清楚对应于哪些功率迭代。例如,这里谈到了 power-7 上的 vsx。

UPD:我错过了 64 位整数比较仅在 power8 上可用,但其他人在此之前。

0 投票
2 回答
97 浏览

c++ - 在 C++ 中使用 AltiVec SIMD 向量类型的编译错误

以下是代码:

错误是:error: invalid types 'vector int[int]' for array subscript

当我尝试时问题仍然存在 add = v_add[0];

请解释这个问题的原因。我正在使用 gnu 版本 3.3.2