gpt4 book ai didi

iOS - Accelerate.framework 中矩阵的逐元素条件边界

转载 作者:行者123 更新时间:2023-11-29 02:49:01 27 4
gpt4 key购买 nike

在我的 iOS 代码中,我有一个矩阵 (float *) 变量,如下所示:

[ 1 2 3 4
5 6 7 8
9 0 1 2 ]

我需要构建一个矩阵,其中所有元素的 1 等于某个值(例如 2),并且 0 用于其他所有内容。所以输出将是:

[ 0 1 0 0
0 0 0 0
0 0 0 1 ]

我已经搜索了 vDSP 文档一段时间,但我一直无法找到实现此目的的方法。我找到了 vDSP_vclip() 方法,但它看起来会使上下限值(2)等于2。不完全是我要找的东西。

有谁知道如何使用 iOS 中的 Accelerate.framework 实现这一点? 如果我是对的,没有直接的方法为此,但是是否可以结合其他方法来完成同样的事情?

非常感谢任何建议!我完全被困在这里。

最佳答案

如果您使用的是 Xcode 6 beta,clang 自动矢量化器将为该操作生成良好(但不完美)的矢量代码。它不会像 Accelerate 调用那样高效,但没有一个 Accelerate 函数可以满足您的需求。

#include <stddef.h>

void findTwos(float * restrict matrix, float * restrict ones, size_t n) {
for (size_t i=0; i<n; ++i) { ones[i] = matrix[i] == 2.0f; }
}

使用 -Ofast-O3-O2 编译会在我的测试中生成不错的矢量代码(在 arm64 和 x86_64 上)。如果矩阵的大小在编译时已知,则将可变大小参数 n 替换为恒定长度也会导致 -Os 处的矢量化。

如果这仍然不够快,您可以随时编写自己的 simd 代码 =)

关于iOS - Accelerate.framework 中矩阵的逐元素条件边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com