close

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數組)通過使用sincos函數給它賦值,我們用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++;
     }
}

arrow
arrow
    全站熱搜

    chunyuan 發表在 痞客邦 留言(0) 人氣()