gpt4 book ai didi

Objective-c:将 uint8 数组转换为 int32

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:02 25 4
gpt4 key购买 nike

我正在寻找可以将 uint8 数组快速转换为 int32 数组(保持数字计数)的函数。vDSP库中已经有将uint8转换为double的函数:

vDSP_vfltu8D

如何在 Objective-c(iOS、amd arch)上实现类似的功能?纯 C 解决方案也被接受。

最佳答案

在那种情况下,根据上面的评论:

ARM 的 Neon SIMD/Vector 库正是您要找的,但我不能 100% 确定 iOS 是否支持它。即使是,我也不会推荐它。您在 iOS 上拥有 64 位架构,这意味着您只能将处理速度提高一倍(因为您正在转换为 int32)。

现在如果有一个命令可以做到这一点。没有。有一些命令可以让您在连续使用时将 uint8 加载到 64 位寄存器中,将它们移位并将其他字节归零,然后将它们存储为 int32s。这些命令将有更多的开销,因为它需要几个操作来完成。

如果您真的想查看可用的命令,请在此处查看它们(同样,不确定它们是否在 iOS 上受支持):http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489e/CJAJIIGG.html

iOS 架构并不是真正为这种处理而构建的。在大多数情况下, vector 命令只有在计算机具有 256 位寄存器时才有用,允许您一次加载 32 个字节并同时对其进行操作。我建议您采用在循环中一次转换一个的常规方法(或者解开循环以消除一些开销,如下所示:

//not syntactically correct code
for (int i = 0; i < lengthOfArray; i+=4) {
int32Array[i] = (int32)int8Array[i];
int32Array[i + 1] = (int32)int8Array[i + 1];
int32Array[i + 2] = (int32)int8Array[i + 2];
int32Array[i + 3] = (int32)int8Array[i + 3];
}

虽然这是一个小的优化,但它减少了 3/4 的循环开销。它不会有太大作用,但是,嘿,这很重要。

资料来源:我在英特尔的 SIMD/Vector 团队工作,转换 C 函数以在 256 位寄存器上进行优化。不幸的是,有些事情无法高效完成。

关于Objective-c:将 uint8 数组转换为 int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019534/

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