Portál AbcLinuxu, 9. května 2025 23:45
Zdravím, hraju si s __attribute__((vector_size(...))) a operacemi nad vektory, ale nedokážu přijít na to, jak se podívat na výsledek. Zde je kód:
#include<iostream> typedef double v3sd __attribute__((vector_size(sizeof(double)*4))); v3sd main(void){ v3sd a={2.,2.,2.,2.}, b={5.,5.,5.,5.}; v3sd c=a+b; std::cout<<c[0]<<std::endl }
Ale překladač mi na poslední řádce napíše error: invalid types ‘double __vector__[int]’ for array subscript. Jak se tedy mám dostat k jednotlivým číslům v tom výsledném vektoru? Zkoušel jsem to přetypovat na double* apod., ale bez úspěchu. Na googlu jsem nic nenašel, jen tohle, kde definuje union{ double v __attribute__((vector_size(sizeof(double)*4)); double d[4]; },
, ale tam mi zase nefunguje inicializace.
Dokáže mi s tím někdo poradit? Dík.
Cau ,
pozri toto http://ds9a.nl/gcc-simd/ ,
Chcel som sem vhodit nejaky ukazkovy kod ale , nejako to odmieta vlozit kod v C , a vypisuje hluposti .
Tak daj mail a poslem ti ukazkovy program
Ahoj, dík za link, dej ten svůj program na pastebin.com a dám ho sem, aby z toho měli taky ostatní něco. Zkoušel jsem to ještě bez těch hezkých inicializátorů, to se zkompiluje:
#include<stdio.h> typedef union{ double v __attribute__((vector_size(sizeof(double)*4))); double d[4]; } v3sd; int main(void){ v3sd a,b; a.d[0]=.2; a.d[1]=.2; a.d[2]=.2; a.d[3]=.2; b.d[0]=.5; b.d[1]=.5; b.d[5]=.5; b.d[3]=.5; v3sd c; c.v=a.v+b.v; printf("%f %f %f %f\n",c.d[0],c.d[1],c.d[2],c.d[3]); }
A výsledek
0.700000 1.000000 0.200000 0.700000
Takže úplně ono to není...
Aha :-| Udělal jsem na té druhé řádce s/a/b/g a s/2/5/g a vedlejší účinek jsem přhlédl. Vážně to funguje. Díky!
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.