我正在努力理解我的功能行为。 我的代码是用Visual Studio 2012中的C ++编写的。在Windows 7 64位上运行。我正在使用浮点数的二维数组。当我计算我的功能时,如果我停止将结果写入输出指针,我会看到功能的时间缩短了10倍或更多。这是否意味着写作速度慢? 这是一个例子:
void TestSpeed(float** pInput, float** pOutput)
{
UINT32 y, x, i, j;
for (y = 3; y < 100-3; y++)
{
for (x = 3; x < 100-3; x++)
{
float fSum = 0;
for (i = y - 3; i <= y+3; i++)
{
for (j = x-3; j <= x+3; j++)
{
fSum += pInput[y][x]*exp(-(pInput[y][x]-pInput[i][j])*(pInput[y][x]-pInput[i][j]));
}
}
pOutput[y][x] = fSum;
}
}
}
如果我注释掉“pOutput [y] [x] = fSum;”这一行然后功能运行得非常快。这是为什么? 我顺序调用2-3个这样的函数。是否有助于使用堆栈而不是堆来写入结果块并将其传递到下一个函数,然后在该块准备就绪后写回堆缓冲区? 在某些情况下,我看到如果我用堆栈上分配的行缓冲区替换pOutput [y] [x], float fResult [100]并使用它存储结果可以更快地处理更大的数据。
答案 0 :(得分:0)
您的代码会进行大量操作,并且需要时间。根据您对输出所做的操作,您可以考虑输入矩阵的对角化或分解。或者你可以在yor输出中查找n倍于其他值的值,并且不计算theese的指数值。