Rumah > Artikel > pembangunan bahagian belakang > Ubah suai go untuk menggunakan Gem5 m5ops: go tool dist memaparkan mesej import dan kemudian keluar
Editor PHP Apple di sini untuk memperkenalkan kepada anda kaedah mengubah suai bahasa Go untuk menggunakan Gem5 m5ops. Gem5 ialah emulator yang digunakan secara meluas, dan m5ops ialah satu set antara muka sistem pengendalian dalam Gem5. Dengan mengubah suai bahasa Go, kami boleh menggunakan antara muka m5ops Gem5 untuk analisis prestasi dan penyahpepijatan. Langkah khusus ialah menambah sokongan untuk m5ops pada rantai alat Go, dan kemudian menggunakan fungsi yang disediakan oleh m5ops untuk pemantauan prestasi dan operasi penyahpepijatan. Dengan cara ini, kita boleh lebih memahami cara bahasa Go berjalan dalam persekitaran simulasi dan melaksanakan kerja pengoptimuman dan penyahpepijatan yang sepadan.
Saya sangat baru mengenali golang.
Saya cuba memasukkan beberapa panggilan fungsi c (khususnya m5ops) ke dalam masa jalan golang (khususnya src/proc.go).
Saya cuba menggunakan cgo, yang mengakibatkan penambahan import ini pada permulaan proc.go
:
// #cgo cflags: -i$(gem5_path)/include -static // #cgo ldflags: -l$(gem5_path)/util/m5/build/x86/out -lm5 // #include <gem5/m5ops.h> import "c"
Tetapi apabila saya cuba membina semula menggunakan ./all.bash
output skrip dan kemudian keluar:
./all.bash building go cmd/dist using /usr/local/go. (go1.20.5 linux/amd64) building go toolchain1 using /usr/local/go. building go bootstrap cmd/go (go_bootstrap) using go toolchain1. go tool dist: /home/landerx/goroot/src/runtime/proc.go imports c
Versi yang lebih terperinci bagi output di atas:
./all.bash -v Building Go cmd/dist using /usr/local/go. (go1.20.5 linux/amd64) cmd/dist Building Go toolchain1 using /usr/local/go. internal/goarch internal/coverage/rtcov internal/goos internal/race internal/unsafeheader internal/goexperiment unicode runtime/internal/syscall sync/atomic runtime/internal/atomic internal/cpu unicode/utf8 internal/itoa math/bits internal/abi runtime/internal/math runtime/internal/sys bootstrap/internal/goarch bootstrap/internal/goexperiment bootstrap/math/bits encoding bootstrap/internal/unsafeheader bootstrap/internal/platform bootstrap/internal/coverage internal/bytealg bootstrap/internal/abi math unicode/utf16 bootstrap/internal/goversion internal/goversion bootstrap/internal/race bootstrap/cmd/compile/internal/test runtime internal/reflectlite runtime/metrics sync internal/testlog internal/godebug bootstrap/internal/bisect math/rand errors sort bootstrap/sort io internal/oserror internal/safefilepath path strconv bootstrap/strconv syscall bootstrap/container/heap hash text/tabwriter bytes strings hash/adler32 hash/fnv hash/crc32 crypto reflect bootstrap/internal/types/errors go/build/constraint bootstrap/go/build/constraint bufio regexp/syntax html internal/syscall/execenv internal/syscall/unix time regexp context io/fs internal/poll internal/fmtsort bootstrap/internal/saferio encoding/binary os bootstrap/cmd/internal/notsha256 encoding/base64 bootstrap/cmd/internal/sys crypto/md5 bootstrap/internal/lazyregexp internal/lazyregexp path/filepath fmt os/exec log bootstrap/internal/buildcfg flag bootstrap/cmd/internal/src text/scanner bootstrap/cmd/internal/edit bootstrap/cmd/internal/pkgpath go/token bootstrap/compress/flate bootstrap/internal/zstd go/doc/comment bootstrap/debug/dwarf encoding/json runtime/debug bootstrap/math/big bootstrap/cmd/internal/bio net/url go/scanner bootstrap/cmd/internal/objabi bootstrap/cmd/compile/internal/abt bootstrap/cmd/internal/goobj bootstrap/cmd/internal/gcprog bootstrap/cmd/internal/quoted bootstrap/compress/zlib encoding/hex compress/flate go/ast internal/buildcfg internal/goroot bootstrap/cmd/internal/dwarf runtime/trace bootstrap/cmd/internal/archive bootstrap/cmd/internal/obj bootstrap/debug/macho bootstrap/debug/elf bootstrap/debug/pe bootstrap/internal/xcoff bootstrap/cmd/link/internal/dwtest compress/gzip bootstrap/internal/profile runtime/pprof go/doc go/printer go/internal/typeparams go/parser bootstrap/cmd/internal/codesign bootstrap/go/constant bootstrap/internal/pkgbits bootstrap/cmd/compile/internal/syntax bootstrap/cmd/link/internal/benchmark bootstrap/cmd/compile/internal/pgo/internal/graph go/build go/format bootstrap/cmd/cgo bootstrap/cmd/internal/obj/loong64 bootstrap/cmd/internal/obj/mips bootstrap/cmd/internal/obj/wasm bootstrap/cmd/internal/obj/arm bootstrap/cmd/internal/obj/arm64 bootstrap/cmd/internal/obj/s390x bootstrap/cmd/internal/obj/riscv bootstrap/cmd/internal/obj/ppc64 bootstrap/cmd/internal/obj/x86 bootstrap/cmd/asm/internal/flags bootstrap/cmd/compile/internal/base bootstrap/cmd/compile/internal/logopt bootstrap/cmd/asm/internal/lex bootstrap/cmd/link/internal/sym bootstrap/cmd/link/internal/loader bootstrap/cmd/compile/internal/bitvec bootstrap/cmd/compile/internal/types bootstrap/cmd/compile/internal/types2 bootstrap/cmd/link/internal/loadelf bootstrap/cmd/link/internal/loadmacho bootstrap/cmd/link/internal/loadpe bootstrap/cmd/link/internal/loadxcoff bootstrap/cmd/compile/internal/typebits bootstrap/cmd/compile/internal/ir bootstrap/cmd/asm/internal/arch bootstrap/cmd/link/internal/ld bootstrap/cmd/asm/internal/asm bootstrap/cmd/asm bootstrap/cmd/compile/internal/abi bootstrap/cmd/compile/internal/deadcode bootstrap/cmd/compile/internal/typecheck bootstrap/cmd/compile/internal/objw bootstrap/cmd/compile/internal/staticdata bootstrap/cmd/compile/internal/compare bootstrap/cmd/compile/internal/pgo bootstrap/cmd/compile/internal/coverage bootstrap/cmd/compile/internal/loopvar bootstrap/cmd/compile/internal/importer bootstrap/cmd/compile/internal/escape bootstrap/cmd/compile/internal/inline bootstrap/cmd/compile/internal/reflectdata bootstrap/cmd/compile/internal/devirtualize bootstrap/cmd/compile/internal/staticinit bootstrap/cmd/compile/internal/ssa bootstrap/cmd/link/internal/amd64 bootstrap/cmd/link/internal/loong64 bootstrap/cmd/link/internal/arm bootstrap/cmd/link/internal/mips bootstrap/cmd/link/internal/mips64 bootstrap/cmd/link/internal/arm64 bootstrap/cmd/link/internal/ppc64 bootstrap/cmd/link/internal/riscv64 bootstrap/cmd/link/internal/s390x bootstrap/cmd/link/internal/wasm bootstrap/cmd/link/internal/x86 bootstrap/cmd/link bootstrap/cmd/compile/internal/liveness bootstrap/cmd/compile/internal/ssagen bootstrap/cmd/compile/internal/amd64 bootstrap/cmd/compile/internal/arm bootstrap/cmd/compile/internal/arm64 bootstrap/cmd/compile/internal/dwarfgen bootstrap/cmd/compile/internal/loong64 bootstrap/cmd/compile/internal/mips bootstrap/cmd/compile/internal/mips64 bootstrap/cmd/compile/internal/wasm bootstrap/cmd/compile/internal/s390x bootstrap/cmd/compile/internal/riscv64 bootstrap/cmd/compile/internal/ppc64 bootstrap/cmd/compile/internal/walk bootstrap/cmd/compile/internal/x86 bootstrap/cmd/compile/internal/noder bootstrap/cmd/compile/internal/pkginit bootstrap/cmd/compile/internal/gc bootstrap/cmd/compile Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1. runtime go tool dist: /home/landerx/goroot/src/runtime/proc.go imports C
Mencuba bendera cgo_enabled=1
, nampaknya tidak ada perbezaan.
Cuba berlari sahaja make.bash
, nampak tak ada perbezaan.
Saya tertanya-tanya sama ada ia adalah isu pergantungan, tetapi saya tidak melihat sebarang mesej yang berkaitan dengan pakej palsu cgo
atau sebarang ralat dengan vscode saya.
Baiklah...Akhir sekali, biar saya jawab soalan ini.
Selepas penyiasatan yang agak mendalam, saya mendapati nampaknya Go (alat dist) tidak membenarkan fail sumber dalam kebanyakan bahagian dalam go (Pautan)
Masih terdapat beberapa penyelesaian untuk mencapai kesan ini, iaitu menggunakan m5ops in go.
Anda boleh menentukan penunjuk fungsi global dalam proc.go
dan import cgo dalam aplikasi go anda dan tetapkan penunjuk fungsi global ini kepada fungsi anda yang melaksanakan m5ops. Memanggil penunjuk fungsi C tidak disokong, jadi ia perlu dibalut dengan fungsi golang.
Go menggunakan banyak Go Asm dalam fail sumber dalamannya untuk mengendalikan penukaran tindanan dsb.
Sebaliknya, m5ops akhirnya akan diselaraskan sebagai arahan tunggal.
Jadi mengikut sintaks dan pengikatan fungsi Go Asm, yang berlaku dalam asm_amd64.s dan stubs.go a>, seseorang boleh menulis fungsi asm yang mengandungi arahan m5ops, dan kemudian dalam runtime的任何地方调用它。go
ia sepatutnya bagus.
runtime.go
apabila ia beralih kepada timbunan sistem, ia tidak lagi dapat melaksanakan fungsi di luar fail (atau pakej?) jadi kaedah 1 tidak akan berfungsi jika anda cuba memasukkan panggilan fungsi tersebut, tulis akan berada pada sistem kod tindanan untuk dijalankan. Jadi saya akhirnya menemui kaedah kedua. Atas ialah kandungan terperinci Ubah suai go untuk menggunakan Gem5 m5ops: go tool dist memaparkan mesej import dan kemudian keluar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!