%username%
как бы от AVX сейчас пользы нуль целых хрен десятых, а будет 2*(нуль целых хрен десятых)

На текущий момент AVX в большинстве своем - просто дублирование SSE инструкций без каких либо ускорений. Да и на сайте Intel никто никогда не обещал ускорения SAD операций при использовании AVX, в отличие от AVX2.

%username% wrote:

эээ хасвел как бы не прорыв производительности, всего +10% к иви обещают

При том же коде - да. Но самые тяжелые операции SAD16x16 и SAD8x8 на AVX2 будут обсчитывать в 2 раза больше (256 vs 128 - сейчас). Теоретически это даст прирост в 60% на функции SAD. Есть еще один нюанс: компания Intel без всякого шума и фанфар подтягивает производительность некоторых "старых" операций. В Core 2 например подтянули скорость rep movsd. Причем так, что использование SSE2 не дает никакого доп. преимущества.

53

(395 replies, posted in Эксплуатация SVP)

Chainik
Хм... интересно, в чем определяется разница между Win7 и Win8? Неужели WDDM 1.2 дает какие-то преимущества в OpenCL?

54

(395 replies, posted in Эксплуатация SVP)

Протестировал Catalyst 12.10. Рост 2-2.5% (2692 vs 2634) по сравнению с 12.8. Версия с доработанным avisynth так же дала рост 3% (2784 vs 2695). В общем рекомендую 12.10 для HD7xxx

Эта картинка дает представление что улучшилось. Для нас это:

  • Ускоренное деление (вспоминаем разницу Ivy и Sandy)

  • Улучшенный кэш L2

  • Улучшенный предсказатель загрузки (prefetcher)

56

(22 replies, posted in Флуд)

Chainik wrote:

yartat
Даже если скорость внезапно увеличится вдвое, такой результат в этой конкретной базе не нужен, он не будет адекватен. Это тест железа, а не SPEC, и, как тест железа, подразумевает одинаковость софтовой части.

Вы одновременно и правы, и не правы: с одной стороны - да - это тест совтовой части, которая должна быть идентичной для всех платформ, с другой стороны вы произвели оптимизации в самом svpflow, создав разницу в исполнении между mvtools2_svpmark.dll и svpflow1.dll. На разных платформах разница может варьироваться. Таким образом имеем марк, который не отражает реальной производительности svpflow.
Я извиняюсь за свое поведение и удалю (если вы еще не успели) данные о моих замерах. Я их использовал для сохранения данных о тестировании на разных машинах (у меня две рабочие лошадки - дома и на работе) и выбора оптимального решения. Извините если ввел в заблуждение остальных пользователей SVP.

57

(22 replies, posted in Флуд)

Chainik wrote:

Кстати да. Не надо такие результаты в базу данных вносить.
Понятно, что владея навыком компилятора можно элементарно нарисовать любую цифру результата теста.
SVPmark использует вполне конкретные бинарники, одинаковые для всех.

В том то все и дело: я не на уровне протокола обмена в GoogleDoc оптимизировал, а вносил реальные улучшения в код avisynth (mvtools2 пока не трогал, т.к. на CPU+GPU самым тяжким является SAD16x16, которая оптимизирована для текущих процессоров. Вот для процессоров с AVX2 ее можно ускорить - к сожалению AVX инструкции (1-е поколение) не дают никакого прироста, даже наоборот).

58

(22 replies, posted in Флуд)

выделено из темы конфиг пк под svp

%username% wrote:

У i5 4 ядра 4 потока - SVP ставит 6 потоков
У i7 4 ядра 8 потоков - SVP ставит 10 потоков

Именно так.

%username% wrote:

Как бы 66% разницы

Разница в потоках, а не выч. ядрах. По этому рост в 20% - это вполне даже неплохо.

%username% wrote:

Владельцы i7 могут замерять потребление памяти в тяжелых случаях? не SD конечно.

Да, есть проблема. Я пока разбираюсь с внутренностями avisynth (как рекомендовал Chainik) и может быть что-то улучшу... а может и нет.

%username% wrote:

