我想让我的代码并行,但有一些问题要问有经验的人。
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 的负担很重,当我调整窗口大小时,我的代码会变慢,因为它必须:
- 将 bool "omp_deviceReady" 设置为 false,以便停止渲染。
- 等待平行部分停止。
- 调整图形缓冲区的大小。
- 将“omp_deviceReady”设置为 true,以便可以再次进行渲染。
- 只要用户调整窗口大小,就重复。
2]由于我的 OMP 代码在 CPU 上很重[根据任务管理器大约 50%],什么是处理并行渲染的好方法?