🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #216832

Re: Wydajność OpenCL

#216832
From: M.M.
Date: Thu, 26 Mar 2020 10:53
77 lines
5651 bytes
On Tuesday, March 24, 2020 at 9:35:30 PM UTC+1, heby wrote:
> On 24/03/2020 21:19, M.M. wrote:
> > dojdzie - ale pewności nie mam. Szykuję się do napisania kilku
> > kolejnyhch mikro programików do dalszych testów.
> 
> Zainteresuja się książkami do OpenCL i CUDA. Są dostępne w PL i dość 
> jasno tłumaczą ograniczenia architektur obu technologii (w sumie są to 
> ograniczenia identyczne).
> 
> > Czy coś mniej lub bardziej ważnego zapomniałem?
> 
> Najzwyczajniej poszukaj literatury. Algorytmika stosowana w OpenCL/Cuda 
> jest inna niż w normalnym programowaniu imperatywnym na CPU. To jest od 
> dawna rozpracowane, nie musisz szukać np. metody sortowania, są gotowe 
> algorytmy które albo są optymalne dla tej organizacji albo są bliskie.
> 
> >> A potrafisz napisać algorytm który poprawnie (tzn blisko optymalnego)
> >> syntezuje się na FPGA? Co prawda prawie każdy kod w języka HDL można
> >> zsyntezować, ale zdecydowanie nie każdy powinno się syntezować.
> > Jestem laikiem w tej dziedzinie, przeczytałem na wyrywki jedną przypadkową
> > pracę znalezioną w internecie na ten temat. Ktoś opisywał, że poniższy
> > algorytm (SHIFT) na FPGA/ASIC można zrobić w jednym takcie:
> > for( i=256 ; i>0 ; i-- ) {
> >    tab[i] = tab[i-1];
> > }
> 
> Taka pętla na FPGA nie istnieje. Zostaje zsyntezowana do "czegoś" co 
> dalece odbiega od pętli. I niekoniecznie wyrazi to co chciał uzyskać 
> autor. Być może zostanie rozbita na 256*x przerzutników a być może wcale 
> nic nie jest potrzebne bo można zastosować multipleksery wiec wychodzi 
> układ kombinacyjny. To czy syntezer dobrze to zrozumie i dobrze 
> zsyntezuje jest kłopotliwe i języki C-like niespecjalnie nadają się do 
> wyrażenia tego przez programistę. W FPGA sekwencyjność wyrażana jest w 
> inny sposób niż linia po lini kodu źródłowego, preferuje się 
> programowanie eventowe, podaje hinty jak coś ma działać, niektóre 
> konstrukcje równoleglają się same mimo że nie widać tego w kodzie itd itp.
> 
> > Na GPU i na CPU (chyba) taka optymalizacja nie jest możliwa, i to bez względu
> > na ilość rdzeni. Czy kompilatory OpenCL potrafią takie algorytmy efektywnie
> > skompilować na FPGA/ASIC - nie mam pojęcia.
> 
> Z róznych opisów tu i tam wynika że nie potrafią w tej chwili 
> optymalizować tego typu rzeczy w sposób bliski optymalnemu. Nie oznacza 
> to że robią złą robotę, ale programista HDL jest w stanie wyrazić 
> sensowniej co chce bo ma do dyspozycji niższe poziomy abstrakcji do 
> sprzętu. Wygląda na to że technologia jest jeszcze nie do końca sensowna 
> i jest wątpliwość czy pisanie na FPGA w jakimś dialekcie C z OpenCL jest 
> prawidłowym kierunkiem. Być może pojawi się jakiś inny język w OpenCL 
> który pozwoli na detaliczność opisu taką jak daje VHDL czy Verilog.


Chyba naprawdę będę musiał coś poczytać o OpenCL, czasami widzę dziwne
zachowanie w prostych programach. Gdy na GPU są wykonywane jakieś proste
obliczenia w pętli, np. suma losowych liczb:

__kernel void OpenCLPi(__global struct Worker const* workers, const ulong n_loops) {
    struct Worker *const worker = workers + get_global_id(0);
    struct Rnd4Lin rnd;
    seed( &rnd, worker->seed );
    ulong count = 0;
    for( ulong i=0 ; i<n_loops ; i++ ) {
        count += getRnd( &rnd ) & 0xFF;
    }
    worker->count = count;
}

To po zwiększeniu ilości pętli (parametr n_loops) z 1mln do 2mln czas 
obliczeń wzrasta liniowo dwa razy. Gdy zwiększam do 4 mln to też 
zgodnie z oczekiwaniami czas obliczeń wzrasta 4 razy. I to się
sprawdza gdzieś do około 10mln. Gdy ilość pętli jest równa 10mln to
czas wydłuża się 10-krotnie. Natomiast gdy zwiększam do 20mln to w
ogóle nie mogę doczekać się końca obliczeń, a gdy przerwę program po
długim czasie, to w statystykach widzę, że dużo obliczeń było 
wykonywanych na CPU. Nie wiem z czego to wynika, czas powinien wzrastać
liniowo, bo liniowo wzrasta ilość pętli.

Pozdrawiam
Technical Details
Message-ID: <848b8e14-d7d6-4d6d-a0f5-cf3dc2945bd0@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!newsfeed.xs4all.nl!newsfeed7.news.xs4all.nl!tr2.eu1.usenetexpress.com!feeder.usenetexpress.com!tr2.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <c474307f-ba6b-4c59-9d5e-a289203ec68e@googlegroups.com> <3d171e03-6864-4baf-acb7-519173a49f25@googlegroups.com> <r5dhol$h0v$1@dont-email.me> <34b7a503-d78e-4b34-bf45-38868903b659@googlegroups.com> <r5dqug$sic$1@dont-email.me>

Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:6b08:: with SMTP id w8mr7265454qts.326.1585220005021; Thu, 26 Mar 2020 03:53:25 -0700 (PDT)
X-Received: by 2002:a37:db0a:: with SMTP id e10mr7235814qki.273.1585220004805; Thu, 26 Mar 2020 03:53:24 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!newsfeed.xs4all.nl!newsfeed7.news.xs4all.nl!tr2.eu1.usenetexpress.com!feeder.usenetexpress.com!tr2.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Thu, 26 Mar 2020 03:53:24 -0700 (PDT)
In-Reply-To: <r5dqug$sic$1@dont-email.me>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=159.205.157.75; posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
NNTP-Posting-Host: 159.205.157.75
References: <c474307f-ba6b-4c59-9d5e-a289203ec68e@googlegroups.com> <3d171e03-6864-4baf-acb7-519173a49f25@googlegroups.com> <r5dhol$h0v$1@dont-email.me> <34b7a503-d78e-4b34-bf45-38868903b659@googlegroups.com> <r5dqug$sic$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <848b8e14-d7d6-4d6d-a0f5-cf3dc2945bd0@googlegroups.com>
Subject: Re: Wydajność OpenCL
From: "M.M." <mmarszik@gmail.com>
Injection-Date: Thu, 26 Mar 2020 10:53:25 +0000
Lines: 119
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit