f code(1)

電腦再一次藍屏……

 

已經數不清這是第幾次了,跑100*100規模以下的數據尚能承受,300*300以上就開始運行時藍屏

我暗想:這該不會是CUDA架構的不穩定吧,我該給NV寫一封信反應一下,或者,找大蝦開勇哥請教一下?

算了,還是明天拿給賴導看看再說吧

 

第二天,我來到辦公室

賴導說:那天你走之後,我想起你的程序有一個缺陷,就是並行計算時各個線程對顯存讀寫的衝突,也許就是藍屏的原因。

我頓悟,想想昨天將責任推到CUDA架構身上也太弱智了,慚愧……,但同時心裏埋怨賴導,我上週拿你看,你說沒問題,之後你想起來有問題了也不給我說聲,害我藍屏了八百遍。

接着,他提出了另外一種思路

 

我回到寢室,感覺他的那種思路不易控制,還是想沿着以前的思路改進,解決顯存讀寫衝突的問題

 

一下午之後,程序基本上完成了

 

但是,運行時中斷,這次換成了內存的讀寫訪問衝突

突然,我眼前一亮,暗罵自己非常SB,new出來的數組居然用delete而不是delete[],看了那麼多C++的書哪一本都會強調這個問題自己居然忘了……

算了,發現就好了,改掉

 

結果依然中斷

 

打斷點,發現中斷位置在Host端,還居然在delete數組的時候中斷,很費解,已經熄燈了,睡覺

 

第二天,下午

 

再次發現,原來對三維數組的尋址不對,再次暗罵自己SB,考軟設的時候那幾個N維數組選址的題目都OK了,現在又不行了

改掉 依然在delete數組時運行時中斷

再次發現數組邊界錯誤,突然懷念C++的vector或者string,他們,在我每次數組邊界超限的時候都會拋出一個異常,進而"biang“的一聲彈出一個對話框提示越界錯誤,而,數組,做爲每個菜鳥的噩夢,是不會拋出任何異常,只會讓你頭痛

 

但至少我發現了

 

改掉,這次程序可以完完全全的跑下來了

結果不對?不管他,先看運行時間

 

有點不敢相信,在500*500的時候居然比CPU快400倍以上

我狂喜,CUDA真是偉大的架構!但是……

 

我開開心心地洗澡

 

我坐回電腦前,想想爲什麼結果不對呢?

 

發現,每次迭代沒有交換邊界值!!!!!

 

我差點暈菜,怪不得CUDA程序比CPU快了這麼多,沒有交換邊界值相當於根本沒有循環迭代

就好比大家跑10000米,你小子跑一圈,別人跑了25圈,你當然很快

怪不得……我真的暈菜

 

我改,不就是交換邊界值麼……

 

這次改好了,但是,這次也換做CPU比CUDA程序快10倍了

而且,大數據量時又開始藍屏崩潰……

 

已然熄燈,我只想睡覺

 

待續

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