Я хочу сделать мой код параллельным, но у меня есть несколько вопросов для опытных.
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.
}
}
Я уже применил это, но это тяжело на процессоре & мой код замедляется, когда я изменяю размер окна, так как он должен:
2] Поскольку мой OMP-код перегружен процессором [около 50% в соответствии с mgr задачи], Что такое хороший способ обработки параллельного рендеринга?
«OMP не слишком хорошо подходит для рендеринга MT (OMP лучше работает для параллельной обработки игровых задач)» — Некролис
«Отсроченные контексты — это хороший путь, …» — catflier
Других решений пока нет …