コードを並列化したいのですが、経験者にいくつか質問があります。
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%一致]、パラレルレンダリングを処理するための良い方法は何ですか?