原
2023年08月18日 18:37:00
林微
摘要本文主要**的是「行優先」原則和「列優先」原則的問題。
1. 背景
首先了解「行優先」和「列優先」的知識,這兩種方式在數學上的直觀描述如下,給定如下矩陣:
根據行優先的原則,其排序方式為
根據列優先的原則,其排序方式為
2. 計算機領域的應用
行列優先原則在計算機領域的應用主要如下。行優先或者列優先沒有好壞,但其直接涉及到對記憶體中資料的最佳儲存訪問方式。因為在記憶體使用上,程式訪問的記憶體位址之間連續性越好,程式的訪問效率就越高;相應地,程式訪問的記憶體位址之間連續性越差。所以,我們應該盡量在行優先機制的編譯器,比如c/c++,cuda等等上,採用行優先的資料儲存方式;在列優先機制的編譯器,比如fortune, matlab等等上,採用列優先的資料儲存方式。但這種思想滲透到程式設計中之後,**的質量就會提高乙個檔次。
3. 以矩陣計算為例(matlab編譯器下測試)
4. 測試和分析% data
a = [ 1 1
2 23 3
4 45 5
6 67 7
8 89 9];
b = [ 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9];
c = zeros(9,9);
% the method of matrix multiplication in matlab
tic
c = a*b;
toc% our impletation method of matrix multiplication
ticfor ra = 1:9 % raws of the matrix a
for cb = 1:9 % columns of the matrix b
for len = 1:2
c(ra,cb) = a(ra,len)*b(len,cb)+c(ra,cb);
endend
endtoc
% optimal method 1
ticfor cb = 1:9 % columns of the matrix b
for ra = 1:9 % raws of the matrix a
for len = 1:2
c(ra,cb) = a(ra,len)*b(len,cb)+c(ra,cb);
endend
endtoc
% advanced optimal method 2
a = a'; % you can also directly given a = [ 1 2 3 4 5 6 7 8 9
% 1 2 3 4 5 6 7 8 9];
b = [ 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9];
ticfor i = 1:9 % columns of the matrix a
for j = 1:9 % columns of the matrix b
for len = 1:2
c(i,j) = a(len,i)*b(len,j)+c(i,j);
endend
end
toc
測試結果如上圖所示,第乙個時間為matlab自帶的乘法運算,第二個為我們原始實現的乘法計算,第三個為迴圈中行列變換(適應列優先編譯器的處理)。
最重要的是第四個是本人原創的矩陣乘法方法,簡單地說就是將a矩陣轉置,然後設計相應的演算法實現矩陣乘運算。在這個點上,希望在理解原理的基礎上能給讀者一些啟發。在本例中,這樣做效率最高,原因其一是本例中原始資料結構上適合我這樣處理;原因其二是這樣做的目的是使得任何乙個子乘法的處理上,兩乘數所在的記憶體空間上都是連續,而不僅僅是乙個連續(注意:這是本文的核心,讀者理解透了一定會很有收穫,認真看我給出的程式實現。這是核心,不懂的可以交流思想)!
另外,本文中我給出的這個方法是矩陣乘法裡面最優的方法,至少數學邏輯上是這樣。之所以matlab自帶的乘法計算之所以效能還不錯,是因為matlab自帶的運算都是經過優化的,包括硬體加速,系統加速等自己設計的應用很能呼叫加速方法。
C語言行優先和列優先的問題深入分析
c語言行優先和列優先的問題深入分析 摘要本文主要 的是 行優先 原則和 列優先 原則的問題。1.背景 首先了解 行優先 和 列優先 的知識,這兩種方式在數學上的直觀描述如下,給定如下矩陣 根據行優先的原則,其排序方式為 根據列優先的原則,其排序方式為 2.計算機領域的應用 行列優先原則在計算機領域的...
tf 矩陣行和列交換 tf矩陣基礎
一 placeholder tensorflow的設計理念稱之為計算流圖,在編寫程式時,首先構築整個系統的graph,並不會直接生效,這一點和python的其他數值計算庫 如numpy等 不同,graph為靜態的,類似於docker中的映象。然後,在實際的執行時,啟動乙個session,程式才會真正...
關於深度優先和廣度優先的問題
depth first search和breadth first search,即深度優先和廣度優先是圖的兩種搜尋的方法。其實與其說是方法,不如說是兩種思想。下面我們就來介紹這兩種思想。1 depth first search 深度優先是指在圖的查詢中,對每乙個分支深入到不能再深入為止,如果到達了終...