日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

CUDA,C++,Java,Python,Fortran运行速度比较

發(fā)布時(shí)間:2025/4/5 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUDA,C++,Java,Python,Fortran运行速度比较 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

通過計(jì)算100萬以內(nèi)素?cái)?shù)的運(yùn)行時(shí)間比較這5種語言的運(yùn)行速度。

每種語言運(yùn)行30次,取平均值。由于python和fortran的運(yùn)行速度和Java和C++運(yùn)行差距過大,python只計(jì)算了3次,Fortran運(yùn)行了10次.

C++,Java,Python,Fortran到底哪個(gè)更快?

C++的速度比Java2.1%:來自計(jì)算100萬以內(nèi)質(zhì)數(shù)的實(shí)驗(yàn)數(shù)據(jù)對(duì)比

各種語言的語法要求不同,算法只能盡可能寫的一致。

這兩篇文里對(duì)前期的實(shí)驗(yàn)有更詳細(xì)的解釋。


CUDA統(tǒng)計(jì)了核函數(shù)的運(yùn)行時(shí)間,和數(shù)據(jù)從GPU傳回CPU的時(shí)間

比如第一組數(shù)據(jù)


CUDA核函數(shù)運(yùn)行時(shí)間msCUDA數(shù)據(jù)從GPU到CPU的時(shí)間ms
2874190

用時(shí)287毫秒GPU就把100萬以內(nèi)的素?cái)?shù)程序運(yùn)行完了,又用了4190毫秒這些結(jié)果從GPU傳回CPU。

?

具體數(shù)據(jù)


CUDA核函數(shù)運(yùn)行時(shí)間msCUDA數(shù)據(jù)從GPU到CPU的時(shí)間msc++(不顯示中間過程ms)顯示過程msjava(不顯示中間過程ms)顯示過程mspython(不顯示中間過程ms)fortran(不顯示中間過程ms)顯示過程ms
28741909675822884416244625593100717109126
17240997385731554917164492283102039109546
14141737365669192918335211503101634108775
1614153784571168621884*100651122592
1454097768566798661801*101487121870
1544145888814989221801*101261121646
1254152713790038601792*101379120226
1384105881795748331891*100606110631
1254167962797378511806*106303108145
1724093875787609161894*94476108237
1564101729781897861807?
1724109846828917351777?
1484040860791487851745
1414075870765698781737
1414088788791287541770
1744117779728478281895
1594122731740398521766
1254194656720049191863
1254122835767238581979?
1564074839775708571882
1414177840709299241747?
1494128833732779521861
1564100900739766591765
1414175747737947831830
1254092795734728131764
1254157849705847691784
1214067832723198341740
1254112809714758921810
1734082834728238181808
1584037766718478341684
平均?
151.0333334118.181572606.8333832.0666671801.866674776459.67101055.3114079.4
?
1*5.39615979*5.50915913*31625.2019*755.325977


計(jì)算結(jié)果

CUDA ? > ? C++ ? > ? Java ? ?> ? Fortran ? > ? Python

151 ? ? ? < ? 815 ? ?< ? 832 ? ? < ? 114079 ?< ? 4776459

1 ? ? ? ? ? < ? ?5.40 ? < ? 5.5 ? ? ?< ? 755 ? ? ? ?< ? ?31625

也就是對(duì)這道題來說CUDA的速度是C++的5.4倍,是Java的5.5倍 ,是Fortran的755倍,是Python 的31625倍。相比較Java和C++相當(dāng)于節(jié)省了80%的時(shí)間,或者一臺(tái)機(jī)器當(dāng)5臺(tái)用。

具體程序


#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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。