numcpp速度对比_PHP和C++性能对比.pdf
PHP 與C++性能比較
本文博客鏈接:http://keping.me/php_vs_cpp/
PHP 是速度很快的腳本語言,但是用了框架以后好像感覺挺慢的。于是猜測會不會
PHP 本身也不是很快。如果不是很快,能否采用 PHP 調用本地動態鏈接庫的形式
來提升速度。
于是有了下面的對比實驗。
測試環境
1. 硬件環境如下圖所示。
2. 軟件環境
系統: Ubuntu 12.10
gcc 版本:
Thread model: posix
gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)
php 版本:
PHP 5.3.22 (cli) (built: Mar 14 2013 20:37:16)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
php 開發環境:
LAMP,所有安裝包均是通過源碼編譯安裝而成,編譯過程中會自動根據本機各項
參數進行最優配置。性能比apt-get install 命令直接安裝好。 關于以源碼包方式搭
建LAMP 請參考文章:http://keping.me/linux-php-dev-by-source-style/
測試方法
2
由于冒泡排序在時間復雜度上相當穩定——O(n ),在最大程度上減少了數據可能帶
來的影響,故采取計算冒泡排序的運行時間的方法來進行此次實驗。
對比測試分組
分組1: C++直接調用程序內的函數
分組2: C++調用打包好的動態鏈接庫文件(.so 文件,該文件也是自己寫好并打
包)
分組3: PHP 直接調用程序內的函數
分組4 : PHP 調用打包好的動態鏈接庫文件(.so 文件,該文件也是自己寫好并打
包)
測試數據
數據總體規模為5,500,000 個0~999 的整數。
每一實驗組,循環執行次數為30250,000,000,000 次。
測試所用數據可以從以下地址下載:
http://keping.me/david-uploads/data/data_cpp.tar.gz
測試數據生成代碼如下
可以看到是0~999 的整數,一共有10 種測試數據的規模,分別放在十個不同目錄
下,如下圖所示
目錄名稱代表數據的規模,如data_90000 表示數據規模為90,000 個,同理
data_100000 表示數據規模為100,000 個,依次類推。每一個目錄下面包含10
組測試數據,以data_100000 舉例,如下圖所示
每個文件則包含100,000 個0~999 的隨機數
數據文件打包下載地址: http://keping.me/david-uploads/data/data_cpp.tar.gz
以下是對比測試。
首先是 “分組1” 的測試
為了盡量保證算法一致,所以沒有采用指針等數據結構,變量的交換也采用最原始
的設置中間變量機制,關鍵代碼如下:
以下是data_100000 目錄下num_1 數據文件的運行結果文件result_1 的部分截圖,
用時13.74 秒
第一行輸出記錄的是每一秒中所含的時鐘數;第二行記錄的是排序開始之前程序已
經運行的時鐘數;第三行記錄的是排序結束以后程序運行的時鐘數;第四行則可以
根據前面的數據得出本次排序運行的時間,以秒記,保留兩位小數便于對比。
下表則是data_100000 目錄下的所有數據文件(num_1 至 num_9)的運行結果
可以看到,對于100,000 級別的數據,進行冒泡排序, “分組1” 用了大約13.8
秒左右的時間。下面將給出對于不同數據規模(data_10000~data_100000 )的平
均測試數據
其中X 軸方向上表示數據規模為 10K (即使10,000 ),20K,,,100K 的測試
數據。
其中Y 軸方向上表示測試的平均時間,對每一數據規模均有10 個測試數據,此處
為平均值。
2
從圖中可以看出,結果基本符合 y=x 的函數曲線,冒泡排序還是相當穩定的。。。
分組2 的測試
目錄結構如下,其中libbubble.so 文件即為冒泡排序打包成動態鏈接庫。將會在main
函數
總結
以上是生活随笔為你收集整理的numcpp速度对比_PHP和C++性能对比.pdf的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 米线店结账程序 装饰着模式_实验报告2_
- 下一篇: python中用于标识字符串的定界符_P