在AMD处理器上从SSE向量中提取的有效方法

时间:2015-06-09 15:54:38

标签: sse simd amd-processor

我正在寻找一种有效的方法从AMD Piledriver上的__m128i中提取低64位整数。像这样:

static inline int64_t extractlo_64(__m128i x)
{
    int64_t result;
    // extract into result
    return result;
}

Instruction tables说使用_mm_extract_epi64()的常用方法在此处理器上无效。它生成PEXTRQ指令,其延迟为10个周期(与英特尔处理器中的2-3个周期相比)。 有没有更好的方法呢?

2 个答案:

答案 0 :(得分:4)

在x86-64上,您可以使用_mm_cvtsi128_si64,转换为单MOVQ r64, xmm条指令

答案 1 :(得分:1)

一种可能性是使用MOVDQ2Q,其在Piledriver上有2个指令的延迟:

static inline int64_t extractlo_64(const __m128i v)
{
    return _m_to_int64(_mm_movepi64_pi64(v)); // MOVDQ2Q + MOVQ
}