Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową



Podobne dokumenty

Wykresy i interfejsy użytkownika

Zaawansowany kurs języka Python

Przegląd języka Python. Łukasz Anwajler

Kurs języka Python. Wątki

Podstawy programowania obiektowego

Programowanie obiektowe

Python. Wprowadzenie. Jolanta Bachan

Plan Przegląd podstawowych typów i konstrukcji języka

Języki i metody programowania

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

ZASADY PROGRAMOWANIA KOMPUTERÓW

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Kurs rozszerzony języka Python

Zaawansowany kurs języka Python

Podstawy programowania w Pythonie

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Technologie Informacyjne Mechatronika 2012/2013 Błędy obliczeń. Python.

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Język Python (2) Język Python (2) 1/36

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

DYNAMICZNE PRZYDZIELANIE PAMIECI

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Wstęp do programowania 2

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Podstawy bioinformatyki 2017/18

Hackowanie zamrożonych binariów

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

Programowanie obiektowe

Python wstęp. Michał Bereta

Python wstęp do programowania dla użytkowników WCSS

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

1 Podstawy c++ w pigułce.

Wykład 1

Wstęp do Pythona. Janusz Szwabiński. Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.1/36

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Budowa Mikrokomputera

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 2: Podstawy Języka

Wątki i komunikacja między nimi w języku Python

Wprowadzenie do Python

Python! Lekcja 1 podstawy języka, typy danych

Wyjątki (exceptions)

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie obiektowe

Plan podstawowe operacje we/wy

Wstęp do Programowania, laboratorium 02

Wstęp do programowania

Języki i techniki programowania Ćwiczenia 2

Podstawy Programowania.

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Podstawy programowania w Pythonie

Programowanie obiektowe

media Blitz wydajne sytemy szablonów

Szablony funkcji i szablony klas

Programowanie w języku C++

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Technologie cyfrowe semestr letni 2018/2019

Kurs języka Python. Wykład 13. Marcin Młotkowski. 18 stycznia Rozszerzenia Pythona w C Python/C API. 2 Osadzanie Pythona w C

Kurs rozszerzony języka Python

Ćwiczenia z przetwarzania tablic 2D

WirnikApp Documentation

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Wstęp do informatyki. Python 1

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Wstęp do programowania

Dr inż. hab. Siergiej Fialko, IF-PK,

Definicja. Not Only SQL

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Wskaźniki. Informatyka

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wstęp do Programowania potok funkcyjny

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Wykład 5: Więcej o Klasach i Metodach

Lista, Stos, Kolejka, Tablica Asocjacyjna

rozdział 4: ZMIENNE I INSTRUKCJE

Konsolidacja (linking)

BIBLIOTEKA NUMPY, CZĘŚĆ 1

Wykład 6. Mikrokontrolery z rdzeniem ARM

Wyrażenia arytmetyczne

Stałe, tablice dynamiczne i wielowymiarowe

Podstawy programowania w Pythonie

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Metody optymalizacji soft-procesorów NIOS

Aplikacje RMI

Wstęp do programowania

Programowanie w systemie Linux. Jacek Lach Zakład Oprogramowania Instytut Informatyki Politechnika Śląska

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Transkrypt:

Plan 1 Uwagi na temat wydajności CPython a 2 Podstawowe techniki poprawiające wydajność obliczeniową 3 Podstawowe techniki poprawiające zużycie pamięci krótkie opisy modułów 1 array - jak oszczędzić na pamięci 2 ctypes - prosta integracja z C 3 multiprocessing - zrównoleglanie programu Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 1 / 10

Ogólnie Wydajność obliczeniowa wydajność Pythona zależy od użytego intepretera CPython nie jest zbyt szybki (wolniejszy niż Java) Operacje oraz typy danych wbudowane w intepreter są zwykle szybsze. Duża część modułów Pythona jest zaimplementowana w C/C++ co przekłada się na odpowiednią wydajność Typy wbudowane również zaimplementowane są w C Zużycie pamięci - CPython Niektóre obiekty czysto Pythonowe zajmują więcej miejsca w pamięci niż można by się spodziewać CPython rezerwuje sobie listy obiektów podręcznych które czasami zajmują zbyt dużo miejsca Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 2 / 10

