程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 64位/32位 C++/C# 數學計算性能對比測試

64位/32位 C++/C# 數學計算性能對比測試

編輯:C++入門知識

 

在下面的網址:http://www.BkJia.com/kf/201111/112209.html 看到了使用MS的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc 幾個不同編譯器編譯的C/C++ 程序性能對比,結論是Intel的編譯器性能最高。

 

同樣把這段Intel的SDK中的代碼遷移到C#中比較一下

 

我的筆記本是:Intel Core4 P8700 2.53G的CPU,4G內存,Win7 64bit系統,VS2010自帶的編譯器

 

 

 

對於代碼略作調整和注釋

 

C++代碼

01 //intel的性能測試例子 

 

02 #include <stdio.h>  

 

03 #include <stdlib.h>  

 

04 #include <time.h>  

 

05 #include <math.h>  

 

06   

 

07 //為cin cout 提供 

 

08 #include <iostream> 

 

09 using namespace std; 

 

10   

 

11 #define INTEG_FUNC(x) fabs(sin(x)) //計算公式 

 

12   

 

13 double dclock(void);  

 

14   

 

15 int main(void)  

 

16 {  

 

17     unsigned int i, j, N;  

 

18     double step, x_i, sum;  

 

19     double start, finish, duration, clock_t;  

 

20     double interval_begin = 0.0;  

 

21     double interval_end = 2.0 * 3.141592653589793238;  

 

22   

 

23     start = clock(); //初始時間 

 

24   

 

25     printf(" \n");  

 

26     printf(" Number of中文| Computed Integral | \n"); //Win7下中文顯示正常 

 

27     printf(" Interior Points | | \n");  

 

28   

 

29     for (j=2;j<27;j++)  

 

30     {   

 

31         N = 1 << j; 

 

32   

 

33         step = (interval_end - interval_begin) / N;  

 

34         sum = INTEG_FUNC(interval_begin) * step / 2.0;  

 

35   

 

36         for (i=1;i<N;i++)  

 

37         {  

 

38             x_i = i * step;  

 

39             sum += INTEG_FUNC(x_i) * step;  

 

40         }  

 

41   

 

42         sum += INTEG_FUNC(interval_end) * step / 2.0;  

 

43   

 

44         //printf(" %10d | %14e | \n", N, sum);  

 

45         printf(" %14e  \n", sum);  

 

46     }  

 

47   

 

48     finish = clock(); //結束時間 

 

49     duration = (finish - start);   

 

50     printf(" \n");  

 

51     printf(" Application Clocks = %10e \n", duration);  

 

52     printf(" \n");  

 

53   

 

54     int tempA; 

 

55     cin>>tempA; 

 

56   

 

57     return 0;  

 

58 }

 

 

 

 

 

默認編譯參數,都是Release編譯後,拿出exe文件獨立運行

 

32bit C++     6338ms

 

 

 

C# 代碼

01 using System; 

 

02 using System.Collections.Generic; 

 

03 using System.Linq; 

 

04 using System.Text; 

 

05   

 

06 namespace ConsoleApplication1 

 

07 { 

 

08     class Program 

 

09     { 

 

10         static void Main(string[] args) 

 

11         { 

 

12             int time = System.Environment.TickCount;  //添加計時器 

 

13   

 

14             #region 

 

15             int i, j, N; 

 

16             double step, x_i, sum; 

 

17             double start, finish, duration, clock_t; 

 

18             double interval_begin = 0.0; 

 

19             double interval_end = 2.0 * 3.141592653589793238; 

 

20   

 

21             for (j = 2; j < 27; j++) 

 

22             { 

 

23                 N = 1 << j;  

 

24                 step = (interval_end - interval_begin) / N; 

 

25                 sum = Math.Abs(Math.Sin(interval_begin)) * step / 2.0; 

 

26   

 

27                 for (i = 1; i < N; i++) 

 

28                 { 

 

29                     x_i = i * step; 

 

30                     sum += Math.Abs(Math.Sin(x_i)) * step; 

 

31                 } 

 

32   

 

33                 sum += Math.Abs(Math.Sin(interval_end)) * step / 2.0; 

 

34                 Console.Write(sum.ToString()+"\r\n"); 

 

35             } 

 

36   

 

37             Console.Write((System.Environment.TickCount - time).ToString()); 

 

38             Console.ReadLine(); 

 

39             #endregion 

 

40         } 

 

41     } 

 

42 }

 

 

 

32bit C#  命令行   5382ms

 

32bit C#  WinForm  5351ms

 

 

都是重復測試了5次,最大最小誤差少於30ms

 

 

從左到依次為:32bit C++、32bit C#命令行、32bit C#WinForm

 

 

 

 

 

C#的竟然比C++快了1秒。

 

 

 

再看看64bit的,64bit C++ 3696ms,64bit C#  5382 ms

 

從左到右依次為:

 

64bit C++,32bitC++,64bit C#

 

 

 

 

 

可見該程序64bit 編譯時,C++的性能大幅提升,C#的幾乎不變。

 

兩個計算精度應該相同,C++是因為輸出的格式科學計數法隱藏了後面的小數

 

 

 

結論:

 

image

 

 

1. C# 在WinForm和命令行中,數學計算性能相當

 

2. 32bit下C#的性能還不錯,若能在64bit下編譯器也能充分優化達到C++那樣的提升就好了。

 

楊韬的學習備忘錄YTYT2002YTYT

 

http://www.cnblogs.com/ytyt2002ytyt/archive/2011/11/24/2261104.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved