【问题标题】:SIMD: Flip sign of four packed integerSIMD:四个压缩整数的翻转符号
【发布时间】:2013-01-13 05:52:08
【问题描述】:

假设我有四个压缩整数。

__m128i val = _mm_set_epi32(42,64,123,456);

翻转val中四个整数的符号(乘以-1)最快的方法是什么?

【问题讨论】:

  • 你的意思是把42变成-42等等?
  • 一旦你已经设置了val,你想这样做吗?我的意思是,您想要一个将val 转换为从相同整数获得的val 的函数,但带有倒号?
  • 你试过从 0 开始分吗?假设您使用的是 mmx 内在函数?
  • @TravisG 编辑,因为您似乎想翻转 sign 而不是翻转 sign bits (这是一个 不同的 事情)
  • @Anton Kovalenko 有什么不同?

标签: c++ simd


【解决方案1】:

只需从 0 中减去,例如

val = _mm_sub_epi32(_mm_set1_epi32(0), val);

【讨论】:

    【解决方案2】:

    您可以从一组{0,0,0,0} [这可能是最快的] 中减去您的实际值,您可以用 {-1,-1,-1,-1} "all one" 进行异或运算,然后添加 {1, 1,1,1}。或者你可以乘以-1。

    【讨论】:

    • 是的,从 0 中减去似乎是最快的。不能轻易乘以 -1,因为我只有 SSE2 可用(没有 mul_epi32),这意味着我必须先创建一个具有 0、-1、0、-1、0、-1 等的 epi16 .
    猜你喜欢
    • 2022-11-22
    • 2023-04-11
    • 2021-07-09
    • 2015-08-12
    • 2021-02-11
    • 2013-09-29
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多