HDU4920 Matrix multiplication (CPU cache對程式的影響)
Problem Description
Given two matrices A and B of size n×n, find the product of them.
bobo hates big integers. So you are only asked to find the result modulo 3.
bobo hates big integers. So you are only asked to find the result modulo 3.
Input
The input consists of several tests. For each tests:
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
Output
For each tests:
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Sample Input
1
0
1
2
0 1
2 3
4 5
6 7
Sample Output
0
0 1
2 1
經典的矩陣乘法因為第三層迴圈(最內層迴圈)是對k進行迴圈,因此b[k][j]是對b逐列進行訪問。我們知道記憶體中二維陣列是以行為單位連續儲存的,逐列訪問將會每次跳1000*4(bytes)。根據cpu cache的替換策略,將會有大量的cache失效。
因此square2.cpp將j迴圈和k迴圈交換位置,這樣就保證了
c[i][j] += a[i][k] * b[k][j];
這條語句對記憶體的訪問是連續的,增加了cache的命中率,大大提升了程式執行速度。
具體見樣例:http://blog.csdn.net/a775700879/article/details/11750703
程式碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 810;
int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];
int n;
int main()
{
while(~scanf("%d",&n)){
int i,j,k;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
a[i][j]%=3;
c[i][j]=0;
}
}
for(i=0;i<n;i++)
for(int j=0;j<n;j++){
scanf("%d",&b[i][j]);
b[i][j]%=3;
}
for(i=0;i<n;i++)
for(k=0;k<n;k++)
for(j=0;j<n;j++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
for(i=0;i<n;i++){
for(j=0;j<n-1;j++)
printf("%d ",c[i][j]%3);
printf("%d\n",c[i][n-1]%3);
}
}
return 0;
}
相關文章
- 淺析CPU結構對程式的影響以及熔斷原理
- 終端環境對go程式的影響?Go
- 技術人員評估英特爾CPU新漏洞對效能的影響
- 【原創】ARM平臺記憶體和cache對xenomai實時性的影響記憶體AI
- 分支對程式碼效能的影響和優化優化
- unusable index對DML/QUERY的影響Index
- Nologging對恢復的影響(二)
- 語言對思維的影響
- Nologging對恢復的影響(一)
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- 浮動的盒子對img的影響
- 探索webpack熱更新對程式碼打包結果的影響(二)Web
- 低程式碼開發對軟體開發流程的影響
- 測試多分支開發對合並程式碼的影響
- Forrester:隱私對廣告程式化購買的影響REST
- 來電對播放音樂的影響
- python:super()對多繼承的影響Python繼承
- DB2 HADR對效能的影響DB2
- INDEX建立方式對SQL的影響IndexSQL
- 關於OPcache對Swoole影響的理解opcache
- 小程式對實體行業轉型有何影響?行業
- 你知道CPU結構也會影響Redis效能嗎?Redis
- margin為負值對佈局的影響
- Sailthru:Facebook醜聞對人們的影響AI
- 網路延遲對事務的影響
- JVM 引數調整對 sortx 的影響JVM
- Mavrck:COVID-19對創作者的影響VR
- cluster factor對執行計劃的影響
- 淺談疫情對消費金融的影響
- 虛擬記憶體對 OI 的影響記憶體
- 修改系統時間對oracle的影響Oracle
- VideaHealth:人工智慧對牙科的真正影響Idea人工智慧
- windows server許可權對tomcat的影響WindowsServerTomcat
- namespace對axis解析xml請求的影響namespaceXML
- 物聯網技術對移動應用程式開發的影響
- 時鐘統一(時間同步)對全球發展程式的影響力
- MySQL alter 新增列對dml影響MySql
- 海外伺服器對SEO影響?伺服器
- Cirium:資料揭示新冠肺炎對中國航空業的影響及對全球航空旅遊增長的影響