Видел я твой 21%, с комментарием with some code optimizations

Это простые оптимизации avisynth: незначительные и не влияющие на относительную расстановку Core i5 vs Core i7 в SVP.

59

(73 replies, posted in Флуд)

%username%
кстати для SVP НТ не нужен, толку 5% а память +50% и валится с ошибкой этой самой памяти
По SVPMark 3313 vs 2719 (172.39 fps vs 141.71 fps) или разница в 21%, при том, что SVPMark ограничивает количество потоков до threads+2.

60

(73 replies, posted in Флуд)

Siluyanov_M
Выбрал 3770K на основании предварительных результатов замеров от MAG79. Кроме того SVP хорошо реагирует на включение технологии HT.
в итоге собрал HTPC:

  • Процессор 3770K разогнанный до 4.2 GHz

  • Мать ASrock Z77 Extreme4 - без лишних навесов, но с быстрой перезагрузкой (Ultra fast reboot <=1 сек) с поддержкой S5 и достаточным околосокетным пространством для кулеров (нарезаны дырки для 775 и 1155)

  • Память - не помню - какая-то 1866

  • Видео Geforce 640 - как показали тесты в указанной связке обеспечивает 60 fps в режиме highest, и при этом тихая и практически не греется. Видяху не гнал.

%username% wrote:

Есть ли профит от четверть-пикселя кроме запредельного потребления памяти?

Насколько я понимаю, для 720p и 1080p четверть-пиксел вообще не имеет смысл.

Noweol wrote:

А давно у нас SVPTube перестал работать?

Youtube в очередной раз поменяли форматирование. Сам неделю назад правил в своих продуктах regex-пы.

Chainik
Я понял, извините за беспокойство.

Ув. Chainik,
видимо со стороны мои посты выглядят как вызов. Поверьте, это не так: я активно использую SVP с 3.0 при просмотре на HTPC и очень ею (программой) доволен (спасибо вам за труд). До недавнего времени я использовал довольно слабый Феном 2 и не имел никаких проблем, но недавно поменял систему на иву и захотелось большего качества. Сразу после этого вылезли проблемы с памятью. Собственно говоря с этого момента я и заинтересовался что там внутри.
Я мог бы помочь разработчикам именно с этой проблемой (если она имеет решение) благо это совпадает с моей основной специализацией (оптимизация использования памяти, оптимизация исполнения, повышение эффективности в многопоточном коде). Еще раз хочу подчеркнуть: я ни в коем случае не желаю быть разработчиком SVP, я лишь могу помочь в решении определенной проблемы. Если разработчики не хотят сотрудничать или не считают данную проблему существенной - я откланяюсь.

MAG79 wrote:

yartat
И что предлагается?

Можно ли подумать о фиче по уменьшению использования памяти?

Chainik

А все заморочки с памятью исключительно на совести внутренних кешей Avisynth. То что написано на одно сообщение выше как раз и прибивает размер этих кешей до самого минимума.

А-я-я-й   hmm  Зачем вводить в заблуждение?
Итак исходный файл Мстители (H264, 15831 Kbps, 1080p, контейнер MKV):
1. Выделено 3,110,400 байт 21 раз.

ntdll!RtlAllocateHeap( HANDLE, DWORD, SIZE_T )
msvcrt!malloc() + 0x57 
svpflow_gpu!flowLib_Calculate() + 0x7093f 

2. Выделено 15,523,264 байт 16 раз.

MSVCR90!malloc( size_t )
MSVCR90!operator new( unsigned int ) + 0x1f
...
svpflow1!_AvisynthPluginInit2@4() + 0x4aca
avisynth!avs_delete_script_environment() + 0x3f37
svpflow1!_AvisynthPluginInit2@4() + 0x32c1
avisynth!avs_delete_script_environment() + 0x5e21
avisynth!avs_delete_script_environment() + 0x3f37 

3. Выделено 1,827,376 байт 16 раз.

MSVCR90!malloc( size_t )
MSVCR90!operator new( unsigned int ) + 0x1f 
...
svpflow1!_AvisynthPluginInit2@4() + 0x31b5 
avisynth!avs_delete_script_environment() + 0x5e21 
avisynth!avs_delete_script_environment() + 0x3f37 

