altivec

    2热度

    1回答

    我想确定何时激活一些Altivec代码路径。当我检查-qaltivec生效时的预处理器宏时,我看不到相应的预处理器宏(请参见下文)。 我们担心或恐惧的是需要-qaltivec和-DALTIVEC=1或类似的。用户几乎从不阅读手册,因此会为该平台生成无尽的问题和错误报告。如果RTFM能够发挥作用,那么在过去的50年左右就会发生。 当-qaltivec有效时,XL/C信号Altivec是否有效?如果不

    1热度

    1回答

    我试图将一些ARM NEON代码移植到AltiVec。我们的NEON代码有两个LOAD,一个ROT,一个XOR和一个存储,所以它看起来像一个简单的测试案例。根据IBM的vec_rl文档: 结果的每个元素都是通过将左边的相应元素旋转b的相应元素指定的位数获得的。 该文档继续说vector unsigned int是,除非-qarch=power8最大的数据类型,在这种情况下vector unsign

    2热度

    3回答

    我试图在PPC64-LE上编译源文件。我正在使用xlC编译器,编译失败。海湾合作委员会接受该计划,所以我不确定问题的原因是什么。 这里的命令行: $ xlc test-p8.c -qarch=pwr8 -qaltivec -o test-p8.exe 这里的编译错误: "test-p8.c", line 113.52: 1506-324 (S) "int" cannot be converte

    0热度

    1回答

    我一直在使用altivec实现基本的数学运算,作为学习即将到来的项目的simd的一种方式。此外,为了看到它的性能优势,我追踪了执行操作需要多长时间,但我遇到了一些奇怪的事情。 我做的第一件事是将两个向量加在一起并减去两个向量。这工作正常。接下来我做的是将两个向量放在一起。然而,乘法比加法更快,即使使用较少的时钟周期来增加经文的乘积,这取决于我的特定CPU数据表中关于所用指令的说法。 我有两个数组,

    0热度

    1回答

    我正在使用内置的C/C++工作。我需要指令lvd2x将未对齐的数据加载到VMX寄存器中。 Power7和Power8处理器上可以看到lvd2x。 GCC提供vec_vsx_ld内置执行任务。据IBM XL C/C++ for Linux, V13.1.5,第4章,增强在13.1.4版本中增加: 新的内置功能 下GCC载体的内置功能的支持: vec_vsx_ld ... 该代码对于XL C来说是保护

    5热度

    1回答

    我们在几个地方对一个向量进行排列,我们需要使用内置的vec_perm来区分0值。我们一直无法找到vec_zero()或类似的东西,所以我们想知道我们应该如何处理。 该代码目前使用两种策略。第一个策略是一个载体负载: __attribute__((aligned(16))) static const uint8_t z[16] = { 0,0,0,0, 0,0,0,0, 0,0,0,0,

    0热度

    2回答

    我正在使用AltiVec编程接口进行项目工作。 在一个地方,我想从一个向量寄存器8个字节存储到缓冲器中。 在SSE,我们有一个固有_mm_storel_epi64到低8个字节SIMD寄存器的存储到缓冲器中。 上的AltiVec执行8字节存储任何想法?

    1热度

    2回答

    请原谅我对以下问题的无知。我们支持GCC 4.8(及以上)和IBM XL C/C++ 12(及以上)。我们还在AIX和Linux上支持big和little-endian。编译器和平台使代码相当混乱。 我们希望将常量1加载到VSX寄存器中。这是我们已经能够制作的代码,但它似乎是错误的,因为它非常复杂。宏XLC_VERSION,GCC_VERSION和LITTLE_ENDIAN具有它们的习惯含义,所以

    1热度

    1回答

    我试图追查Power8 Power8上运行时的endianess问题。大端是可以的,小端有一些麻烦。 低于uint8x16_p8是typedef对于__vector unsigned char。在大端机器,我看到: 1110 uint8x16_p8 r5 = (uint8x16_p8)VectorLoadKey(s_mask); (gdb) 1112 for (unsigned int i

    2热度

    1回答

    我试图移植一个SSE函数,它可以得到两个8位无符号整数数组的绝对差值。 它看起来像: uint64_t AbsDiffSum(const uint8_t * a, const uint8_t * b, size_t size) { assert(size%16 == 0); __m128i _sum = _mm_setzero_si128(); for(size_t