[問題] CUDA Double precision 矩陣運算有問題
解決方法:
因為問題已經解決了, 所以將解決方法打上來, 也許以後有相同問題的人會有幫助.
因為版友 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
11/24 18:56, 1F
→
11/24 18:56, , 2F
11/24 18:56, 2F
→
11/24 18:58, , 3F
11/24 18:58, 3F
→
11/24 18:59, , 4F
11/24 18:59, 4F
→
11/24 19:01, , 5F
11/24 19:01, 5F
推
11/24 19:13, , 6F
11/24 19:13, 6F
→
11/24 19:34, , 7F
11/24 19:34, 7F
推
11/25 12:55, , 8F
11/25 12:55, 8F
→
11/25 13:16, , 9F
11/25 13:16, 9F
→
11/25 13:16, , 10F
11/25 13:16, 10F
→
11/25 13:17, , 11F
11/25 13:17, 11F
※ 編輯: t19861203 來自: 140.123.72.3 (11/27 09:55)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章