2011-01-19 8 views
8

Z bloga Eric Lipperta The truth about value types wynika, że ​​liczba rejestrów może mieć duży wpływ na wydajność kodu. Jakie są kryteria kodu, który najbardziej korzysta z wyższej liczby rejestrów w systemach x64? Czy są jakieś dobre przykłady?Które scenariusze maksymalizują wpływ wydajności wyższego rejestru w systemie x64 dla kodu C#?

Jest dla mnie jasne, że liczba rejestrów nie jest jedynym, a nawet najważniejszym aspektem platformy x64, ale jeśli istnieją takie kryteria, to czy platforma, na której planujemy uruchomić nasz kod, ma wpływ w jaki sposób piszemy nasz kod?

+0

Dla mnie zawsze powinieneś rozważyć aspekt wydajności. Nie jestem pewien, czy możemy maksymalnie zwiększyć wydajność przy pomocy rejestru, ponieważ używamy wirtualnej maszyny .net. Myślę, że to zależy od implementacji maszyny wirtualnej. – ykatchou

+0

To dobre pytanie, wierzę, że jeśli zbudujemy dla AnyCPU, kod IL zostanie skompilowany w czasie wykonywania w sposób zależny od platformy wykonawczej. –

+0

Nawet nowoczesne procesory mają tylko około 16 rejestrów na rdzeń, co jest naprawdę niską wartością, gdy porównasz ją z liczbą zmiennych przydzielonych przez aplikacje w dzisiejszych czasach. Dlatego uważam, że nie będziecie w stanie "zoptymalizować" kodu C#, aby skorzystać z kilku dodatkowych rejestrów dostępnych w systemach x64. Co więcej, nawet jeśli powinieneś zwracać uwagę na wydajność podczas kodowania, powinieneś bardziej dbać o jakość kodu (czytelność, łatwość obsługi itd.), Ponieważ może to znacznie obniżyć koszty programowania, a jedynie cel w zakresie wydajności w krytycznych obszarach aplikacji . –

Odpowiedz

1

Krótka odpowiedź na twoje pytanie jest zdecydowanie - nie.

Największą korzyścią przy programowaniu w języku C# (lub Java) jest to, że nie musisz się martwić o rzeczy takie jak miejsce przechowywania czy nieczyste wskaźniki.
CLR nie jest przeznaczony do aplikacji czasu rzeczywistego, ani też innymi słowy, aby zapewnić ten rodzaj kontroli nad sprzętem, ma być szybkim narzędziem do tworzenia aplikacji i tam, gdzie jest jego siła - oczywiście w cena nie jest w stanie kontrolować zachowań niskiego poziomu.

Nie ma żadnych ogólnych kryteriów kodowania, ale istnieją wyjątki, takie jak używanie konstruktora łańcuchów zamiast pisania string_Result = string_X + string_Y + string_Z w iteracji.
, ale jest to bardziej związane z poprawnym kodowaniem lub zoptymalizowanym kodowaniem, niezależnie od CLI lub C#.

Powiązane problemy