GPU神經網絡和JAVA神經網絡速度對比

分別用CUDA和JAVA製作兩個三層的n*m*k的神經網絡,使輸入一致,目標函數一致,迭代次數一致,通過調節節點數量測量時間比較這兩個網絡到底哪個快。

網絡的輸入節點的初始化方式爲

for(inta=0 ;a<n ;a++)

           {

              x[a]=(double)a/(n);

           }

目標函數y[0]=1;y[1]=0;

權重都初始化爲0.1,用隨機梯度下降,不用偏置

迭代次數都是100次。

得到表格


節點數量 網絡結構 迭代次數 java用時 y[0] y[1] CUDA用時 y[0] y[1] java用時/CUDA用時 java速度/CUDA速度
600 3*100*2 100 47 0.9999999960729808 2.048728729816881E-211  657 0.9999999960729809   0 0.071537291 13.9787234
3000 3*500*2 100 62 0.9999999999505671 0 641 0.9999999999505671 0 0.096723869 10.33870968
20000 100*100*2 100 62 0.9999917229035667  0 751 0.9999917229035668 0 0.082556591 12.11290323
400000 1000*200*2 100 296 0.9999999979392669 0 1532 0.9999999979392669 0 0.193211488 5.175675676
2400000 4000*300*2 100 2532 0.9999999999999065 0 6958 0.9999999999999065 0 0.363897672 2.748025276
   
24000000 4000*3000*2 100 56305 1 0 74692 1 0 0.753829058 1.326560696
24000000 4000*3000*2 100 56415 1 0 74317 1 0 0.759112989 1.317326952
   
40000000 5000*4000*2 100 97646 1 0 128027 1 0 0.762698493 1.311134097
40000000 5000*4000*2 100 97531 1 0 127416 1 0 0.765453318 1.306415396
40000000 5000*4000*2 100 96139 1 0 127592 1 0 0.753487679 1.327161714



比如第一組網絡結構3*100*2共600個節點,迭代次數100次,java用時47ms,cuda用時657ms,

java第100次y[0]= 0.9999999960729808 ;y[1]=0

Cuda第100次y[0]= 0.9999999960729809 ;y[1]=0

最後一位小數不一致時因爲四捨五入規則造成的。

當節點數量超過240萬以後經過100次迭代輸出已經都是1和0,已經沒有區分度只是用來測量速度。

從表格看出來當節點數量只有600個時候java的速度甚至是cuda的13.9倍,很意外的是即便節點數量有4000萬個java的速度依然是cuda 的1.32倍。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章