ПрограммированиеФорумОбщее

Как быстрее очистить большой кусок памяти? (C++) (3 стр)

Страницы: 1 2 3 4 59 Следующая »
#30
16:01, 15 янв 2011

TarasB
> Это же rep stosd?
Да. И, подозреваю, умнее еще ничего не придумали.

Alexander K
> Не знаю, не проверял
Я ведь показывал исходник с винды. Или ты чужие посты не читаешь? :)

#31
16:09, 15 янв 2011

ksacvet777
> Напиши superpuper_memzero(.....) , чтобы работало в тыщщу раз быстрее.
слив защитан

#32
16:09, 15 янв 2011

Это все очень увлекательно, но что данная тема делает в "Графике" ???

#33
16:10, 15 янв 2011

TarasB
> Это в микрософте так пишут v & 0xffff?
Это мелкомягкие так изврашаются =) вот пруф http://research.microsoft.com/en-us/um/redmond/projects/invisible… /memset.c.htm

> Это 2 строчки писали 2 разных человека?
ХЗ кто, когда, где и при каких условиях это написал
ЗЫ Не я же это писал :)

#34
16:13, 15 янв 2011

entryway
> Я ведь показывал исходник с винды. Или ты чужие посты не читаешь? :)
/me пять минут ползает по теме и ищет, а потом вспоминает что состояние == "уже на веселе" и бросает это дело одновременно вспомнив ссылку

#35
16:55, 15 янв 2011

entryway
> Да. И, подозреваю, умнее еще ничего не придумали.

rep movsd

Для почти полностью перекрывающихся кусков у меня отработало чуть быстрее, чем stosd

OpenDX
> ЗЫ Не я же это писал :)

Да, это радует.

#36
18:38, 15 янв 2011

ещё копеечку:
  memset(...) - будет надёжно работать везде, а вот самопальные лисапеды , которые "быстрее"  могут работать на одной машине, но может глюкнуть на другой.

99 % что проблема топстара не связана с обнулением памяти.

#37
18:52, 15 янв 2011

имхо проблема fps не в memset-е

#38
19:07, 15 янв 2011

ksacvet777
> 99 % что проблема топстара не связана с обнулением памяти

Так он хочет заполнить задний буффер одним значением ( то-есть выполнить Clear() ), вероятно .L пишет программный раситеризатор =)

#39
21:12, 15 янв 2011

OpenDX
Если речь о сотнях fps, то это наверное не софтв. растеризатор.
Или ты в шутку ?)

#40
21:26, 15 янв 2011

ksacvet777

Ну я предположил изходя из кода 0го поста, взгяните внимательно:

int clearColor = 0xffff0000; // ВОТ ЭТА ПЕРЕМЕННАЯ КАК-БЫ НАМЕКАЕТ...

    int bbPixCnt = backBuffer->width * backBuffer->height;
    if(IsEvenNum(bbPixCnt))
    {
      __int64* bbPtr = static_cast<__int64*>(backBuffer->getBuffer()->getDataPtr()); // К.О. МНЕ ПОДСКАЗЫВАЕТ ЧТО ЭТО 64хБИТНЫЙ УКАЗАТЕЛЬ НА БЭК БУФФЕР
      __int64 clearVal = static_cast<__int64>(clearColor) & 0xffffffff;
      clearVal = clearVal | (clearVal << 32);
      
      int numLoops = bbPixCnt / 2;

      for(int i = 0; i < numLoops; i++)
        bbPtr[i] = clearVal;
    }
    else
    {
      int* bbPtr = reinterpret_cast<int*>(backBuffer->getBuffer()->getDataPtr());

      for(int i = 0; i < bbPixCnt; i++)
        bbPtr[i] = 0;
    }

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

#41
21:28, 15 янв 2011

ksacvet777
> будет надёжно работать везде, а вот самопальные лисапеды , которые "быстрее"
> могут работать на одной машине, но может глюкнуть на другой.

осторожно нужно работать с mmx\sse :)

#42
21:42, 15 янв 2011

автор удалился на размышления

#43
23:12, 15 янв 2011

Уверен, всё упирается в пропускную способность памяти.

.L
> сначала попробовал memset
> и получил 700 FPS, что маловато
> Однако, помнится, даже на C# это дело у меня работало на 1200 ФПС !
Вот в это не верю, честное слово. То есть автору верю, что он получил эти результаты, но тут что-то странное. Скомпиль одинаковые демки и протестируй ещё раз. Не должно быть такого разрыва.

#44
0:09, 16 янв 2011

скорость заполнения равна 1 Гбайт/с, че там с пропускными способностями?
хотя буфер должен почти целиком на кеш леч...
попробуй добавить команды прекеширования в цикл...

Страницы: 1 2 3 4 59 Следующая »
ПрограммированиеФорумОбщее

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