1

我想让我的代码并行,但有一些问题要问有经验的人。

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.
    }
}

我已经应用了它,但是它对 CPU 的负担很重,当我调整窗口大小时,我的代码会变慢,因为它必须:

  1. 将 bool "omp_deviceReady" 设置为 false,以便停止渲染。
  2. 等待平行部分停止。
  3. 调整图形缓冲区的大小。
  4. 将“omp_deviceReady”设置为 true,以便可以再次进行渲染。
  5. 只要用户调整窗口大小,就重复。

2]由于我的 OMP 代码在 CPU 上很重[根据任务管理器大约 50%],什么是处理并行渲染的好方法?

4

1 回答 1

0

“OMP 不太适合 MT 渲染(OMP 更适合游戏任务的并行处理)” – Necrolis

“延迟上下文是一个很好的方法,......” – catflier

于 2012-10-18T07:47:54.717 回答