Kluczowa różnica – optymalizacja kodu zależna od maszyny i niezależna od maszyny
Programy komputerowe to zestawy instrukcji wydawanych sprzętowi w celu wykonywania zadań. Programy te są w większości napisane w językach wysokiego poziomu, a komputer nie rozumie tego języka. Dlatego kompilator służy do konwersji tych instrukcji na kod maszynowy lub kod docelowy. Przechodzi przez kilka faz, aby zbudować kod docelowy. Jednym z nich jest optymalizacja kodu. Istnieją dwie techniki optymalizacji, takie jak optymalizacja kodu zależna od maszyny i niezależna od maszyny. Kluczowa różnica między optymalizacją kodu zależną od komputera a niezależną od komputera polega na tym, że optymalizacja zależna od komputera jest stosowana do kodu obiektowego, podczas gdy optymalizacja kodu niezależna od komputera jest stosowana do kodu pośredniego.
Co to jest optymalizacja kodu zależna od maszyny?
Podczas konwersji kodu źródłowego na kod obiektowy lub kod docelowy kompilator przechodzi przez kilka faz. Najpierw kod źródłowy jest przekazywany do analizatora leksykalnego, który produkuje tokeny. Następnie dane wyjściowe są przekazywane do analizatora składni, który sprawdza, czy wygenerowane tokeny są w logicznej kolejności. Dane wyjściowe są przekazywane do analizatora semantycznego. Załóżmy, że istnieje fragment kodu jako p=q + r;
Tutaj, p, q są liczbami całkowitymi, ale r jest liczbą zmiennoprzecinkową. Używając analizatora semantycznego, zmienna c integer jest konwertowana na liczbę zmiennoprzecinkową. Dlatego dokonuje analizy semantycznej. Dane wyjściowe analizatora semantycznego trafiają do generatora kodu pośredniego. Zwraca kod pośredni, który następnie trafia do optymalizatora kodu. Optymalizacja kodu to proces eliminowania nieistotnych instrukcji programu bez zmiany znaczenia rzeczywistego kodu źródłowego. Nie jest to obowiązkowa optymalizacja, ale może poprawić czas działania kodu docelowego. Dane wyjściowe optymalizatora kodu są przekazywane do generatora kodu, a na końcu budowany jest kod docelowy.
Rysunek 01: Fazy kompilatora
W optymalizacji kodu zależnej od komputera optymalizacja jest stosowana do kodu źródłowego. Przydzielenie wystarczającej ilości zasobów może poprawić działanie programu w tej optymalizacji.
Co to jest optymalizacja kodu niezależna od maszyny?
Kiedy optymalizacja jest wykonywana na kodzie pośrednim, nazywa się to optymalizacją kodu niezależnego od maszyny. Istnieją różne techniki uzyskiwania optymalizacji kodu niezależnej od maszyny. Zostały one opisane na poniższych przykładach.
Przeczytaj poniższe wiersze kodu.
for (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Zgodnie z powyższym kodem, b=x+2 jest obliczane wielokrotnie w każdej iteracji. Po obliczeniu b nie zmienia się. Tak więc tę linię można umieścić poza pętlą w następujący sposób.
b=x+2;
for (j=0; j< 10; j++)
{a[j]=5j;
}
To się nazywa przenoszenie kodu.
Przeczytaj poniższe wiersze kodu.
j=5;
if (j==10) {
a=b+20;
}
Zgodnie z powyższym kodem, „if blok” nigdy nie zostanie wykonany, ponieważ wartość j nigdy nie będzie równa 10. Jest już zainicjalizowana wartością 5. Dlatego blok if może zostać usunięty. Ta technika to eliminacja martwego kodu.
Inną metodą jest redukcja wytrzymałości. Operacje arytmetyczne, takie jak mnożenie, wymagają więcej pamięci, czasu i cykli procesora. Te drogie wyrażenia można zastąpić tanimi wyrażeniami, takimi jak b=a2; lub można zastąpić dodawaniem, b=a + a;
Odnieś się do poniższego kodu.
for (j=1; j <=5; j ++) {
wartość=j5;
}
Zamiast mnożenia, kod można zmienić w następujący sposób.
int temp=5;
for (j=1; j<=5; j++) {
temp=temp + 5;
wartość=temp;
}
Możliwa jest ocena wyrażeń, które są stałymi w czasie wykonywania. Nazywa się to stałym składaniem. Można stwierdzić, że b[j+1]=c [j+1];
Zamiast tego można to zmienić w następujący sposób.
n=j +1;
b[n]=c[n];
Mogą być następujące pętle.
for (j=0; j<5; j++) {
printf(“a\n”);
}
for (j=0; j <5; j++) {
printf(„b\n”);
}
Drukowanie a i b, oba mają taką samą liczbę iteracji. Oba można połączyć w jedną pętlę for w następujący sposób.
for (j=0; j <5; j++) {
printf(„a \n”);
printf(„b\n”);
}
Kolejną ważną techniką jest eliminacja wspólnego wyrażenia podrzędnego. Jest to zastąpienie identycznych wyrażeń jedną zmienną w celu wykonania obliczeń. Zapoznaj się z poniższym kodem.
a=bc + k;
d=b c + m;
Ten kod można przekonwertować w następujący sposób.
temp=bc;
a=temp + k;
d=temp + m;
Nie jest wymagane ciągłe obliczanie bc. Pomnożoną wartość można przechowywać w zmiennej i ponownie wykorzystać.
Jakie jest podobieństwo między optymalizacją kodu zależną od maszyny i niezależną od maszyny?
Oba należą do optymalizacji kodu
Jaka jest różnica między optymalizacją kodu zależną od maszyny a niezależną od maszyny?
Optymalizacja kodu zależna od maszyny a niezależna od maszyny |
|
Optymalizacja kodu zależna od maszyny jest stosowana do kodu obiektowego. | Optymalizacja kodu niezależna od maszyny jest stosowana do kodu pośredniego. |
Zaangażowanie w sprzęt | |
Optymalizacja zależna od maszyny obejmuje rejestry procesora i bezwzględne odwołania do pamięci. | Optymalizacja kodu niezależna od maszyny nie obejmuje rejestrów procesora ani bezwzględnych odwołań do pamięci. |
Podsumowanie – Optymalizacja kodu zależna od maszyny i niezależna od maszyny
Optymalizacja kodu składa się z dwóch technik optymalizacji, a mianowicie optymalizacji kodu zależnej od maszyny i niezależnej od maszyny. Różnica między optymalizacją kodu zależną od maszyny i niezależną od maszyny polega na tym, że optymalizacja zależna od maszyny jest stosowana do kodu obiektowego, podczas gdy optymalizacja kodu niezależna od maszyny jest stosowana do kodu pośredniego.
Pobierz wersję PDF optymalizacji kodu zależnej od maszyny i niezależnej od maszyny
Możesz pobrać wersję PDF tego artykułu i używać jej do celów offline zgodnie z notatką cytowania. Proszę pobrać wersję PDF tutaj Różnica między optymalizacją kodu zależną od maszyny i niezależną od maszyny