cześć. ostatnio znalazłem (na 99%) błąd sprzętowy w GPU radeona (Radeon HD 7850). zobaczcie wątek:
https://community.amd.com/thread/191288 (https://community.amd.com/thread/191288)
W poście zamiesciłem kody programu, który wykrywa ten błąd i binaria w Linuksie. chcę, żebyście spróbowali odpalić program i pokazali wyniki.
Testowałem tylko na Pitcairn. Niestety nie wiem jak będzie działać na prockach Fiji i Tonga (całkiem inna arch). Program testuje czy instrukcja S_SUB_I32 dobrze
liczy nadmiar (overflow) dla różnicy liczb. mój Pitcairn, niestety źle liczy. chciałbym wiedzieć czy inne GPU mają ten problem.
Niestety nie mam dostępu do Windows, więc nie mam binariów dla Windows. sprobuje skompilować dla Windows w następnym tygodniu.
dla HD7770
Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Capeverde, AddressBits: 32
Device: Capeverde, Driver version: 1800.5
Loading program binary: bugcheck-Capeverde-32-1800.clo
Calling kernel:
sub_i32 #0: 10213 - 1256: value=8957, scc=0
Expected value=8957, 64bit: 8957, expected scc=0
SUCCESS
sub_i32 #1: 13234 - 42221: value=-28987, scc=1
Expected value=-28987, 64bit: -28987, expected scc=0
FAILED!! for sub_i32 scc #1: expected=0, result=1
sub_i32 #2: 6321 - -5343: value=11664, scc=0
Expected value=11664, 64bit: 11664, expected scc=0
SUCCESS
sub_i32 #3: 2114067115 - -63823599: value=-2117076582, scc=0
Expected value=-2117076582, 64bit: 2177890714, expected scc=1
FAILED!! for sub_i32 scc #3: expected=1, result=0
sub_i32 #4: -5343 - 6321: value=-11664, scc=0
Expected value=-11664, 64bit: -11664, expected scc=0
SUCCESS
sub_i32 #5: -63823599 - 2114067115: value=2117076582, scc=0
Expected value=2117076582, 64bit: -2177890714, expected scc=1
FAILED!! for sub_i32 scc #5: expected=1, result=0
sub_i32 #6: -10213 - -1256: value=-8957, scc=0
Expected value=-8957, 64bit: -8957, expected scc=0
SUCCESS
sub_i32 #7: -13234 - -42221: value=28987, scc=1
Expected value=28987, 64bit: 28987, expected scc=0
FAILED!! for sub_i32 scc #7: expected=0, result=1
dzięki RAD-Poland :p_arr:. CapeVerde to GCN1.0. czekam na wyniki dla GCN1.1 (Bonaire, Hawaii, Spectre...).
Jak wpadles na ten blad?
Po napisaniu assemblera dla GPU postanowiłem nauczyć się i sprawdzić wszystkie instrukcje GPU :book:. no i wyszedł błąd...
Mam R9-290 i 390, szkoda że nie napisałeś wcześniej jak fury miałem. Powiedz mi tylko czy przez virtualną maszynę zadziała? Albo jak na windowsie to odpalić?
jeśli masz jakikolwiej kompilator (zalecam VS Express 2012) to po prostu skompiluj plik bugcheck.cpp. musisz mieć zainstalowany AMDAPP, lub przynajmniej nagłówki OpenCL. może w weekend skompiluję pod windows.
Mam visuala 2015, tego darmowego.
Jak się uda skompilować to strzele o tym artykuł i dorzucę aplikacje żeby ludzie mogli sobie na swoich kartach odpalić, oczywiście jak się zgodzisz 8)
Dzięki. oczywiście zgadzam się. 8). Nie wiem jak program zachowa się dla Tonga lub Fiji (to GCN 1.2, niekompatybilne ze starszymi i jeszcze nie rozgryzłem binariów OpenCL dla tej arch).
Właśnie z openCL mam problem przy kompilowaniu. Zainstalowałem AMD SDK i Visual dalej nie rozpoznaje co to jest.
w opcjach kompilatora trzeba podać ścieżki do inkludów. np.: "/I..\OpenCL1.1\include"
w AMDAPP powinna być biblioteka OpenCL.lib. dodaj ją na końcu listy plików wejściowych. spróbuj skompilować z poziomu linii komend.
ponieważ MSVC nie jest do końca kompatybilny C++11 to prawdopodobnie trzeba będzie trochę zmienić program
Juz jest wersja dla Windows. mam nadzieję, że zadziała.
dodaj linijkę system("pause") albo żeby program zaczekał na komendę :D
odpal z poziomu linii poleceń. Wybierz z programów 'Wiersz linii poleceń' (lub Uruchom... z 'cmd.exe') i przejdź do katalogu z programem (cd SCIEZKA) i uruchom. Jeszcze nie odpalałeś żadnego programu z linii poleceń?
Odpalałem jakieś aplikacje monitorujące obciążenie CPU dedykowane dla Xeonów E5, jakiś dłuższy czas temu %)
jest nowy plik. już będzie czekać na reakcję użytkownika. Mozesz odpalić z poziomu GUI.
Sorki ale czasu brakowało
Karta to Asus Radeon R9-390 STRIX (chyba)
Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Hawaii, AddressBits: 64
Device #1, name: Hawaii, AddressBits: 64
Device: Hawaii, Driver version: 1800.8
Loading program binary: bugcheck-Hawaii-64-1800.clo
Calling kernel:
sub_i32 #0: 10213 - 1256: value=8957, scc=0
Expected value=8957, 64bit: 8957, expected scc=0
SUCCESS
sub_i32 #1: 13234 - 42221: value=-28987, scc=0
Expected value=-28987, 64bit: -28987, expected scc=0
SUCCESS
sub_i32 #2: 6321 - -5343: value=11664, scc=0
Expected value=11664, 64bit: 11664, expected scc=0
SUCCESS
sub_i32 #3: 2114067115 - -63823599: value=-2117076582, scc=1
Expected value=-2117076582, 64bit: 2177890714, expected scc=1
SUCCESS
sub_i32 #4: -5343 - 6321: value=-11664, scc=0
Expected value=-11664, 64bit: -11664, expected scc=0
SUCCESS
sub_i32 #5: -63823599 - 2114067115: value=2117076582, scc=1
Expected value=2117076582, 64bit: -2177890714, expected scc=1
SUCCESS
sub_i32 #6: -10213 - -1256: value=-8957, scc=0
Expected value=-8957, 64bit: -8957, expected scc=0
SUCCESS
sub_i32 #7: -13234 - -42221: value=28987, scc=0
Expected value=28987, 64bit: 28987, expected scc=0
SUCCESS
Przy okazji widać, że R9-290 i R9-390 to identyczne układy, tylko w 390 dopchali ramu. Przynajmniej wszystko na to wskazuje, chyba że panowie z AMD wiedzą o większej ilości takich bugów, wtedy rzeczywiście może coś poprawiono przy okazji premiery.
Jutro dodam wyniki z R9-280x. Gdzie błąd ten powinien wystąpić.
Dzięki za testy. okazuje się, że nie ma błędu w nowszych układach (GCN 1.1/1.2). Z linii poleceń możesz wybrać kartę do testów (podaj po prostu jej numer).
Radeon R9-280x zgodnie z oczekiwaniami.
Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Tahiti, AddressBits: 32
Device: Tahiti, Driver version: 1800.11
Loading program binary: bugcheck-Tahiti-32-1800.clo
Calling kernel:
sub_i32 #0: 10213 - 1256: value=8957, scc=0
Expected value=8957, 64bit: 8957, expected scc=0
SUCCESS
sub_i32 #1: 13234 - 42221: value=-28987, scc=1
Expected value=-28987, 64bit: -28987, expected scc=0
FAILED!! for sub_i32 scc #1: expected=0, result=1
sub_i32 #2: 6321 - -5343: value=11664, scc=0
Expected value=11664, 64bit: 11664, expected scc=0
SUCCESS
sub_i32 #3: 2114067115 - -63823599: value=-2117076582, scc=0
Expected value=-2117076582, 64bit: 2177890714, expected scc=1
FAILED!! for sub_i32 scc #3: expected=1, result=0
sub_i32 #4: -5343 - 6321: value=-11664, scc=0
Expected value=-11664, 64bit: -11664, expected scc=0
SUCCESS
sub_i32 #5: -63823599 - 2114067115: value=2117076582, scc=0
Expected value=2117076582, 64bit: -2177890714, expected scc=1
FAILED!! for sub_i32 scc #5: expected=1, result=0
sub_i32 #6: -10213 - -1256: value=-8957, scc=0
Expected value=-8957, 64bit: -8957, expected scc=0
SUCCESS
sub_i32 #7: -13234 - -42221: value=28987, scc=1
Expected value=28987, 64bit: 28987, expected scc=0
FAILED!! for sub_i32 scc #7: expected=0, result=1
Press ENTER
R9-280x:
Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Tahiti, AddressBits: 32
Device: Tahiti, Driver version: 1642.5
Loading program binary: bugcheck-Tahiti-32-1700.clo
Calling kernel:
sub_i32 #0: 10213 - 1256: value=8957, scc=0
Expected value=8957, 64bit: 8957, expected scc=0
SUCCESS
sub_i32 #1: 13234 - 42221: value=-28987, scc=1
Expected value=-28987, 64bit: -28987, expected scc=0
FAILED!! for sub_i32 scc #1: expected=0, result=1
sub_i32 #2: 6321 - -5343: value=11664, scc=0
Expected value=11664, 64bit: 11664, expected scc=0
SUCCESS
sub_i32 #3: 2114067115 - -63823599: value=-2117076582, scc=0
Expected value=-2117076582, 64bit: 2177890714, expected scc=1
FAILED!! for sub_i32 scc #3: expected=1, result=0
sub_i32 #4: -5343 - 6321: value=-11664, scc=0
Expected value=-11664, 64bit: -11664, expected scc=0
SUCCESS
sub_i32 #5: -63823599 - 2114067115: value=2117076582, scc=0
Expected value=2117076582, 64bit: -2177890714, expected scc=1
FAILED!! for sub_i32 scc #5: expected=1, result=0
sub_i32 #6: -10213 - -1256: value=-8957, scc=0
Expected value=-8957, 64bit: -8957, expected scc=0
SUCCESS
sub_i32 #7: -13234 - -42221: value=28987, scc=1
Expected value=28987, 64bit: 28987, expected scc=0
FAILED!! for sub_i32 scc #7: expected=0, result=1
Press ENTER
7770:
Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Capeverde, AddressBits: 32
Device: Capeverde, Driver version: 1800.11
Loading program binary: bugcheck-Capeverde-32-1800.clo
Calling kernel:
sub_i32 #0: 10213 - 1256: value=8957, scc=0
Expected value=8957, 64bit: 8957, expected scc=0
SUCCESS
sub_i32 #1: 13234 - 42221: value=-28987, scc=1
Expected value=-28987, 64bit: -28987, expected scc=0
FAILED!! for sub_i32 scc #1: expected=0, result=1
sub_i32 #2: 6321 - -5343: value=11664, scc=0
Expected value=11664, 64bit: 11664, expected scc=0
SUCCESS
sub_i32 #3: 2114067115 - -63823599: value=-2117076582, scc=0
Expected value=-2117076582, 64bit: 2177890714, expected scc=1
FAILED!! for sub_i32 scc #3: expected=1, result=0
sub_i32 #4: -5343 - 6321: value=-11664, scc=0
Expected value=-11664, 64bit: -11664, expected scc=0
SUCCESS
sub_i32 #5: -63823599 - 2114067115: value=2117076582, scc=0
Expected value=2117076582, 64bit: -2177890714, expected scc=1
FAILED!! for sub_i32 scc #5: expected=1, result=0
sub_i32 #6: -10213 - -1256: value=-8957, scc=0
Expected value=-8957, 64bit: -8957, expected scc=0
SUCCESS
sub_i32 #7: -13234 - -42221: value=28987, scc=1
Expected value=28987, 64bit: 28987, expected scc=0
FAILED!! for sub_i32 scc #7: expected=0, result=1
Press ENTER