我想知道如何确保我在以下音频代码中利用cpu pipelining:
int sample_count = 100;
// volume array - value to multiply audio sample by
double volume[4][4];
// fill volume array with values here
// audio sample array - really this is 125 samples by 16 channels but smaller here for clarity
double samples[sample_count][4];
// fill samples array with audio samples here
double tmp[4];
for (x=0;x<sample_count;x++) {
tmp[0] = samples[x][0]*volume[0][0] + samples[x][1]*volume[1][0] + samples[x][2]*volume[2][0] + samples[x][3]*volume[3][0];
tmp[1] = samples[x][0]*volume[0][1] + samples[x][1]*volume[1][1] + samples[x][2]*volume[2][1] + samples[x][3]*volume[3][1];
tmp[2] = samples[x][0]*volume[0][2] + samples[x][1]*volume[1][2] + samples[x][2]*volume[2][2] + samples[x][3]*volume[3][2];
tmp[3] = samples[x][0]*volume[0][3] + samples[x][1]*volume[1][3] + samples[x][2]*volume[2][3] + samples[x][3]*volume[3][3];
samples[x][0] = tmp[0];
samples[x][1] = tmp[1];
samples[x][2] = tmp[2];
samples[x][3] = tmp[3];
}
// write sample array out to hardware here.
如果没有立即清除,则将4个输入通道通过4x4音量控制矩阵混合到4个输出通道中。
我实际执行此操作比上面的示例更加密集,我不知道如何定制我的代码以利用流水线(这似乎适合)。我是否应该在一个频道上工作?每次采样数组,以便可以多次操作相同的值(对于相同通道的连续采样)?但是,我必须检查x的&gt; sample_count次数是4次。我可以使tmp 2维和大到足以容纳完整的缓冲区,如果以这种方式通过它将有效地使cpu管道。或者上面的代码管道会有效吗?有没有一种简单的方法来检查流水线是否正在发生? TIA。