Pytanie:
Jak wyświetlić potok instrukcji?
viv
2013-05-22 02:03:33 UTC
view on stackexchange narkive permalink

Potok instrukcji służy do wykonywania instrukcji w sposób równoległy, dzieląc je na kilka etapów. Kiedy wstrzymuję wykonywanie w debugerze, widzę tylko lokalizację rejestru eip, ale nie widzę bieżącego stanu potoku. Czy jest sposób, aby się tego dowiedzieć?

Jeden odpowiedź:
cb88
2013-05-22 03:39:01 UTC
view on stackexchange narkive permalink

Nie, debugger wyświetla kod sekwencyjnie, podczas gdy procesor może zmienić kolejność kodu w locie, zanim zostanie on wykonany, a nawet wykonać więcej niż jedną instrukcję naraz. Dzieje się tak nawet w przypadku symulatorów, takich jak Bochs. Z drugiej strony Simics może zaimplementować coś bardziej zgodnego z rzeczywistością, ale wątpię w to.

Zasadniczo potok powinien być przezroczysty dla programisty. Jeśli chodzi o wykonanie, powinno działać tak samo, jak implementacja pojedynczego cyklu, chociaż wydajność byłaby znacznie inna.

Jeśli chcesz zobaczyć efekt przekazywania różnych instrukcji przez potok, to chcesz, aby był to profiler.

Jeśli potrzebujesz narzędzia, które pozwoli ci analizować postępy uOP w całym potoku, poszukaj rzeczy takich jak Marss86, które symuluje do poziomu uOp i pozwoli ci aby zobaczyć, co dzieje się wewnątrz rurociągu, przynajmniej w architekturze, którą symulują. Zwróć uwagę, że istnieją różne implementacje potoków x86, a wybrany przez Ciebie symulator może, ale nie musi, implementować dokładnie ten, na który zamierzasz kierować.

** Dodatki do odpowiedzi cb88 **: Możesz również zajrzeć do [cachegrind] (http://valgrind.org/docs/manual/cg-manual.html) i [callgrind] (http: // valgrind. org / docs / manual / cl-manual.html), które symulują wykonanie Twojego kodu na danej architekturze. Jeśli instrumentujesz kod tych narzędzi, możesz uzyskać informacje o stanie potoku. Ale, jak powiedział cb88, możesz nie wdrożyć dokładnie tego, na który zamierzasz kierować.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...