from
作者:Alex Farber
出處:http://www.codeproject.com/cpp/sseintro.asphttp://blog.csdn.net/showlong/archive/ 2010/02/11 /5306989.aspx
程式化實例
以下講解了SSE技術在Visual
Studio .NET 2003下的應用實例,你可以在http://www.codeproject.com/cpp/sseintro/SSE_src.zip下載示例程序壓縮包。該壓縮包中含有兩個項目,這兩個項目是基於微軟基本類庫(MFC)建立的Visual C++.NET項目,你也可以按照下面的講解建立這兩個項目。
SSETest 示例項目
SSETest項目是一個基於對話框的應用程序,它用到了三個浮點數組參與運算:
fResult[i] = sqrt( fSource1[i]*fSource1[i] + fSource2[i]*fSource2[i] ) + 0.5
其中i = 0, 1, 2 ... ARRAY_SIZE-1
其中ARRAY_SIZE被定義為30000。資料源數組(Source數組)通過使用sin和cos函數給它賦值,我們用Kris Jearakul開發的瀑布狀圖表控件(Waterfall chart control)[3]來顯示參與計算的源數組和結果數組。計算所需的時間(以毫秒ms為單位)在對話框中顯示出來。我們使用三種不同的途徑來完成計算:
[1]純C++代碼;
[2]使用SSE指令函數的C++代碼;
[3]包含SSE匯編指令的代碼。
參考文檔:
[3] Kris Jearakul的瀑布狀圖表控件:http://www.codeguru.com/controls/Waterfall.shtml
純C++代碼:
void
CSSETestDlg::ComputeArrayCPlusPlus(
float*
pArray1,
// [輸入] 源數組1
float*
pArray2,
// [輸入] 源數組2
float*
pResult,
// [輸出] 用來存放結果的數組
int
nSize)
// [輸入] 數組的大小
{
int i;
float* pSource1 = pArray1;
float* pSource2 = pArray2;
float* pDest = pResult;
for ( i = 0; i < nSize; i++ )
{
*pDest =
(float)sqrt((*pSource1) * (*pSource1) + (*pSource2)
* (*pSource2)) + 0.5f ;
pSource1++;
pSource2++;
pDest++;
}
}
留言列表