gcc vector (SIMD) kiterjesztés kérdés

 ( szemet | 2011. április 11., hétfő - 23:04 )

Van egy v4si (4 32 bites int-ből álló 128 bites) vektorom. Mi a bevett módja ellenőrizni, hogy 0-e? (azaz mind a négy int 0)

megjegyzések: Igazából csak a gyorsaság számít, hordozhatóság nem, és intel core 2-n futtatnám 32 bites módban. (intel kiterjesztések mmx-től sse3-ig használhatók, gcc 4.5.2)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

movups xmm0, ...
xorps xmm1, xmm1

cmpeqps xmm0, xmm1
movmskps eax, xmm0

or eax, eax
jz zero
non_zero:

zero:

Meg olcsobb asm-ben kezelni simd utasitasokat, igy azt hasznalom a makrok helyett. gcc vector engine meg egy rakas szar sajnos, leginkabb a befejezetlen vacak jut rola eszembe.

---
pontscho / fresh!mindworkz

es mennyire erdemes intrinsic utasitasokat hasznalni?

--
NetBSD - Simplicity is prerequisite for reliability

Azokat inkabb. VS-t leszamitva minden eleg jol tud veluk/rajtuk optimalizalni.

---
pontscho / fresh!mindworkz

Köszönöm szépen, azt hittem van erre valami egyszerűbb bevett megoldás is. (De működik ez is gcc-ben (AT&T-esítés után), annyi kiegészítéssel még, hogy eax-be b1111 (15) kerül amikor xmm0 zérus, szóval arra kell tesztelni / vagyhát not eq-val kell inkább)

Igazabol az ott egy kodreszlet volt egy mc algobol, ott mas feltetelek voltak es lusta voltam utana szamolni mi lesz a regiszterben. De annyi a sztori, h jz helyett akkor jnz kell es amen. :)

---
pontscho / fresh!mindworkz