Accelerate Framework可以基于单独的索引数组聚合数组值吗?

时间:2014-11-26 00:51:28

标签: ios arrays optimization accelerate-framework vdsp

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

  • invoice[0..n],包含发票金额的双打数组

  • 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, ...]

我浏览了文档,但它似乎没有这个功能,但是,因为我是新手,所以可能会有一些我不知道的技巧。

1 个答案:

答案 0 :(得分:1)

你有没有尝试过类似的东西:

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单独提供更好的结果 - 因为这是编译器在后台做的事情...而且可能是优化比我们更好....

编译器优化:项目 - &gt;构建设置 - &gt;优化级别 - &gt;将调试和发布更改为&#34; -Os&#34;。

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

如果它仍然很慢,我会尝试加速框架中的vDSP:

Accelerate Framework API

我认为你在任何矩阵计算中遇到的问题是你有一个可变的步幅,所以你不能使用像vDSP_sve这样的东西。

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

希望其中一些有用。