Я привел только самые крупные блоки. К сожалению понять что там происходит не могу: нет даже pdb.

Chainik
Типичная ошибка оперирования с IEEE754 double
fGamma - не результат расчета, а входной параметр, поэтому прямое сравнение вполне допустимо wink

И да и нет  wink  все зависит от компилятора или, если быть точным, от оптимизатора. Если оптимизатор генерирует код сравнения величин как восьмибайтовые блоки памяти, то нам повезло, а вот если будет код сравнения через FPU, то запросто могут вылезти косяки (при сравнении с нулем возможна нормализация операндов, при сохранении в стеке FPU могут появится погрешности) wink

Проект jsoncpp.
Файл json_reader.cpp строки 588-589

      bool badTokenType = ( token.type_ == tokenArraySeparator  &&
                            token.type_ == tokenArrayEnd );

Скорее всего нужно заменить на

      bool badTokenType = ( token.type_ == tokenArraySeparator  ||
                            token.type_ == tokenArrayEnd );

Проект svpflow1.
Файл MVSuper.cpp стока 76

    if(yRatioUV==2 && vi.height&1) vi.height++; // even

yRatioUV всегда будет 2

Обратите внимание на возможное переполнение в PlaneOfBlocks::SearchMVs_common файл PlaneOfBlocks.cpp строки 274

    if(mode) lambda = int(min(lambda/pow(plevel,levelsCount-nLevel-1)/(nPel*nPel),INT_MAX/100.0));

PS:  в первом посте я анализировал MVTools2 2.5.11.9 SVP edition, исходники брал с страницы загрузки на wiki. Насколько я вижу mvtools2 используется в SVPMark

Провел статический анализ с помощью PVS
Для проекта mvtools2:
файл MVBlockFps.cpp в конструкторе MVBlockFps строка 40-41

        if (nOverlapX!=0 || nOverlapX!=0)
                env->ThrowError("MBlockFps: Overlap must be 0");  // may be implemented later but some modes are not clear

явно ошибка копи-паста, скорее всего нужно

        if (nOverlapX!=0 || nOverlapY!=0)
                env->ThrowError("MBlockFps: Overlap must be 0");  // may be implemented later but some modes are not clear

Далее набор из однотипных

        DebugPrintf("Degrain2: get source frame %d clip %d",n,super);

Для PClip и IClip не перегружены операторы преобразования к int. Либо нужно ввести перегрузку, либо заменить %d на %p
файл MVDegrain2.cpp строчки 237, 338, 345, 352, 359; файл MVSuper.cpp строка 157

Файл MVDepan.cpp строка 711

    int nf = (backward) ? ndest: ndest; // set next frame number as data frame if backward

Ошибка копи-паста, скорее всего нужно так:

    int nf = (backward) ? ndest - 1 : ndest; // set next frame number as data frame if backward

Функция GetAbsolutePelPointer полностью идентична GetAbsolutePointerPel1. Файл mvinterface.h строки 710 и 665.

Типичная ошибка оперирования с IEEE754 double

        if (fGamma == 1.0)

Рекомендуется заменить на

        if (fabs(fGamma - 1.0) <= 1e-4)

Точность 10^(-4) вполне достаточна.
Файлы maskfun.cpp строки 27, 167, 218. Схожее в файле mvdepan.cpp строках 313, 414, 547

Обратите внимание на возможное переполнение в MVMask::Length файл MVMask.cpp строки 89-97

        double norme = double(v.x * v.x + v.y * v.y) / ( pel * pel);

Прошу не воспринимать этот пост как упрек или что-то подобное. Я лишь хочу, чтобы SVP был быстрым и содержал по возможности меньше ошибок.

