Tuesday, March 16, 2010

Cross Product

以前讀過一些文章,知道近年隨著三維遊戲的流行,為了提供更快的三維圖像處理能力,新型的圖像處理器 (GPU)都在硬件上直接支援計算 matrix , vector 等功能,其中一個功能,就是 Cross Product。

最近不知痴了邊條筋,發覺原來 2x2 system of linear equations 的解,其實可以用 Cross Product 來表示。
(說穿了其實很簡單,但點解我十幾年來的都無這樣想過呢 >.< )
考慮二元一次方程組:
[[a1, b1], [a2, b2]]*[[x], [y]] = [[c1], [c2]]
(希望你們看得明我打乜,因為我懶畫出來……)
利用Cramer's Rule,我們可得出 x=P/R, y=Q/R 這一組解,其中P、Q和R 是三個determinants :
P=det([c1, b1], [c2, b2])
Q=det([a1, c1], [a2, c2])
R=det([a1, b1], [a2, b2])

另一方面考慮向量g和h:
g=(a1)i+(b1)j+(c1)k
h=(a2)i+(b2)j+(c2)k
利用 rule of Sarrus,
g x h ( 即是 cross product of g and h)
=det([i, j, k], [a1, b1, c1], [a2, b2, c2])
=det([b1, c1], [b2, c2])i - det([a1, c1], [a2, c2])j + det([a1, b1], [a2, b2])k
=-det([c1, b1], [c2, b2])i - det([a1, c1], [a2, c2])j + det([a1, b1], [a2, b2])k
=-Pi - Qj + Rk

看到嗎?再次出現 P、Q和R,這就是方程組的解與 cross product 的關係。

GPU 在硬件上支援 cross product 的計算,即是代表著輸入 a1, a2, b1, b2, c1, c2,便可直接得出 P、Q和R的值。
傳統數學、計算機運算上,要從a1, a2, b1, b2, c1, c2,得出 P、Q和R的值,須計算 determinants,即是要計算數個加減乘除的運算。
看來利用 GPU 的 Cross product 計算功能能,能更有效地解二元一次方程組吧?

不知到 GPU 的 instruction set 上還包括甚麼運算呢?利用這些運算,或許可以得出很多一反傳統的高效能計算法則吧。

1 comment:

Anonymous said...
This comment has been removed by a blog administrator.