abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 11:40 | Pozvánky
Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15.-16.2. 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24.1.) v brzkých odpoledních hodinách.
TomasVondra | Komentářů: 0
včera 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
včera 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 6
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
20.1. 06:00 | Komunita

Bylo spuštěno hlasování o přednáškách a workshopech pro letošní InstallFest, jenž proběhne o víkendu 4. a 5. března v Praze. Současně byla oznámena změna místa. InstallFest se letos vrací zpět na Karlovo náměstí do budovy E.

Ladislav Hagara | Komentářů: 0
20.1. 02:48 | Komunita

Greg Kroah-Hartman potvrdil, že Linux 4.9 je jádrem s prodlouženou upstream podporou (LTS, Long Term Support). Podpora je plánována do ledna 2019. Aktuální jádra s prodlouženou podporou jsou tedy 3.2, 3.4, 3.10, 3.12, 3.16, 3.18, 4.1, 4.4 a 4.9.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (4%)
 (10%)
Celkem 367 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

Dotaz: vektory a matice se SIMD (sse2)

20.12.2006 14:08 vencas | skóre: 32
vektory a matice se SIMD (sse2)
Přečteno: 296×
Zdravím, může mi někdo vyjasnit, které knihovny implementující (malé) matice a vektory používají sse2?
  1. atlas-sse2 je používá, rád bych případně něco s trochu objektovým rozhraním.
  2. Blitz++ si dělá jen svoje optimalizace na úrovni c++ (bez SIMD)?
  3. boost::ublas knihovnu blas (zde v implementaci atlas-sse2) nepoužívá (zběžně pročtené headery)...?
Konečně, když napíšu něco jako (resp. když je něco takového v nějaké knihovně):
double a[3], b[3], c[3];
[...]
c[0]=a[0]*b[0]; c[1]=a[1]*b[1]; c[2]=a[2]*b[2];
dokáže to gcc optimalizovat a použít na to vektorový součin (MULPD) místo jednotlivých násobení?

Díky.

Odpovědi

Marek Stopka avatar 20.12.2006 14:30 Marek Stopka | skóre: 57 | blog: Paranoidní blog | London, United Kingdom
Rozbalit Rozbalit vše Re: vektory a matice se SIMD (sse2)
Jen střílím, ale při použití parametrů -mfpmath=sse -msse -msse2 by to mohlo dělat gcc samo, ne?
20.12.2006 14:54 vencas | skóre: 32
Rozbalit Rozbalit vše Re: vektory a matice se SIMD (sse2)
Mezitím jsem si to vyzkoušel a bohužel nedělá (mimochodem, HTML validita příspěvků, to je fakt PITA - < a > jsem nahradil |).

Kompilace: řekl bych, že -march=pentium4 implikuje -msse{,2,3}, ale v man to není. Na výsledek to každopádně nemá vliv; -ggdb3 taky nemá vliv, akorát je vidět zdroják v dumpu. Pořád tam je 3x mulsd.
$ gcc -ggdb3 -O3 -march=pentium4 -mfpmath=sse,387 -msse -msse2 -msse3 sse1.c -o sse1
$ objdump -d -S sse1
[...]
08048354 |main|:
#include|stdio.h|
int main(void){
 8048354:       8d 4c 24 04             lea    0x4(%esp),%ecx
 8048358:       83 e4 f0                and    $0xfffffff0,%esp
 804835b:       ff 71 fc                pushl  0xfffffffc(%ecx)
 804835e:       55                      push   %ebp
 804835f:       89 e5                   mov    %esp,%ebp
 8048361:       51                      push   %ecx
 8048362:       83 ec 54                sub    $0x54,%esp
        volatile double a[3], b[3];
        double c[3];
        a[0]=.5; a[1]=.5; a[2]=.5;
 8048365:       f2 0f 10 05 c0 84 04    movsd  0x80484c0,%xmm0
 804836c:       08 
 804836d:       f2 0f 11 45 e0          movsd  %xmm0,0xffffffe0(%ebp)
 8048372:       f2 0f 11 45 e8          movsd  %xmm0,0xffffffe8(%ebp)
 8048377:       f2 0f 11 45 f0          movsd  %xmm0,0xfffffff0(%ebp)
        b[0]=.5; b[1]=.5; b[2]=.5;
 804837c:       f2 0f 11 45 c8          movsd  %xmm0,0xffffffc8(%ebp)
 8048381:       f2 0f 11 45 d0          movsd  %xmm0,0xffffffd0(%ebp)
 8048386:       f2 0f 11 45 d8          movsd  %xmm0,0xffffffd8(%ebp)
        c[0]=a[0]*b[0]; c[1]=a[1]*b[1]; c[2]=a[2]*b[2];
 804838b:       f2 0f 10 5d e0          movsd  0xffffffe0(%ebp),%xmm3
 8048390:       f2 0f 10 6d c8          movsd  0xffffffc8(%ebp),%xmm5
 8048395:       f2 0f 10 55 e8          movsd  0xffffffe8(%ebp),%xmm2
 804839a:       f2 0f 10 65 d0          movsd  0xffffffd0(%ebp),%xmm4
 804839f:       f2 0f 10 45 f0          movsd  0xfffffff0(%ebp),%xmm0
 80483a4:       f2 0f 10 4d d8          movsd  0xffffffd8(%ebp),%xmm1
        printf("c=%g,%g,%g\n",c[0],c[1],c[2]);
 80483a9:       f2 0f 59 c1             mulsd  %xmm1,%xmm0
 80483ad:       f2 0f 11 44 24 14       movsd  %xmm0,0x14(%esp)
 80483b3:       f2 0f 59 d4             mulsd  %xmm4,%xmm2
 80483b7:       f2 0f 11 54 24 0c       movsd  %xmm2,0xc(%esp)
 80483bd:       f2 0f 59 dd             mulsd  %xmm5,%xmm3
 80483c1:       f2 0f 11 5c 24 04       movsd  %xmm3,0x4(%esp)
 80483c7:       c7 04 24 b0 84 04 08    movl   $0x80484b0,(%esp)
 80483ce:       e8 bd fe ff ff          call   8048290 |printf@plt|
        return 0;
}
[...]
21.12.2006 10:16 vencas | skóre: 32
Rozbalit Rozbalit vše Re: vektory a matice se SIMD (sse2)
Co se gcc týče, našel jsem článek Automatic vectorization for the masses. Zkoušel jsem to na gcc-4.1 a výsledek je následující (options -O2 -ftree-vectorize -ftree-vectorizer-verbose=3 -march=pentium4):
  • c[0]=a[0]*b[0]; c[1]=a[1]*b[1]; c[2]=a[2]*b[2]; se nezvektorizuje (fuj, to je hnusný slovo...), ale
  • for(int i=0; i<3; i++) c[i]=a[i]*b[i]; ano.
(Myslel jsem si, že když se rozbalují smyčky (loop unrolling), tak se z for udělá stejně něco podobné tomu prvnímu. Zřejmě ne úplně.)

Jak autor zmíněného článku píše, podobné optimalizace mohou vést k nestabilnímu kódu.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.