我想找出一個很好的循環展開乘以兩個矩陣。循環展開乘以兩個矩陣NxN?
例如,如果我們想總和的N×N矩陣:
void SumMatrix(int *M, int n, int *result)
{
int i,j;
*result = 0;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
*result += M[j][i];
}
我們可以這樣做:
void SumMatrix(int *M, int n, int *result)
{
int i;
int size = n*n;
int last = size%8;
int acc1 = 0;
int acc2 = 0;
int *pEnd = M+size-last;
for (; M<pEnd; M+=8)
{
acc1 += (*M + *(M+1)) + (*(M+2) + *(M+3));
acc2 += (*(M+4) + *(M+5)) + (*(M+6) + *(M+7));
}
/* adding the last entries */
while (last--)
acc1 += *(M++);
*result = acc1+acc2;
}
但我試圖找到一個(好)的方式來乘2點矩陣,但目前沒有發現。
備註:這是沒有家庭作業的任務,今天我有一個考試,只是想過這個問題,我認爲這對考試來說可能是一個很好的問題,不是嗎?
我想感謝所有幫助
問候
羅恩
取決於考試的性質。如果它特別針對低級性能優化(具有通過測量證明a)第一代碼版本是顯着性能瓶頸的先決條件,以及b)第二版本在實際生產環境中比第一版本運行速度快得多),那很好。如果是關於通用C編程,絕對不是。第一塊代碼比第二塊代碼更乾淨,易於閱讀,驗證和維護。 – 2012-04-19 06:53:06
@PéterTörök:不,採用3個FOR循環通常乘以兩個矩陣。我試圖讓速度更快,並且使用SUM,就像上面的代碼一樣。 – ron 2012-04-19 06:59:07
我明白你在做什麼。你瞭解我的意見嗎?你有什麼考試? – 2012-04-19 09:05:13