문제

C로 듀얼 코어 프로세서 시뮬레이터를 구축해야 합니다(실제로는 다중 레벨 메모리 시뮬레이션, 캐시 L1/L2, 블록 대체 등).문제는 코어(스레드로 프로그래밍하고 있음)를 동기화하는 방법을 찾는 데 어려움을 겪고 있다는 것입니다.글로벌 시계를 어떻게 만들 수 있는지 어떤 아이디어가 있나요?스레드에서 하위 프로세스로 변경해야 합니까?미리 감사드립니다

도움이 되었습니까?

해결책

여기에는 많은 옵션이 있습니다:여러 스레드와의 복잡한 상호 작용을 지원하게 될 수 있으므로 "버스"를 전달하는 메시지가 있는 "가상 시계".이렇게 하면 동기화 논리를 디버깅하는 대신 핵심 기능에 집중하는 데 더 많은 시간을 할애할 수 있습니다.

이 기술을 사용하면 상태 머신을 구축할 수 있습니다(참조: 여기) "액터" 스레드당(최악의 경우) 뮤텍스/조건에 대해 걱정할 필요가 없습니다.이 기반을 확보하면 중간에 나타나는 케이스(예:"이런 세부사항을 잊어버렸어요...걱정하지 마세요. 여기에 상태를 추가하세요...내 뮤텍스를 다시 섞을 필요가 없습니다).

또한 시뮬레이션을 수행하는 것은 모두 "가상 시간"에 관한 것이므로(실시간으로 실행할 수 없기 때문에!) "가상 시계"를 기반으로 하는 기본 아키텍처를 사용하면 문제를 적절한 수준으로 추상화할 수 있습니다.

다른 팁

클록 스레드와 N 프로세서 스레드를 가질 수 있습니다. 클록 스레드는 각 프로세서 스레드를 명시 적으로 호출하여 1 개의 처리 단계를 수행 할 수 있습니다. 각 프로세서 스레드는 클럭 스레드에서 호출을받습니다. doStep(); 한 단계를 한 다음 컨트롤을 다시 클록 스레드로 되돌립니다.

또한 클라이언트 코드에서 버그를 잡을 가능성이 높아 지도록 단계를 수행하도록 프로세서 스레드가 호출되는 순서를 무작위로 표시 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top