|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 26, 2003 16:40:15 Народ, видел кто-нить примеры по использованию сабжа (именно примеры а не доки)? Было бы интересно посмотреть на примеры реализации простейших функций типа скалярного произведения 2D/3D векторов и т.п. А то я вот попробовал написать ради интереса, и не знаю, оптимально или нет. |
|
|
Дата: Мар 31, 2003 17:20:26 Если кому интересно, дописал я эту хреновину (см. выше). Взял достаточно типичную задачу: Есть массив 2D треугольников. Определить, в какой треугольник попадает заданная 2D точка. Результаты следующие: 1. На Delphi - 260 мс. 2. На FPU - 90 мс 3. На SSE2 - 60 мс. Если кому интересно, могу дать исходники. Имеющийся код далеко не претендует на образец оптимизации... пока. Вообще, было бы хорошо, общими усилиями оптимизировать это дело. А то, IMHO, хреновиной занимаетесь - то "Hello world в 12 байт", то еще че :(( Нет, чтобы че нить полезное сделать... |
|
|
Дата: Апр 1, 2003 14:52:42 после 6 часов ночной оптимизации получено следующее: 1. Делфи - 100 мс + компиляция с оптимизацией 2. FPU - 40 мс 3. SSE2 - 50 мс может кто объяснить в чем же прелесть SSE2? самое смешное, что код для SSE2 короче, чем для FPU, а работает дольше. кто нибудь тут вообще оптимизацией занимался? |
|
|
Дата: Июл 15, 2003 17:06:01 Я тоже занимаюсь оптимизацией на SSE!!! Но результаты тоже довольно скромные!!! что на написано на C - сделал с SSE и работает в 2 раза быстрее!! Задумки есть что нужно буфер научиться использовать!! Команда prefetcht и поспотреть все инструкции в микрооперациях!! Если кто знает подскажите плиз!! |
|
|
Дата: Июл 15, 2003 17:50:42 Аноним А что такое Edmond@wasm.ru -- и ваши исходники плиз... Я всегда рад хорошим исходникам. |
|
|
Дата: Июл 15, 2003 17:55:24 А в коллекции уже есть подобные исходники??? чтобы посмотреть как люди делают??? На сайте я не видел?? |
|
|
Дата: Июл 15, 2003 17:59:11 Я тоже -- это будет первый!!! |
|
|
Дата: Июл 15, 2003 18:17:00 Ну наконец-то хоть кто-то заинтересовался... Осталось только найти исходники - я давно забил на это дело. На днях кину Эдмонду (если найду), может общими усилиями научимся чему нибудь... |
|
|
Дата: Июл 15, 2003 18:23:43 Я готов!! Только побыстрее бы!!!! |
|
|
Дата: Июл 15, 2003 19:18:23 Вопрос админам... Почему данная тема не появляется у меня (про других незнаю) в списке "Последние обсуждения"? Жал рефреш, нифига :( |
|
|
Дата: Июл 15, 2003 19:25:39 Ну что там с исходниками??? надо КЭШ ботанить!!! |
|
|
Дата: Июл 16, 2003 12:46:17 Max Очень странно. А вы уверены, что рефрешь верно сработал? |
|
|
Дата: Июл 16, 2003 13:09:24 Edmond Абсолютно, и такое уже давно. Данную ветку приходится искать через поиск. All Хочу отметить сразу, что все это писАлось исключительно для себя в целях эксперимента. Данный экзампл далеко не претендует на образец оптимизации, использования SSE2 инструкций и т.п., ...скорее наоборот. Для себя я изначально сформулировал следующую задачу: Дано: массив 2D треугольников Найти: индекс треугольника, в который попадает заданная 2D точка. Прим.: а) значения координат - целочисленные (32 бит), при вычислениях использовать double (64 бит) для избежания потери точности. б) при попадании точки на ребро треугольника, считать, что точка принадлежит треугольнику. Типа фичи: 1. Написано на паскале ;). 2. Компилить под Делфи7 - более ранние версии не понимают SSE2 мнемоник, а писАть в байт-кодах - это мазохизм. 3. Уж не помню, как это называется по научному, но для представления данных используется отдельно массив X и Y координат (а не array of record), просто мне показалось, что так будет алгоритмически проще. 4. Не используется выравниваение памяти на 16 байт (а соответсвенно и команд типа movdqa) - выравнивание троек координат на 16 байт увеличивает расход памяти существенно, а выйгрыш по скорости очччень небольшой (порядка единиц процентов). 5. Под массив координат выделяется на 4 байта больше, т.к. фактически координаты грузятся в XMM регистр четверками а не тройками. 6. Для ускорения развернут цикл вычисления знака расстояния от точки до прямой, совпадающей с ребром треугольника. Алгоритмически все три процедуры (Find_SSE2, Find_FPU, Find) эквивалентны. Для SSE2 дан подробный комментарий происходящего, для чистого паскаля и так все ясно. Отлаживать это дело было весело, т.к. делфя не показывает состояние xmm регистров. После каждой асмовской строчки шел вызов типа call SaveXmm, где все xmm регистры перегонялись в глобальные переменные, наблюдаемые в окне Watch. Эти куски кода я давно грохнул физически, так что если кому надо - придется повторить самостоятельно. Да и делфевый отладчик постоянно глючит при работе с SSE. В экзампле тестируется худший вариант, когда точка не попадает ни в один из треугольников. На моем P4, 2.4 MHz, RAM 512 Mb 533 MHz, 1Е6 треугольников, результаты следующие: 1. SSE2 = 48 ms 2. FPU = 35 ms 3а. PAS с оптимизацией = 89 ms 3б. PAS без оптимизации = 203 ms З.Ы. У кого нету Делфи7, в комплекте идет екзешник откомпилированный с оптимизацией. З.Ы.Ы. Хотелось бы увидеть/услышать идеи или примеры оптимизации всего этого дела. 868726695__sse2demo.zip |
|
|
Дата: Июл 16, 2003 13:21:31 Max Спасибо поглядим |
|
|
Дата: Июл 16, 2003 13:54:14 ошибочку там нашел... в методах Get/SetTriangles стоит ofs:=Index shl 2. Это осталось со старых времен, когда записи были выровнены. Надо поставить ofs:=Index*3. В примере это не используется, так что и так работать будет. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046 |