Wydajność obliczeniowa czyli dlaczego nie lubimy kropek... Redukcja ilości odwołań do słowników Każde odwołanie się do obiektu który nie znajduje się w aktualnej przestrzeni adresowej kosztuje dodatkowe sprawdzenie w słowniku a ponieważ funkcje też są obiektami to... tablica = [] for i in xrange(1000000): tablica.append(i)... to szybciej będzie w ten sposób tablica = [] dodaj_element = tablica.append for i in xrange(1000000): dodaj_element(i) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 3 / 10

Wydajność obliczeniowa każda kropka więcej spowalnia program class Obiekt(object): def init (self): self.tablica = [] o = Obiekt() for i in xrange(1000000): o.tablica.append(i) jeśli można najlepiej jest użyć funkcji wbudowanej... tablica = range(1000000)... lub generator expression tablica = [i for i in xrange(1000000)] Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 4 / 10

Wydajność obliczeniowa importowanie Z tego samego powodu co w poprzednich przykładach lepiej stosować formę importu from modul import funkcja funkcja() niż import modul modul.funkcja() Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 5 / 10

Zużycie pamięci CPython tworzy bufory obiektów prostych (np. int) do ponownego wykorzystania >>> a = range(10000000) >>> del a oznacza to że po wykonaniu drugiego polecenia ilość pamięci zajmowanej przez Python a nie spadnie do poziomu początkowego uwagi tablica 10 000 000 liczb (int) zajmuje około 300 MB W normalnej pracy efekt ten nie jest zauważalny i pojawia się jedynie wtedy gdy chcemy przetwarzać duże ilości danych w jednym momencie. Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 6 / 10

moduł array array pozwala na wydajne przechowywanie wartości tego samego typu dd id=/dev/zero of=100mb bs=1048576 count=100 array będzie zajmować w pamięci tyle ile się spodziewamy i po skasowaniu pamięć zostanie zwolniona from array import array a = array("c") with open("100mb") as f: a.fromfile(f, 100*1024*1024) raw_input() del a raw_input() Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 7 / 10

moduł multiprocessing reklama Zrównoleglanie programów w Pythonie jest bardzo proste. program jednordzeniowy from math import sqrt pierwiastki = sum(map(sqrt, range(10000000))) program wielordzeniowy from math import sqrt def przelicz(zakres): return sum(map(range(*zakres))) if name == " main ": from multiprocessing import Pool procesy = Pool() pierwiastki_partial = procesy.map(przelicz, [(0, 5000000), (5000000, 10000000)]) pierwiastki = sum(pierwiastki_partial) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 8 / 10

moduł ctypes reklama Z Pythona można załadować i używać dowolnych współdzielonych bibliotek w C. Zarówno pod Windows jak i Linux. program w czystym Pythonie from math import sqrt pierwiastki = sum(map(sqrt, range(10000000))) funkcja w C # include <math.h> float pierwiastki(float* tablica, int rozmiar){ float wynik = 0; for (int i = 0; i < rozmiar; i++){ wynik += sqrt(tablica[i]); }; }; return wynik; Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 9 / 10

moduł ctypes Kompilujemy kod w C: gcc -O3 -fpic funkcja.c --shared -o funkcja.o -std=c99 -ggdb nowy program w Pythonie from ctypes import cdll, c_float, c_void_p from array import array lib = cdll.loadlibrary("funkcja.o") tablica = array("f", xrange(10000000)) pierwiastki_funkcja = lib.pierwiastki pierwiastki_funkcja.restype = c_float pierwiastki_funkcja.argtypes = [c_void_p, c_int] wskaznik, liczba_elementow = tablica.buffer_info() pierwiastki = pierwiastki_funkcja(wskaznik, liczba_elementow) Łukasz Ligowski, Sławomir Walkowiak (ICM UW) Wydajność Pythona 19 stycznia 2010 10 / 10