LINUX.ORG.RU

SSE2 + GCC


1

0

Для того чтобы использовать всю прелесть SSE2 для работы с упакованными вещественными числами двойной точности нужно использовать __builtin_ia32_.... инструкции, сам компилер упаковывать данные неумеет (как я понял). так вот инструкцию запаковки я нашел:
v2df __builtin_ia32_loadhpd (v2df, double *)
1) мне не понятен смысл первого аргумента, кто знает нафига он там?

а вот распаковка получается как-то криво:
v2df __builtin_ia32_unpckhpd (v2df, v2df)
void __builtin_ia32_storeupd (double *, v2df)

2) с последней все понятно, а вот с unpckhpd не совсем понятно - зачем третий аргумент, и каково вообще их предназначение? Я кое о чем догадываюсь но только кое о чем..

3) На сколько мне изветно movhpd которую генерит __builtin_ia32_loadhpd двухсторянняя - ей можно как загружать в верхнюю часть xmm регистра 8 байт (подразумевается число с плавающей точкой двойной точности) так и выгружать вершние 8 байт регистра xmm в память. Внимание вопрос - это можно сделать при помощи __builtin_ia32_.... или нет? что-то я не нашел нужной инструкции в http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/X86-Built_002din-Functions.html#X...

4) Может кто знает где есть более менее нормальный хелпак по применению __builtin_ia32? Они конечно с ассемблером совпадают но как оказалось не всегда...

anonymous

А инструкцию читать не пробовали?

On some targets, the instruction set contains SIMD vector instructions
that operate on multiple values contained in one large register at the
same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions
can be used this way.

The first step in using these extensions is to provide the necessary
data types. This should be done using an appropriate `typedef':

typedef int v4si __attribute__ ((vector_size (16)));


И далее по тексту.

Dselect ★★★
()
Ответ на: А инструкцию читать не пробовали? от Dselect

Вот блин все какие умные вокруг пошли... Я эту писанину на изусть выучил уже. Тут КОНКРЕТНЫЕ ВОПРОСЫ ПО КОНКРЕТНОЙ АРХЪИТЕКТУРЕ и на них хочется услышать ответы УМНЫХи ЗНАЮЩИХ людей, а не критинов освоивших копипаст!

anonymous
()
Ответ на: комментарий от anonymous

Мозг и так скоро закипит, а тут еще академические мысли в стиле ЛОР выдают, нет чтобы дать грамотный ответ, так нет надо показать всем какой я "умный", че так сложно - не знаешь лучше промолчи а не манами тыкай.

anonymous
()
Ответ на: комментарий от anonymous

Чукча — писатель?

> Я эту писанину на изусть выучил уже.

Ну хорошо, теперь попробуйте подумать над прочитанным.

> v2df __builtin_ia32_loadhpd (v2df, double *)
> 1) мне не понятен смысл первого аргумента, кто знает нафига он там?

Чтоб указать, в какой регистр нужно грузить значение.

> Тут КОНКРЕТНЫЕ ВОПРОСЫ ПО КОНКРЕТНОЙ АРХЪИТЕКТУРЕ

Чего орать-то? Я Вам что, денег должен?

> и на них хочется услышать ответы УМНЫХи ЗНАЮЩИХ людей,

Можете написать авторам вот этого -- http://arxiv.org/pdf/astro-ph/0511062

> а не критинов освоивших копипаст!

Освойте русский язык для начала, и научитесь не грубить незнакомым людям.


Dselect ★★★
()
Ответ на: комментарий от anonymous

Каков вопрос, таков ответ.

> Мозг и так скоро закипит,

Ваши личные проблемы никому не интересны.

> а тут еще академические мысли в стиле ЛОР выдают, нет чтобы дать
> грамотный ответ,

Чтоб получить грамотный ответ, нужно задать грамотный вопрос.

Dselect ★★★
()

> 3) На сколько мне изветно movhpd которую генерит __builtin_ia32_loadhpd
> двухсторянняя - ей можно как загружать в верхнюю часть xmm регистра 8 байт
> (подразумевается число с плавающей точкой двойной точности) так и выгружать
> вершние 8 байт регистра xmm в память. Внимание вопрос - это можно сделать
> при помощи __builtin_ia32_.... или нет?

__builtin_ia32_storehpd(double*, v2df)

Dselect ★★★
()
Ответ на: комментарий от Dselect

__builtin_ia32_storehpd(double*, v2df) тоже нет, не в манах на gcc ни в реалии жизни...

anonymous
()
Ответ на: комментарий от anonymous

> ну нет такой штуки в gcc 4.3 и 4.2

Не знаю, не видел. В 3.3.X и 3.4.5 точно есть.

> а в статье ей пользуются...

Статья -- 2005-го года, никаких gcc 4.{2,3} тогда и в задумках не было.

Dselect ★★★
()
Ответ на: комментарий от anonymous

А если по делу и бей эмоций то __builtin_ia32 не для того чтобы их юзал прикладной программер, это внутренний интерфей и он как ищущие люди успели заметить недокументирован, нужно использовать примитивы определенные в
/usr/include/emmintrin.h
/usr/include/mmintrin.h
/usr/include/pmmintrin.h
/usr/include/xmmintrin.h
Они полностью реализуют интеловскую спецификацию (на icc9 + как ими пользоваться написано в Intel Software Development Manual)
Вот так.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.