2010-04-01 31 views
4

我已經爲SSE做過一些內聯ASM編碼,並且它不是也是即使對於不知道ASM的人也很難。但我注意到MS也提供了許多特殊指令的內在包裝。Intrinsics Vs內聯ASM用於VC++ 2K8中的SSE編碼

是否存在特定的性能差異,或者其他強烈的原因,爲什麼應該在另一個之上使用?

要重複標題,這是特別涵蓋VC++ 2008公開的非託管本機C++的內部函數。

回答

3

一般來說,最好使用內在函數 - 編程人員和編譯器(例如Intel ICC)會更有效率地完成寄存器分配,指令調度等工作。微軟編譯器在這方面不夠好但它可能仍然是一個合理的工作 - 如果您需要獲得更好的性能,您可以稍後切換到ICC。

+1

生產力論證是內在論的正確論據。對於大多數任務來說,生成的代碼將足夠好,以至於使用內在函數的效率收益遠遠高於使用匯編所增加的性能。真的,只有絕對性能至關重要的庫和小部分應該用匯編語言編寫。 – 2010-04-01 17:03:36

4

在Visual C++中沒有內聯程序集用於x64。 Intrinsics也可以在x64上使用。如果您想將代碼移植到x64,則必須使用內部函數。

+0

+1。在這種情況下,它不相關。但是,謝謝你指出,我不知道這一點。 – 2010-04-01 16:19:53

+1

但是你可以使用MASM x64如果你想 – PhiS 2010-04-01 18:36:38

1

內傳函數與它們的等效彙編指令是相同的,如果可能的話,您應該使用它們 - 編譯器知道直接翻譯它們,但沒有性能差異。

+0

真的_identical_?關於如何將數據移入寄存器等等,是否涵蓋/相關? – 2010-04-01 16:19:18

+0

我經常發現,由於編譯器會對寄存器分配和/或指令調度進行處理,所以我可以編寫比等效SSE內在函數快兩倍的程序集。也就是說,我每天都會寫矢量代碼。你的旅費可能會改變。 – 2010-04-01 16:33:00

+0

@Stephen:您是否嘗試過與Intel ICC編譯器進行比較?這很難擊敗,恕我直言,但我很想知道你是否能夠用手工編碼的彙編程序擊敗它? – 2010-04-01 16:53:30

0

使用內在函數。

使用程序集通常會導致幾天的不間斷工作, 只能找出編譯器以5%的最佳性能。 (5%,如果你真的很好,最有可能是30%。)