Inne tematy związane z poprawą wydajności

Zobaczyliśmy przegląd najważniejszych i najczęściej używanych technik optymalizacji implementacji języka R. Jednak wciąż jest wiele rzeczy, których nie omówiliśmy. W kolejnych sekcjach pokrótce omówimy niektóre z nich.

Wstępne przydzielanie pamięci w celu uniknięcia powielania

Wstępna alokacja pamięci jest ważną techniką, którą omawialiśmy niejawnie, kiedy używaliśmy funkcji lapply(), ponieważ wykonuje ona za nas prealokację. Przydatne może być jednak bardziej wyraźne wyjaśnienie. Jak już widzieliśmy, dynamicznie rosnące obiekty w R nie są świetne pod względem wydajności. Zamiast tego należy zdefiniować obiekt o pełnym rozmiarze, jakiego będziesz potrzebować, a następnie wykonać aktualizacje jego elementów zamiast ich ponownego tworzenia. Aby to osiągnąć, możesz użyć czegoś podobnego do double(10) dla zdefiniowania wektora double, który będzie zawierał najwyżej 10 elementów. Ilekroć określisz rozmiar obiektu przed rozpoczęciem korzystania z niego, pomoże ci to uniknąć ponownego tworzenia nowych obiektów za każdym razem, gdy jego rozmiar zostanie zwiększony i zaoszczędzi ci dużo czasu. Jednak dokładna alokacja wstępna nie zawsze jest możliwa, ponieważ wymaga znajomości całkowitej liczby przed iteracją. Czasami możemy tylko poprosić o wielokrotne przechowywanie wyniku, nie znając dokładnej całkowitej liczby. W takim przypadku może nadal dobrym pomysłem jest wstępne przydzielenie listy lub wektora o rozsądnej długości. Po zakończeniu iteracji, jeśli liczba iteracji nie osiągnie wstępnie przydzielonej długości, możemy wziąć podzbiór listy lub wektora. W ten sposób możemy uniknąć intensywnej realokacji struktur danych. Jeśli chodzi o wstępne przydzielanie pamięci, R nie różni się od innych języków programowania. Jednak będąc językiem interpretowanym, nakłada mniej ograniczeń; w ten sposób użytkownicy mogą łatwo przeoczyć tego typu problemy. R nie zgłosi żadnego błędu kompilacji, jeśli pamięć wektora nie jest wstępnie przydzielona. Należy o tym pamiętać podczas pisania szybkiego kodu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *