나는이 주제에 대해 읽었지만 내 질문에 대한 구체적인 답을 찾을 수 없었다. 필자는 게임의 성능을 향상시키기 위해 병렬 처리/멀티 스레딩을 사용하는 것에 관심이 있지만 몇 가지 모순되는 사실을 들었습니다. 예를 들어, 멀티 스레딩은 게임의 실행 속도를 향상시키지 못할 수 있습니다.병렬 처리 대 스레딩 - 성능
- 스레드로 렌더링 구성 요소를 넣어 : 나는
나는이 두 가지 방법을 생각했다. 몇 가지가 있습니다. 변경해야하지만, 어떤 것이 좋을지에 대해서는 잘 알고 있습니다. 완료.
- OpenMP를 사용하여 렌더링 기능을 병렬 처리합니다. 이미 그렇게하기위한 코드가 있으므로 더 쉬운 옵션 일 수 있습니다.
이것은 Uni 평가이므로 대상 하드웨어는 멀티 코어 (4 코어) 인 Uni의 컴퓨터이므로 이러한 기술 중 하나를 사용하여 몇 가지 추가 효율성을 얻으려고합니다.
제 질문은 다음과 같습니다. 어느 것을 선호합니까? 어느 것이 보통 가장 좋은 결과를 산출합니까?
편집 :
void Visualization::ClipTransBlit (int id, Vector2i spritePosition, FrameData frame, View *view)
{
const Rectangle viewRect = view->GetRect();
BYTE *bufferPtr = view->GetBuffer();
Texture *txt = txtMan_.GetTexture (id);
Rectangle clippingRect = Rectangle (0, frame.frameSize.x, 0, frame.frameSize.y);
clippingRect.Translate (spritePosition);
clippingRect.ClipTo (viewRect);
Vector2i negPos (-spritePosition.x, -spritePosition.y);
clippingRect.Translate (negPos);
if (spritePosition.x < viewRect.left_) { spritePosition.x = viewRect.left_; }
if (spritePosition.y < viewRect.top_) { spritePosition.y = viewRect.top_; }
if (clippingRect.GetArea() == 0) { return; }
//clippingRect.Translate (frameData);
BYTE *destPtr = bufferPtr + ((abs(spritePosition.x) - abs(viewRect.left_)) + (abs(spritePosition.y) - abs(viewRect.top_)) * viewRect.Width()) * 4; // corner position of the sprite (top left corner)
BYTE *tempSPtr = txt->GetData() + (clippingRect.left_ + clippingRect.top_ * txt->GetSize().x) * 4;
int w = clippingRect.Width();
int h = clippingRect.Height();
int endOfLine = (viewRect.Width() - w) * 4;
int endOfSourceLine = (txt->GetSize().x - w) * 4;
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
if (tempSPtr[3] != 0)
{
memcpy(destPtr, tempSPtr, 4);
}
destPtr += 4;
tempSPtr += 4;
}
destPtr += endOfLine;
tempSPtr += endOfSourceLine;
}
} 대신이 값을 설정하는 것이 좋습니다 각각의 픽셀에 대한 방어 적이기를 호출
멀티 스레딩을 고려중인 코드를 게시 할 수 있습니까? –
최상의 결과는 파트가 병렬화 될 수있는 방법과 병렬 처리를 활용하여 활용할 수있는 능력에 따라 다릅니다. 코드를 조사하지 않고도 질문에 답할 수는 없습니다. –
@MichaelB. 그것은 여러 기능을 포함하고 있기 때문에 약간 길지만, 필요한 경우 나는 pastebin 링크를 만들 것입니다. – MKII