首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >altivec提取向量的一部分?

altivec提取向量的一部分?
EN

Stack Overflow用户
提问于 2013-09-17 05:55:01
回答 1查看 315关注 0票数 1

我正在尝试将一个64位值与一个64位值数组进行比较

R_UINT64 FP;R_UINT64 INPUT20000;

如果数组中的任何元素与FP的值匹配,则返回true。

我必须遍历这个数组并找到匹配的元素,我试图通过一次查看2个元素而不是1个元素来提高效率。

在Altivec中,向量的长度是128位,所以我将把FP的两个副本,两个元素放在向量中(我将它们都截断,每个向量元素两个8位)

到目前为止一切顺利,但现在我遇到了一个问题。我找不到一个VMX过程,它只查看向量的一半,看看是否有匹配,为了返回true,两个值都必须匹配,这不是我要找的。

所以我想知道有没有什么方法可以告诉编译器,我每次只查看向量的一半?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-09-17 06:23:48

也许最好的方法是比较这两个元素,然后使用vec_mergeh/vec_mergel来测试结果的每一半,例如

代码语言:javascript
复制
size_t vec_search_u64(const uint64_t key, const uint64_t array[], const size_t len)
{
    const vector signed int vkey = { key >> 32, key & 0xffffffff, key >> 32, key & 0xffffffff };
    const vector bool int vk1 = { -1, -1, -1, -1 };

    for (i = 0; i < len - 1; i += 2)      // iterate two elements at a time
    {
        vector signed int v = vec_ld(0, (int *)&array[i]);
                                          // load 2 elements
        vector bool int vcmp = vec_cmpeq(v, vkey);
                                          // compare 2 elements with key
        if (vec_all_eq(vec_mergeh(vcmp, vcmp), vk1))
        {                                 // if high element matches
            return i;                     // return match found at element i 
        }
        if (vec_all_eq(vec_mergel(vcmp, vcmp), vk1))
        {                                 // if low element matches
            return i + 1;                 // return match found at element i + 1
        }
    }
    if (i < len)                          // if array size is odd
    {
        if (array[i] == key)              // test last element
        {
            return i;
        }
    }
    return (size_t)(-1);                      // match not found - return suitable value
}

(注意:未经测试的代码-仅用于一般指导-可能需要强制转换和/或实际的错误修复!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18837961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档