CUDA,C++,Java,Python,Fortran运行速度比较
通過計算100萬以內(nèi)素數(shù)的運(yùn)行時間比較這5種語言的運(yùn)行速度。
每種語言運(yùn)行30次,取平均值。由于python和fortran的運(yùn)行速度和Java和C++運(yùn)行差距過大,python只計算了3次,Fortran運(yùn)行了10次.
《C++,Java,Python,Fortran到底哪個更快?》
《C++的速度比Java快2.1%:來自計算100萬以內(nèi)質(zhì)數(shù)的實(shí)驗(yàn)數(shù)據(jù)對比》
各種語言的語法要求不同,算法只能盡可能寫的一致。
這兩篇文里對前期的實(shí)驗(yàn)有更詳細(xì)的解釋。
CUDA統(tǒng)計了核函數(shù)的運(yùn)行時間,和數(shù)據(jù)從GPU傳回CPU的時間
比如第一組數(shù)據(jù)
| CUDA核函數(shù)運(yùn)行時間ms | CUDA數(shù)據(jù)從GPU到CPU的時間ms |
| 287 | 4190 |
用時287毫秒GPU就把100萬以內(nèi)的素數(shù)程序運(yùn)行完了,又用了4190毫秒這些結(jié)果從GPU傳回CPU。
?
具體數(shù)據(jù)
| CUDA核函數(shù)運(yùn)行時間ms | CUDA數(shù)據(jù)從GPU到CPU的時間ms | c++(不顯示中間過程ms) | 顯示過程ms | java(不顯示中間過程ms) | 顯示過程ms | python(不顯示中間過程ms) | fortran(不顯示中間過程ms) | 顯示過程ms |
| 287 | 4190 | 967 | 58228 | 844 | 1624 | 4625593 | 100717 | 109126 |
| 172 | 4099 | 738 | 57315 | 549 | 1716 | 4492283 | 102039 | 109546 |
| 141 | 4173 | 736 | 56691 | 929 | 1833 | 5211503 | 101634 | 108775 |
| 161 | 4153 | 784 | 57116 | 862 | 1884 | * | 100651 | 122592 |
| 145 | 4097 | 768 | 56679 | 866 | 1801 | * | 101487 | 121870 |
| 154 | 4145 | 888 | 81498 | 922 | 1801 | * | 101261 | 121646 |
| 125 | 4152 | 713 | 79003 | 860 | 1792 | * | 101379 | 120226 |
| 138 | 4105 | 881 | 79574 | 833 | 1891 | * | 100606 | 110631 |
| 125 | 4167 | 962 | 79737 | 851 | 1806 | * | 106303 | 108145 |
| 172 | 4093 | 875 | 78760 | 916 | 1894 | * | 94476 | 108237 |
| 156 | 4101 | 729 | 78189 | 786 | 1807 | ? | ||
| 172 | 4109 | 846 | 82891 | 735 | 1777 | ? | ||
| 148 | 4040 | 860 | 79148 | 785 | 1745 | |||
| 141 | 4075 | 870 | 76569 | 878 | 1737 | |||
| 141 | 4088 | 788 | 79128 | 754 | 1770 | |||
| 174 | 4117 | 779 | 72847 | 828 | 1895 | |||
| 159 | 4122 | 731 | 74039 | 852 | 1766 | |||
| 125 | 4194 | 656 | 72004 | 919 | 1863 | |||
| 125 | 4122 | 835 | 76723 | 858 | 1979 | ? | ||
| 156 | 4074 | 839 | 77570 | 857 | 1882 | |||
| 141 | 4177 | 840 | 70929 | 924 | 1747 | ? | ||
| 149 | 4128 | 833 | 73277 | 952 | 1861 | |||
| 156 | 4100 | 900 | 73976 | 659 | 1765 | |||
| 141 | 4175 | 747 | 73794 | 783 | 1830 | |||
| 125 | 4092 | 795 | 73472 | 813 | 1764 | |||
| 125 | 4157 | 849 | 70584 | 769 | 1784 | |||
| 121 | 4067 | 832 | 72319 | 834 | 1740 | |||
| 125 | 4112 | 809 | 71475 | 892 | 1810 | |||
| 173 | 4082 | 834 | 72823 | 818 | 1808 | |||
| 158 | 4037 | 766 | 71847 | 834 | 1684 | |||
| 平均 | ? | |||||||
| 151.033333 | 4118.1 | 815 | 72606.8333 | 832.066667 | 1801.86667 | 4776459.67 | 101055.3 | 114079.4 |
| ? | ||||||||
| 1 | * | 5.39615979 | * | 5.50915913 | * | 31625.2019 | * | 755.325977 |
計算結(jié)果
CUDA ? > ? C++ ? > ? Java ? ?> ? Fortran ? > ? Python
151 ? ? ? < ? 815 ? ?< ? 832 ? ? < ? 114079 ?< ? 4776459
1 ? ? ? ? ? < ? ?5.40 ? < ? 5.5 ? ? ?< ? 755 ? ? ? ?< ? ?31625
也就是對這道題來說CUDA的速度是C++的5.4倍,是Java的5.5倍 ,是Fortran的755倍,是Python 的31625倍。相比較Java和C++相當(dāng)于節(jié)省了80%的時間,或者一臺機(jī)器當(dāng)5臺用。
具體程序
#include "book.h" #include "cuda_runtime.h" #include "cpu_bitmap.h"#include<iostream> #include <time.h>using namespace std;#define DIM 1000/****************************************/__device__ int julia(int x ,int y){int j=2; int i=x*DIM+y;int a=0;for(j=2; j <= (i/j); j++) {if(!(i%j)) {break; }}if(j > (i/j)) {return 1;}if(j <= (i/j)) {return 0;}}__global__ void kernel(unsigned char *ptr){int x=blockIdx.x;int y=blockIdx.y;int offset=x+y*gridDim.x;int juliaValue=julia(x,y);//printf("%d , %d\n " ,offset , juliaValue);ptr[offset*4+0]=255*juliaValue;ptr[offset*4+1]=0; ptr[offset*4+2]=0; ptr[offset*4+3]=255;}int main(void){clock_t start,end1,end2; start=clock();CPUBitmap bitmap(DIM,DIM);unsigned char *dev_bitmap;HANDLE_ERROR (cudaMalloc( (void**)&dev_bitmap,bitmap.image_size()));dim3 grid(DIM,DIM);kernel<<< grid,1>>>(dev_bitmap);end1=clock();cout<<(end1-start)*1000/CLOCKS_PER_SEC <<endl; HANDLE_ERROR (cudaMemcpy (bitmap.get_ptr(),dev_bitmap,bitmap.image_size(),cudaMemcpyDeviceToHost ));end2=clock();cout<<(end2-end1)*1000/CLOCKS_PER_SEC <<endl; bitmap.display_and_exit();HANDLE_ERROR (cudaFree(dev_bitmap));}
總結(jié)
以上是生活随笔為你收集整理的CUDA,C++,Java,Python,Fortran运行速度比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CUDA与Java速度比较---生成Ju
- 下一篇: GPU神经网络和JAVA神经网络速度对比