Jump to content
matszpk

Błąd sprzętowy w GPU radeonów (GCN)

Recommended Posts

cześć. znalazłem błąd w GPU radeonów w obsłudzie pewnej instrukcji: S_SUB_I32. Szczegóły są podane w https://community.amd.com/thread/191288. Tam wsadziłem program, który sprawdza czy występuje taki błąd (jest wersja pod Windows, działa z poziomu linii poleceń).

Błąd został wykryty w Radeon HD 7850 (Pitcairn) i CapeVerde. Jestem ciekaw czy występuje w innych GPU (np.: Bonaire, Hawaii, Fiji, Tonga). Prosiłbym, żebyście uruchomili ten program i sprawdzili czy ten błąd występuje.

Plik z programem też jest w tym wątku

EDIT: Poprawione binaria dla windows. powinno już działać.

EDIT2: Program już czeka na reakcji użytkownika (dla użytkowników Windows).

radeonbug0_5.zip

Edited by matszpk

Share this post


Link to post
Share on other sites

a skąd pewność, że ten błąd wykonania instrukcji wynika z hardware ?

Działanie tej instrukcji nie wynika z ustawień. To instrukcja samego GPU (nie żaden AMDIL, inny IL, LLVMIR) w kodzie maszynowym, poza tym operuje na liczbach całkowitych. czy to shader czy OpenCL ma działać tak samo. GPU takie operacje wykonuje i on powinien wykonać instrukcję poprawnie. prosiłbym, żebyście spróbowali odpalic ten program, źródła są w tym samym pliku.

Edited by matszpk

Share this post


Link to post
Share on other sites

u mnie na radku 7870 "error code=0" zarówno na 64 jak i 32 bit ;)

hmm. pewnie jakiś błąd w programie... podaj co wypluwa program.

chyba, źle wykrywa OpenCL i urządzenia, ten cholerny AMDAPP, pod windows...

EDIT: Poprawione binarki. powinno już działać.

Share this post


Link to post
Share on other sites

cześć. znalazłem błąd w GPU radeonów w obsłudzie pewnej instrukcji: S_SUB_I32. Szczegóły są podane w https://community.amd.com/thread/191288. Tam wsadziłem program, który sprawdza czy występuje taki błąd (jest wersja pod Windows, działa z poziomu linii poleceń).

Błąd został wykryty w Radeon HD 7850 (Pitcairn) i CapeVerde. Jestem ciekaw czy występuje w innych GPU (np.: Bonaire, Hawaii, Fiji, Tonga). Prosiłbym, żebyście uruchomili ten program i sprawdzili czy ten błąd występuje.

Plik z programem też jest w tym wątku

EDIT: Poprawione binaria dla windows. powinno już działać.

EDIT2: Program już czeka na reakcji użytkownika (dla użytkowników Windows).

 

Na Fiji problem nie wystepuje.

 

Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Fiji, AddressBits: 64
 
Device: Fiji, Driver version: 1800.11
Loading program binary: bugcheck-Fiji-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
 
Press ENTER

Share this post


Link to post
Share on other sites

wielkie dzięki :). chciałem się tylko tego dowiedzieć, czy ten błąd występuje w następnych generacjach. czyli tylko GCN 1.0 spartaczone. dzięki.

Zajmujesz się ISA GCN z ciekawości, czy jest to część jakiegoś projektu? (:

Share this post


Link to post
Share on other sites

Usage: bugcheck GPUDEVICEINDEX
Using GPU Device #0
List of devices:
Device #0, name: Pitcairn, AddressBits: 32

Device: Pitcairn, Driver version: 1800.11
Loading program binary: bugcheck-Pitcairn-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

Aktualnie testowane R7 265.

Share this post


Link to post
Share on other sites

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

7950

Share this post


Link to post
Share on other sites

HD 7950 rev.1

Device: Tahiti, Driver version: 1800.8
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

Ok, wiemy już, że jest błąd - teraz pytanie, co to oznacza dla końcowego użytkownika...

Edited by Dammeron

Share this post


Link to post
Share on other sites

w grach może to nie mieć żadnego znaczenia. gorzej dla aplikacji OpenCL tam taki błąd może przekreślić obliczenia. jednak błąd dotyczy specyficznej funkcji: ustalania nadmiaru liczb ze znakiem (to może nie być wykorzystane w typowych aplikacjach OpenCL), więc duże znaczenie to może mieć tylko dla programistów zapaleńców, którzy będą chcieli pisać programy dla GPU na poziomie assemblera... Jeszcze nie wiem czy ta funkcja (overflow) jest wykorzystana przez kompilator OpenCL (jeśli tak to jest problem).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...




×
×
  • Create New...