Chainik
Никак не могу добраться до профайлеров - пока на работе завал.

  • Если говорить о FAQ, то следует добавить следующее: для 32-х битный осей кроме активизации опции LARGEADDRESSAWARE необходимо включить поддержку 3GB. Тут подробная инструкция как ее включить. Есть нюанс с Windows XP: далеко не все драйверы могут корректно работать с этой опцией.

  • В программах с большим числом куч от разных менеджеров OOM приходит значительно раньше лимитных 2GB. Для .NET приложения без использования unmanaged resource это значение колеблется в районе 1.6-1.7GB. Для приложений, работающих с DShow графом предел значительно ниже 1.6GB.

Я буду еще тестировать с 3GB на своей системе рекомендацию из FAQ, но вместе с тем прогоню через профайлер использование памяти.
PS: я так понимаю, вы компилируете gcc. Будет интересно сравнить итоговую скорость с IC.

farookh1

  • Radeon 4870 официально поддерживает OpenCL 1.0. Поддержка версии 1.1 была в бетах Steam 2.2, yо почему-то так и не была официально включена для этого ускорителя. SVP требует OpenCL 1.1 и выше.

  • Вторые феномы сильно греются. Скорее всего проблемы с высокой температурой.

Chainik, спасибо за ответ. Прежде чем написать о проблеме я посмотрел FAQ: предложенный мною временный вариант практически то же самое решение, что и в FAQ. Вопрос в другом: 600MB - это не мало памяти, особенно для x32. Можно ли подумать о фиче по уменьшению использования памяти? Выделение памяти в зависимости от кол-ва потоков (и как я понимаю копирование фреймов для каждого потока) является особенностью оптимизации по производительности или можно использовать иные способы?

При проигрывании видео Мстителей (H264, 15831 Kbps, 1080p, контейнер MKV) через сплиттер LAV + ffdshow (видео + аудио) + встроенные субтитры в Mediaportal заметил периодические вылеты из-за OutOfMemory. Количество потоков в SVP - авто, остальные настройки - default. Использование памяти процессом mediaportal - 1.2GB (по данным Task Manager). Если выгрузить SVP Manager, то mediaportal съедает на этом же фильме на этом же участке 600MB. Таким образом, SVP съедает 600MB при проигрывании данного фильма, что в итоге приводит к невозможности выделить память для managed части и краху приложения. Пока проблему решил путем выставления количество потоков равным 8.
Hardware:
Ivy Bridge@4.2GHz HT on (видео отключено)
4GB RAM
nVidia GT 640
Software:
Windows 7 32bit
Mediaportal 1.2.3
LAV 0.51.3
ffdshow (последний)
SVP 3.1.2
вывод на EVR
nVidia driver 301.42

Однако хотелось бы с проблемой разобраться до конца.

74

(153 replies, posted in Эксплуатация SVP)

Vovanchik wrote:

4 результатами ранее мною показано, что 3770 вообще без разгона может практически любой режим, кроме самого тяжелого, тянуть силами встроенной видеокарты
smile

Эти результаты я видел, но я рассматривал обновление системы до состояния, когда она бы без проблем тянула все режимы (в том числе и самый тяжелый). Благодаря постам MAG79 и результатам из таблицы (в том числе и вашим) я сделал выбор в пользу Ivy (не смотря на то, что Ivy хуже гонится, чем Sandy: мой Ivy разогнался до 4.6, а на другой системе Sandy гнался до 4.8). Однако окончательного ответа на вопрос какая видяха будет достаточна для всех режимов так и не было. Взял наобум GT 640, т.к.  по цене она была равной GT 450, а по игровой производительности быстрее на 10-40%. Оказалось что для HTPC вполне достаточно Ivy + видяха GT 640 для самых тяжелых режимов SVP + шейдеры.
Кроме того, я замерил температуру процессора при моем разгоне (4.2GHz) и кулере Noctua C12P в момент проигрывания видео. Взял Мстителей (H264, 15831 Kbps, 1080p) и 300 (H264, 9222 kbps, 1080p). В итоге вышло средняя температура 60-64, пик - 67.

75

(153 replies, posted in Эксплуатация SVP)

Исходя из результатов моего вчерашнего тестирования, для 3770K с посредственным разгоном вполне подходит даже видеокарты класса nVidia GT 640. При этом система обеспечивает уплавнение даже в самом тяжелом варианте на уровне 60 fps.