ПрограммированиеФорумГрафика

Unity/Mono.Simd небольшое расхождение в результатах

Страницы: 1 2 Следующая »
#0
23:57, 23 мая 2015

А это нормально, что результаты полученные с помощью simd кода немного отличаются от кода без онного?
ну , например рейкаст из миллиона лучей обычным кодом дает 500000 пересечений а simd 500005, сцена абсолютно одинаковая и статичная. Алгоритм тоже одинаковый, только данные векторизованы.

#1
0:35, 24 мая 2015

Регистр SSE - 32 бита, регистр AVX - 64 бита, а регистр FPU - 80 бит. Точность разная, может, в этом дело?

#2
1:07, 24 мая 2015

Mira
ну для меня вопрос нужен\не нужен не стоит после того как я добился ускорения на 100%. Просто хочу понять изза чего разные результаты получаются.
Кстати, речь об юнити и c#. Компилятор там один(почти).

#3
1:44, 24 мая 2015

Моласар
> Регистр SSE - 32 бита, регистр AVX - 64 бита, а регистр FPU - 80 бит.
Ау, это что за бред?

Polyflow3d
> Просто хочу понять изза чего разные результаты получаются.
А как ты настраиваешь FPU/SSE? Если никак - сам себе злобный буратино.

#4
1:47, 24 мая 2015

тогда фиг его знает, если float и там и там. может опять все сводитсмя к потере точности из-за лишнего умножения и упирается в тотже эпсилон =)

#5
2:15, 24 мая 2015

Bishop
> Ау, это что за бред?
Судя по твоему посту, ты знаешь такие аббревиатуры, как FPU и SSE. Уже хорошо. Тогда в чём же именно ты увидел "бред"?

#6
13:45, 24 мая 2015

Моласар
> Регистр SSE - 32 бита, регистр AVX - 64 бита[b]Моласар[/b]
Регистры в SSE имеют размер 128 бит https://ru.wikipedia.org/wiki/SSE
Регитсры в AVX имеют размер 256 бит https://ru.wikipedia.org/wiki/AVX

#7
13:50, 24 мая 2015

kostian75
Я уже поделил на 4, чтобы наглядно показать, сколько бит на одно число с плавающей точкой придётся. Не нужно цепляться к словам. Слово "регистр" тут употреблено в значении "аналог регистра FPU", а не в значении физического регистра, который, вообще говоря, нас не интересует в вопросах точности.

#8
21:11, 24 мая 2015

Моласар
SSE - длина регистра 128 бит
AVX - 256 бит
AVX512 - 512 бит

FPU может работать в режимах точности 32, 64 и 80 бит. SSE и AVX могут работать в режимах точности 32 и 64 бит. Единственное что мне пришло на ум, это то, что ты под SSE мог подразумевать машины без SSE2, но все x86_64 процессоры держат SSE2+, т.е. речь о процах до 2007 года чтоли? Думаю нет, да и про AVX было, а это уже явно что-то поновее.

Моласар
> Я уже поделил на 4, чтобы наглядно показать, сколько бит на одно число с
> плавающей точкой придётся. Не нужно цепляться к словам. Слово "регистр" тут
> употреблено в значении "аналог регистра FPU", а не в значении физического
> регистра, который, вообще говоря, нас не интересует в вопросах точности.
Oo. А что тогда делает ADDPD XMM0, XMM1? Вот ответ из доки:

ADDPD (128-bit Legacy SSE version)
DEST[63:0] ← DEST[63:0] + SRC[63:0];
DEST[127:64] ← DEST[127:64] + SRC[127:64];

#9
21:55, 24 мая 2015

Bishop
> FPU может работать в режимах точности 32, 64 и 80 бит.
Если не трогать контролфп, то он работает в 64 битах на 32-битных осях и 80 битах на 64-битных (о чём я и говорил).
SSE всегда даёт 32-битную точность, если не использовать SSE2, который таки да, работает с даблами, НО может обработать только два дабла за операцию (как в приведённом addpd). Поэтому я даже не говорю про ущербность под названием SSE2+, а вот AVX уже умеет 4 дабла за такт и может потягаться по точности с сопром - хотя 80-битной точности и не достигает.
Насчёт ZMM-регистров я не в курсе, есть ли там работа с 4-мя extended double за раз, т.к. не работал с AVX2.
Так что прежде чем хамить пользователям, употребляя в их адрес слово "бред", неплохо бы сначала выяснить, что имелось в виду.

#10
22:18, 24 мая 2015

Моласар
>Если не трогать контролфп, то он работает в 64 битах на 32-битных осях
Источник?

#11
22:38, 24 мая 2015

FordPerfect
Не помню, где-то читал. Возможно, это относится только к старым компиляторам. Сейчас глянул в MSDN - пишут, что /fp:precise ставит extended double.
В любом случае, точность FPU не ниже double, если принудительно не выставить контролфп-ом или в настройках компилятора.

#12
23:46, 24 мая 2015

Моласар
> Если не трогать контролфп
Ну так трогай. Я выше написал что не настраивать что FPU, что SSE верх глупости. т.к. результаты будут какие попало.

> Поэтому я даже не говорю про ущербность под названием SSE2+
Ну вот и зря. По 2 дабла всёже лучше чем по одному. Как бы в 2 раза быстрее.

> Так что прежде чем хамить пользователям, употребляя в их адрес слово "бред",
> неплохо бы сначала выяснить, что имелось в виду.
Может я и погорячился, но вам бы не мешало тогда чётко писать что вы имеете ввиду. Т.к. телепатов тут нет, а регистры SSE всё же 128-бит. Сейчас я понял что вы имели ввиду, но сразу - нет. Мало того, вы ещё и выразились неверно. Нет SSE или AVX регистров, есть только XMM и YMM. Да можно о них сказать как о SSE и AVX, но когда так говорят обычно не подразумевается версия SSE и AVX. Т.е. говоря про SSE регистры набор команд может быть смело SSE4.2. Короче у вас вкрай не точная формулировка.

#13
0:16, 25 мая 2015

Bishop
> Я выше написал что не настраивать что FPU, что SSE верх глупости. т.к.
> результаты будут какие попало.
Ну так в SSE любой версии нельзя получить 80-битную точность, как на FPU. Я сразу предположил, что отсюда и проблемы точности у ТС-а.
> По 2 дабла всёже лучше чем по одному. Как бы в 2 раза быстрее.
Вот лично мне - неудобно по 2 дабла. Видимо, и другим было неудобно, раз придумали AVX.

#14
1:00, 25 мая 2015

Моласар
> Ну так в SSE любой версии нельзя получить 80-битную точность, как на FPU. Я
> сразу предположил, что отсюда и проблемы точности у ТС-а.
В этом вы правы. Я акцентирую внимание на том, что нужно сразу и чётко решать с какой точностью делать вычисления и делать соотв. установки. Конечно если вы решили что вам нужно именно 80 бит, то ни о каком SIMD речи идти не может.

> Вот лично мне - неудобно по 2 дабла.
Ну мало ли кому что не удобно... на асме писать так вообще очень не удобно, но когда надо - делаешь. Тут тоже самое. Вот тебе набо по задаче 64-бит точность, а есть только 128 битные регистры. Ну и будешь по 2 считать :)

> Видимо, и другим было неудобно, раз придумали AVX.
Не потому. Плюс сам AVX имеет только по 8 Float. Работа с даблами с AVX2.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.