電腦再一次藍屏……
已經數不清這是第幾次了,跑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倍了
而且,大數據量時又開始藍屏崩潰……
已然熄燈,我只想睡覺
待續