【发布时间】:2023-03-07 01:57:01
【问题描述】:
我的 macOS 音频应用程序使用 for 循环添加两个浮点数组。当size 很大时,有没有更有效的方法?
int size = 5;
float array1[size] = {0.0, 0.1, 0.2, 0.3, 0.4};
float array2[size] = {0.5, 0.6, 0.7, 0.8, 0.9};
float sum[size];
for (int i = 0; i < size; i ++)
{
sum[i] = array1[i] + array2[i];
}
【问题讨论】:
-
你有一个非常奇怪的数组索引,你知道吗?
-
哎呀,你完全正确。我应该编辑它。在我的应用程序中,我正在处理指针和 memcpy,这就是我采用这种方式的原因。我会编辑它。
-
Here's a discussion on how to optimize this kind of code using SIMD. 底线:您只需要使用正确的编译器选项,然后让优化器完成工作。
-
这样的优化很大程度上取决于环境。你的目标是什么处理器?程序还围绕这个做什么——它是否对这些相同的数据进行其他操作?数组有多大?现代处理器通常具有快速添加阵列的功能,但如何以及是否使用它们取决于具体情况。非便携式解决方案是否可接受,例如使用英特尔 AVX 指令的解决方案?使用编译器扩展可以吗?你的编译器会自动向量化循环吗?
-
@EricPostpischil 这是专门针对 macOS 的。所以英特尔酷睿 i5 和 i7s。数组大小最大为 524,288。我正在执行的唯一操作是总和。我不确定其他的东西,因为我以前从未深入过。
标签: c performance audio