c - 在 C 中添加两个 float 组的有效方法?

标签 c performance audio

我的 macOS 音频应用程序使用 for 循环添加两个 float 组。当 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];
}

最佳答案

你可以做的最重要的技巧:如果这些数组实际上是指针并且你将它们传递给一个函数,一定要限制-限定和指针,如果它确实应该指向一个独立于 2 的数组:

void do_sum(size_t size,
            float * restrict sum,
            float * array1,
            float * array2)

或带有尺寸提示

void do_sum(size_t size,
            float sum[restrict static size],
            float array1[static size],
            float array2[static size])

这将使编译器能够生成更高效的代码,因为它保证 array1[n]array2[n] 都不能访问与sum[k] 用于函数中使用的任何 nk

在 Godbolt 上亲自体验差异:with restrictwithout

关于c - 在 C 中添加两个 float 组的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152779/

相关文章:

c# - 获取.MP4文件中的音频和视频流计数及其属性

c - 使用 C 在 OpenMP 中执行后合并要打印的数据

c - 将浮点值打印到控制台精度问题_

创建数据包时编译错误

java - 使用 Java jna 和 FFTW3 包装器获取 malloc 错误

JavaScript - 按值和最多两个级别对数组进行分组

javascript - 对服务器的更大请求与客户端上的更多 javascript

matlab - 在Matlab中以+ 30dB播放声音

c++ - 尝试在 PortMidi 中打开输入

ajax - 如何在没有 JSF 标记库的情况下编写 <table> 标记 (h :datatable or ui:repeat) but still use JSF for controlling page flow