ID 기술 3과 같은 기존 엔진에서 상당한 개선을 달성 할 수있는 방법을 생각할 수 있습니까? 오디오 서브 시스템에서이 작업을 시도함으로써 속도보다 속도가 느려지는 것을 알 수있었습니다. 나는 루프에서 계산되고 코어와 거의 통신하지 않는 데이터의 큰 덩어리가 필요할 것이라고 생각한다.OpenMP를 사용하는 ioquake3과 같은 기존의 단일 스레드 게임 엔진에서 어떤 종류의 최적화를 수행 할 수 있습니까?
2
A
답변
2
ioquake3 또는 id tech 3에 대해서는 아무것도 알지 못하지만 OpenMP에 대해서는 약간의 지식이 있으므로 즉시 질문을 해 드리겠습니다.
OpenMP는 처음에는 공유 메모리에 액세스 할 수있는 프로세서 전반에 걸쳐 대규모 어레이에 루프 반복을 배포하기 위해 개발되었습니다. 이것은 과학 및 엔지니어링 프로그램의 많은 부분에서 요구 사항이므로 OpenMP가 이러한 프로그램에 많이 사용된다는 것은 놀랄 일이 아닙니다.
최근에는 OpenMP 3.0을 사용하여 응용 프로그램 범위를 확장하는 디렉터/작업자 작업 분해를위한 우수한 기능을 제공합니다. 필자는 이러한 새로운 기능에 대한 많은 경험이 없지만 유망 해 보입니다.
그럼 당신의 질문은 계산 핵심이 OpenMP가 지원하는 계산 모델에 얼마나 잘 맞습니까?
0
OpenMP는 루프의 다른 요소에 의존하지 않는 데이터에서 작업 할 때 매우 효과적입니다. 예를 들어 :
std::vector<int> big_vector(1000, 0);
for (int i = 0; i < big_vector.size(); ++i)
{
big_vector[i] = i;
}
는 OpenMP를 잘 최적화,하지만
std::vector<int> big_vector(1000, 0);
for (int i = 1; i < big_vector.size(); ++i)
{
big_vector[i] = i * (big_vector[i - 1] + i);
}
않을 것 것입니다.
OpenMP 설정을 사용하여 결과를 향상시킬 수 있는지 살펴볼 수도 있습니다. 자세한 내용은 http://www.amazon.com/Multi-Threaded-Engine-Design-Jonathan-Harbour/dp/1435454170에 OpenMP에 대한 전체 장 (boost, posix-threads 및 Windows Threads)이 있습니다.
관련 문제
- 1. OpenMP를 사용하는 프로그램에서 GUI 스레드 처리
- 2. 어떤 언어로이 작업을 수행 할 수 있습니까?
- 3. OpenMP를 사용하는 글로벌 변수
- 4. 이 게임 로직은 어떤 종류의 게임 로직이라고 불리 죠?
- 5. Java 코드에서 OpenMP를 어떻게 사용할 수 있습니까?
- 6. 앱이 백그라운드에서 어떤 종류의 "좀비"를 반환 할 수 있습니까?
- 7. 멀티 스레드 게임 엔진에서 월드 데이터를 동기화 상태로 유지하려면 어떻게해야합니까?
- 8. 어떤 종류의 프로그램을 gdb로 디버깅 할 수 있습니까?
- 9. PHP의 스트림으로 어떤 종류의 멋진 것들을 할 수 있습니까?
- 10. 어떤 종류의 파일로 vim plugim snipMate를 비활성화 할 수 있습니까?
- 11. 어떤 종류의 데이터 유형을 반올림 할 수 있습니까?
- 12. 멀티 코어 CPU에서 어떤 종류의 응용 프로그램을 더 잘 수행 할 수 있습니까?
- 13. 기존의 열거 형을 typedef 할 수 있습니까?
- 14. 어떤 종류의 WPF 컨트롤을 사용할 수 있습니까?
- 15. HAML은 Ruby on Rails에서 render_to_string과 같은 종류의 "캡처"를 수행 할 수 있습니까?
- 16. 단일 명령문에서 SQL로 어떻게 수행 할 수 있습니까?
- 17. 어떤 종류의 onClickDownListener/onClickUpListener가 있습니까?
- 18. 하이브리드 "인덱스와 같은"btree 구조 - PostgreSQL이이를 수행 할 수 있습니까?
- 19. Python을 V8 엔진에서 실행되도록 컴파일 할 수 있습니까?
- 20. JIT는 얼마나 많은 명령 수준 최적화를 적용 할 수 있습니까?
- 21. 어떤 Drupal 갤러리 모듈에서이 작업을 수행 할 수 있습니까?
- 22. 단일 SQL 쿼리로이 작업을 수행 할 수 있습니까
- 23. 단일 프로젝트에서 MSpec 및 NUnit 테스트를 수행 할 수 있습니까?
- 24. ajaxError가 어떤 종류의 오류를 처리하고 있는지 어떻게 알 수 있습니까?
- 25. Flex가 단일 스레드 모델을 사용하는 이유는 무엇입니까?
- 26. pthread가 자체적으로 정리를 수행 할 수 있습니까?
- 27. objective-c에서 어떤 형태의 의존성 주입을 수행 할 수 있습니까?
- 28. sys.settrace를 사용하면 어떤 멋진 해킹 작업을 수행 할 수 있습니까?
- 29. 그 종류의 신청을 할 수 있습니까? There
- 30. 어떻게 ThreadPool.Join을 수행 할 수 있습니까?
openMP와 같은 사운드는 여러 프로세스에서 더 많이 발생하지만 빠른 게임에서는 동일한 프로세스에서 여러 스레드가 필요할 것입니다. –
@Mark Storer - 실제로 OpenMP는 대부분의 o/s가 메모리를 공유하는 별도의 프로세스를 막기 위해 매우 힘들게 작업하기 때문에 거의 항상 스레드로 구현됩니다. 이것은 OpenMP의 자격을 부여하는 계산에 존재하는 병렬 처리 유형입니다. –