DirectX рендеринг и усиление OMP

Я хочу сделать мой код параллельным, но у меня есть несколько вопросов для опытных.

1] Это хорошая идея сделать что-то подобное?

#pragma omp parallel num_threads(2)
{
const int threadID=omp_get_thread_num();
if(threadID==0) while(WM_QUIT != msg.message){ // < Engine stuff
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
engine.omp_renderPrepare();
}
}
if(threadID==1) while(WM_QUIT != msg.message){ // < Render stuff
engine.omp_renderApply();
}
}

// Functions from the engine class:
inline void omp_renderPrepare(){
if(gDevice.omp_isReady()){
#pragma omp critical(renderPrepare)
if(!omp_rendering){
omp_sceneReady=0;
renderPrepare();
omp_sceneReady=1;
}
}else{
Sleep(42); // If the device is not ready, dont spam.
}
}
inline void omp_renderApply(){
if(gDevice.omp_isReady()){
#pragma omp critical(omp_renderApply)
if(omp_sceneReady){
omp_rendering=1;
renderApply();
omp_rendering=0;
}
}else{
Sleep(42); // If the device is not ready, dont spam.
}
}

Я уже применил это, но это тяжело на процессоре & мой код замедляется, когда я изменяю размер окна, так как он должен:

  1. Установите bool «omp_deviceReady» в false, чтобы рендеринг остановился.
  2. Дождитесь остановки параллельных секций.
  3. Изменение размеров графических буферов.
  4. Установите для «omp_deviceReady» значение true, чтобы рендеринг мог произойти снова.
  5. Повторяйте, пока пользователь изменяет размер окна.

2] Поскольку мой OMP-код перегружен процессором [около 50% в соответствии с mgr задачи], Что такое хороший способ обработки параллельного рендеринга?

1

Решение

«OMP не слишком хорошо подходит для рендеринга MT (OMP лучше работает для параллельной обработки игровых задач)» — Некролис

«Отсроченные контексты — это хороший путь, …» — catflier

0

Другие решения

Других решений пока нет …