[問題] CUDA Double precision 矩陣運算有問題

看板C_and_CPP (C/C++)作者 (雉)時間16年前 (2009/11/24 17:55), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串1/2 (看更多)
解決方法: 因為問題已經解決了, 所以將解決方法打上來, 也許以後有相同問題的人會有幫助. 因為版友 lgen7604 利用 GTX295測試之後, 發現跑出來的結果正常 我還麻煩他跑大一點的迴圈, 上萬次之後依然沒出現問題 (之前大約100次就會出錯) 然後我就描述給借我 c1060 的朋友, 跟他說發生的狀況 之後他用實驗室的 s1070 再重覆一次試驗, 發現結果完全正確 所以推測是原先 c1060 的電腦太久沒有重開機, 導致記憶體出錯 (畢竟 GPU 的 Memory 沒有 ECC) 所以嘗試重開機之後, 就完全可以正常運作了 以後用 GPU 跑程式的可能要多注意這個問題 感謝協助我找出問題的版友們 遇到的問題: (題意請描述清楚) CUDA 在 Double precision 才會出現的問題 將一個二維矩陣 A(i,j) = B(i,j) 利用迴圈重複計算 CUDA kernal 數十次 一開始幾個迴圈計算的結果都正確, 但算到後來會突然錯誤 數值錯誤不是整個矩陣都出錯, 是只有矩陣中的特定元素有錯 而且出現錯誤的元素位置, i index 都會與 14, 15有關 e.g. 14, 15, 30, 31, 270, 271, 286, 287 而且這個錯誤是只有在 Double precision 的情況下才出現 開發平台: OS: Ubuntu 9.04 server 64bit GPU: nVidia Tesla C1060 Compile: nvcc filename.cu -arch=sm_13 有問題的code: (請善用置底文標色功能) https://gist.github.com/c446433349c218de2dc3 補充說明: 一開始是測試矩陣元素平移 A(i,j)=B(i+1,j) 的時候發現有錯誤 後來為了找出錯誤 直接寫一個最簡單的矩陣相等, 沒想到還是會有問題, 而且只有在 Double precision 重複利用迴圈不斷計算 Cuda kernal 才發生的問題, 發生的迴圈次數不一定, 但是數值 有錯誤的元素只有特定位置才會出錯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.72.3

11/24 18:56, , 1F
聽起來非常像是硬體問題..你要不要同樣的code換一個平臺
11/24 18:56, 1F

11/24 18:56, , 2F
或換一張硬體試試看?
11/24 18:56, 2F

11/24 18:58, , 3F
1.發生的迴圈次數不一定 2.index只有在特定位置會出錯
11/24 18:58, 3F

11/24 18:59, , 4F
剛好nVidia的第二代硬體架構 是每個陣列24組SP,每個陣
11/24 18:59, 4F

11/24 19:01, , 5F
列共用8個texture unit..
11/24 19:01, 5F

11/24 19:13, , 6F
你能不能把所有出問題的index都列出來@@?
11/24 19:13, 6F

11/24 19:34, , 7F
用GTX295執行正常 換個硬體試試吧
11/24 19:34, 7F

11/25 12:55, , 8F
會不會是DRam有問題?
11/25 12:55, 8F

11/25 13:16, , 9F
因為我的i是跟著threadIdx.x, 所以我推測是thread有問題
11/25 13:16, 9F

11/25 13:16, , 10F
但後來我修改程式, 讓他前32個threadIdx.x 不使用, 程式
11/25 13:16, 10F

11/25 13:17, , 11F
依然會在 i=14, 15, 31, 32 這些位置有問題
11/25 13:17, 11F
※ 編輯: t19861203 來自: 140.123.72.3 (11/27 09:55)
文章代碼(AID): #1B2wrsNE (C_and_CPP)
文章代碼(AID): #1B2wrsNE (C_and_CPP)