PHP Editor Apple은 Gem5 m5ops를 사용하기 위해 Go 언어를 수정하는 방법을 소개하기 위해 왔습니다. Gem5는 널리 사용되는 에뮬레이터이고 m5ops는 Gem5의 운영 체제 인터페이스 세트입니다. Go 언어를 수정하면 성능 분석 및 디버깅을 위해 Gem5의 m5ops 인터페이스를 사용할 수 있습니다. 구체적인 단계는 Go 도구 체인에 m5ops에 대한 지원을 추가한 다음 성능 모니터링 및 디버깅 작업을 위해 m5ops에서 제공하는 기능을 사용하는 것입니다. 이러한 방식으로 시뮬레이션 환경에서 Go 언어가 어떻게 실행되는지 더 잘 이해하고 해당 최적화 및 디버깅 작업을 수행할 수 있습니다.
저는 golang을 처음 접했습니다.
일부 C 함수 호출(특히 m5ops)을 golang의 런타임(특히 src/proc.go)에 삽입하려고 합니다.
cgo를 사용해 본 결과 proc.go
:
그러나 ./all.bash
를 사용하여 다시 빌드하려고 하면 스크립트가 출력된 다음 종료됩니다.
위 출력의 더 자세한 버전:
으아악 cgo_enabled=1
플래그를 사용해 보았으나 아무런 차이가 없는 것 같습니다.
달려보았지만 make.bash
별 차이가 없는 것 같았습니다.
종속성 문제인지 궁금했는데, 가짜 패키지cgo
와 관련된 메시지나 내 vscode 관련 오류는 전혀 보이지 않았습니다.
알겠습니다...마지막으로 이 질문에 대답하겠습니다.
심층적인 조사 끝에 Go(도구 dist)는 대부분의 Go 내부에서 소스 파일을 허용하지 않는 것으로 나타났습니다(Link)
이 효과를 달성하기 위한 몇 가지 해결 방법, 즉 go에서 m5ops 사용이 있습니다.
proc.go
에서 전역 함수 포인터를 정의하고 Go 애플리케이션에서 cgo를 가져온 다음 이러한 전역 함수 포인터를 m5ops를 수행하는 함수에 할당할 수 있습니다. C 함수 포인터 호출은 지원되지 않으므로 golang 함수로 래핑해야 합니다.
Go는 내부 소스 파일에서 스택 전환 등을 처리하기 위해 Go Asm을 많이 사용합니다.
반면에 m5ops는 결국 단일 지시문으로 인라인됩니다.
따라서 asm_amd64.s 및 stubs.go a>에서 발생하는 Go Asm의 구문 및 함수 바인딩에 따라 m5ops 지침이 포함된 asm 함수를 작성할 수 있으며 runtime的任何地方调用它。go
에서는 좋을 것입니다.
runtime.go
에서 시스템 스택으로 전환하면 더 이상 파일(또는 패키지?) 외부의 함수를 실행할 수 없는 것 같습니다. 따라서 해당 함수 호출을 삽입하려고 하면 방법 1이 작동하지 않고 시스템에 쓰기가 발생하게 됩니다. 실행할 스택 코드. 그래서 마침내 두 번째 방법을 발견했습니다. 위 내용은 Gem5 m5ops를 사용하도록 go 수정: go 도구 dist가 가져오기 메시지를 표시한 다음 종료됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!