2009-11-27 85 views
2

我正在用C編寫一個圖形庫,我想利用SSE指令來加速某些功能。我會如何去做這件事?我正在使用GCC編譯器,所以我可以依靠編譯器內在函數。我也想知道我是否應該改變存儲圖像數據的方式(目前我只是使用一組浮點數) - 是否需要使用類型爲float __attribute__ ((vector_size (16)))的數組?使用SSE指令進行快速圖像處理?

編輯:圖像處理的類型/處理我很感興趣,包括仿射變換,幾何和頻域濾波(傅立葉分析)

,我應該如何去使用SSE的圖像處理任何參考或建議在C將非常感激。

感謝

+0

你應該描述你的庫中的算法是做什麼的。沒有必要先把所有東西都轉換成浮動......有很多SSE指令處理char,short和int,有些是專門爲典型的圖像處理步驟(如MPSADBW)設計的。你喜歡彙編低級編程的東西,有點欺騙?否則,SSE可能不適合你。 – hirschhornsalz 2009-11-29 10:30:23

+0

drhirsh, 我的圖書館將支持旋轉,縮放,剪切,合成,幾何等標準功能。所以會有很多矩陣工作。此外,我正在研究頻域圖像處理(傅立葉變換等)。 是的,我對做更多的彙編級編程非常感興趣,我已經做了一些過去並且喜歡它:)關於我從哪裏去了解更多關於SSE和圖像處理/處理的地方的任何提示? :) – horseyguy 2009-11-29 22:05:00

+1

@banister:您可能會發現我在http://stackoverflow.com/questions/1389712/getting-started-with-sse/1795196#1795196上發佈的一些鏈接,這些鏈接對了解一般的SSE很有用。雖然我沒有圖像處理的經驗。 – int3 2009-11-30 14:51:03

回答

2

我一直在努力與上證所微軟的Visual C一些圖像處理++。我發現從一開始就對齊所有圖像數據(在Visual C++中用_aligned_malloc和_aligned_free完成)是最容易的。雖然對齊是一個真正的痛苦,這就是爲什麼我只使用SSE進行算術運算(添加,減去,點積,這些類型的東西)。如果我必須做更復雜的事情,我通常只使用指針。

+0

heya謝謝你的回答! :) 但是,我想多瞭解一下你如何去了解它:) 你有沒有任何代碼示例使用SSE對圖像進行簡單操作?我應該知道的任何提示或陷阱?你是依靠inline asm還是編譯器intrisics?等:) :) 謝謝 – horseyguy 2009-11-29 22:35:11

+1

太好了。我使用了編譯器內在函數。沒有明顯的缺陷,確保一切都對齊,就這些。我很難向您展示示例代碼,因爲我用C++模板做了所有事情,所以即使是簡單的添加操作也有很多抽象層次。我從CodeProject.com學到了一些例子,在這裏查看一些很好的例子。 – 2009-11-29 23:05:34