ios - Accelerate Framework 能否基于单独的索引数组聚合数组值?

标签 ios arrays optimization accelerate-framework vdsp

我正在尝试确定 Accelerate Framework 是否可以帮助加快我的应用程序必须执行的计算。假设我有以下数组:

  • invoice[0..n],包含发票值的 double 组

  • week[0..n],一个整数数组,其中 week[x] 包含一年中的第几周 invoice[ x] 已计费。

每周的发票数量是可变的。我有几万张发票。两个数组都按周排序。

Accelerate 框架有什么方法可以帮助我计算每周收费多少?

因此,例如,如果:

invoice = [10.0, 15.0, 10.0, 25.0, 40.0,   x, ...]
week    = [   0,    0,    0,    1,    1,   2, ...]

结果应该是:[35.0, 65.0, ...]

我浏览了文档,它似乎没有这个功能,但由于我是全新的,所以我可能缺少一些技巧。

最佳答案

你试过类似的东西吗:

Float32 invoices[6] = {10.0, 15.0, 10.0, 25.0, 40.0, 80.0};
UInt8   weeks[6] = {0, 0, 0, 1, 1, 2};
Float32 *weeklyInvoicesAmount = calloc(52,sizeof(Float32));

int weekCounter = 0;
int invoiceCounter = 0;
int weeklyInvoice = 0;


while (weekCounter < 52)
{
    weeklyInvoice = 0;

    while (weeks[invoiceCounter] == weekCounter)
        weeklyInvoice += invoices [invoiceCounter++];

    weeklyInvoicesAmount[weekCounter] = weeklyInvoice;
    printf("Week :%i invoice: %f\n", weekCounter, weeklyInvoicesAmount[weekCounter]);
    ++weekCounter;
}

free(weeklyInvoicesAmount);

现在显然,您需要在阵列设置上做一些工作。

我问你是否尝试过 C 逻辑的原因是因为我通常发现逻辑 C + 编译器优化通常比单独使用 C 提供更好的结果 - 因为这是编译器无论如何在后台做的......并且可能优化比我们更好....

编译器优化:项目 -> build设置 -> 优化级别 -> 将 Debug 和 release 更改为“-Os”。

我会从那开始,并使用不同的优化来测量不同的马赫时间。

如果仍然很慢,我会在 Accelerate 框架中尝试 vDSP:

Accelerate Framework API

我认为您在任何矩阵计算中都会遇到的问题是您的步幅可变,因此您不能使用 vDSP_sve 之类的东西。

Accelerate 框架和矢量数学优化基于能够使用静态数量的元素来填充寄存器并同时进行计算。可变步幅否定了这一点。

希望其中一些有所帮助。

关于ios - Accelerate Framework 能否基于单独的索引数组聚合数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139539/

相关文章:

javascript - Bootstrap 模式上的 4 位数字形式

iphone - 更改静态库的源需要清理并在 xcode 4 中构建

arrays - 如何使用 Perl 组织数据的行和列?

c - Tic Tac Toe 一维数组和我的 'Check_for_win' 函数

sql - 如何使用窗口函数优化 SQL 查询

ios - 创建单元格后是否有对 uitableviewcell 执行动画/移动?

java - 在二维数组上实现 A Star 算法

javascript - 优化 JQuery 中的每个循环

c++ - 有没有一种方法可以针对永久对象优化shared_ptr?

iphone - 如何在 iOS 上的应用程序之间共享值