VS2015默認不支持x64下__asm{}內聯彙編的解決方案(含資源共享)

截至目前(2018年底2019年初),本人windows平臺下的各種開發所用的IDE主要就是VS2015。雖然VS2017已經出來一年多了,本人也自己使用過一段時間,但沒發現特別大的亮點,又考慮到整個研發團隊都在用VS2015,所以也一直是vs2015到現在。

最近在做一個大型矩陣運算相關的研究時,想試着自己結合彙編做點優化實驗,當然考慮到實際程序情況,最適合的使用匯編的方式就是內聯彙編。Windows下使用內聯彙編方法很簡單。使用 __asm 關鍵詞結構作爲制導就可以。

__asm{

// Assembly Codes here

}

但是,Visual Studio目前只支持32位(x86)的內聯彙編,而不支持64位(x64)下的內聯彙編。所以如果使用VS2015,且在x64下編譯的話,會報錯 “使用了非標準擴展: 不支持在此結構上使用“__asm”關鍵字”

經過本人測試,最好的解決方法就是64位時切換到intel的編譯器進行研發。自動安裝配置好intel parallel studio XE 後,還可以根據需要自由切換選擇使用哪款編譯器來Compile你的Code,挺好~

intel的很多開發套件都是隻能免費試用一個月,爲了省錢的(也就是比較窮)我們只能搜索對應的license文件以期進行長期的免費使用了。

我自己搜索的,是Intel Parallel Studio XE 2016 Cluster Version,自己用的這款,剛好最高支持到VS2015,全部安裝好後,對應的操作也很方便(資源共享,內含安裝文件和license:鏈接https://pan.baidu.com/s/14vDCooJYbROXcxTvZUi2Cw  
提取碼:uf17 )。

需要用intel C++ Compiler的時候,右鍵工程->屬性->(屬性頁->配置屬性)->常規->平臺工具集,修改平臺工具集爲intel C++ Compiler 即可。如下圖:

或者更省事兒點,同樣右鍵工程,右鍵菜單找到Intel Compiler,就可以來回自由切換Intel Compiler和Visual C++ Compiler了。如下兩圖:

剩下的大傢伙就可以開始折騰了。

 

附註(引用),部分參考了鏈接:https://blog.csdn.net/jinzhuojun/article/details/7085138 , 特此鳴謝。

Linux下,GCC支持x86-32/64的內聯彙編。Windows下,Visual Stdio支持x86-32的內聯彙編,但不支持x64的內聯彙編(至少到Visual Studio 2010是這樣),而是提供了一些Intrinsics(一種類似於內聯函數的東西)。MSDN給出了這些intrinsics的列表:http://msdn.microsoft.com/en-us/library/26td21ds.aspx。

 

這些intrinsics可以讓我們使用cpuid和rdstc這類底層特性,但終歸有限的intrinsics是無法滿足人民日益增長的開發需要的,於是我們需要能更方便寫彙編代碼的方法。這裏討論三種方法:

* 第一種是比較生猛的做法,直接把全部程序寫成.S彙編文件,適合各類牛人及猛男,不多討論。(Visual Studio相關配置例子見http://www.deconflations.com/2011/masm-assembly-in-visual-studio-2010/)

* 第二種比較柔和些,把需要寫成彙編的函數寫到.S彙編文件裏,最後鏈接進來。(http://www.lomont.org/Math/Papers/2009/Introduction%20to%20x64%20Assembly.pdf裏有一個簡單例子)

* 重點討論第三種,首先安裝Intel C++ Compiler XE,然後打開Parallel Studio XE 2011 with VS2010。
--------------------- 
作者:ariesjzj 
來源:CSDN 
原文:https://blog.csdn.net/jinzhuojun/article/details/7085138 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章