METODY OPTYMALIZACJI KODU WYNIKOWEGO UWZGLĘDNIAJĄC KRYTERIUM CZASU WYKONYWANIA OBLICZEŃ, ZA POMOCĄ KOMPILATORA I TECHNIK PROGRAMISTYCZNYCH.

Wielkość: px
Rozpocząć pokaz od strony:

Download "METODY OPTYMALIZACJI KODU WYNIKOWEGO UWZGLĘDNIAJĄC KRYTERIUM CZASU WYKONYWANIA OBLICZEŃ, ZA POMOCĄ KOMPILATORA I TECHNIK PROGRAMISTYCZNYCH."

Transkrypt

1 POZNAŃSKIE CENTRUM SUPERKOMPUTEROWO SIECIOWE METODY OPTYMALIZACJI KODU WYNIKOWEGO UWZGLĘDNIAJĄC KRYTERIUM CZASU WYKONYWANIA OBLICZEŃ, ZA POMOCĄ KOMPILATORA I TECHNIK PROGRAMISTYCZNYCH. Wykorzystanie przełączników kompilatora GCC i ICC, wielowątkowości, MPI oraz OpenMP. Autor: Arkadiusz Mądrawski Prowadzący: dr inż. Marcin Lawenda Data: Miejsce: Poznań. Niniejsza praca dotyczy wykorzystywania technik programistycznych i dostępnych narzędzi do optymalizacji kodu w kryterium czasu wykonywania kompilatu. W pracy porównane zostały dwa kompilatory: GCC oraz ICC z dostępnymi przełącznikami optymalizacyjnymi. Porównano również techniki programistyczne takie jak: wielowątkowość, MPI oraz OpenMP. Wykazano zależności czasowe czasu wykonywania obliczeń od zastosowanych technik i narzędzi, dla wybranych eksperymentów.

2 1 WPROWADZENIE 4 2 ZASADY EFEKTYWNEGO PROGRAMOWANIA WSTĘP OBLICZANIE STAŁYCH DOPASOWANIE TYPÓW DO WARTOŚCI WYRZUCANIE NIEZMIENNIKÓW PĘTLI POZA CIAŁO UPRASZCZANIE WYRAŻEŃ LOGICZNYCH I ALGEBRAICZNYCH ŁĄCZENIE INSTRUKCJI ŁĄCZENIE PĘTLI PĘTLA O MALEJĄCYM ITERATORZE OPERACJE NA SZYBSZYCH OPERANDACH SPŁASZCZANIE PĘTLI ELIMINACJA ZBĘDNYCH WYRAŻEŃ WYKONANE OBLICZENIA SPRAWDZANIE WARUNKÓW ZWIĘKSZENIE SKOKU PĘTLI PRZEKAZYWANIE DUŻYCH DANYCH KONSTRUKCJA WZAJEMNEGO WYKLUCZANIA WARTOŚCI LENIWE PODSUMOWANIE ZASAD EFEKTYWNEGO PROGRAMOWANIA 13 3 PRZEŁĄCZNIKI WYBRANYCH KOMPILATORÓW KOMPILATOR GCC PRZEŁĄCZNIKI TYPU O[X] FLAGI OPTYMALIZACYJNE OBLICZENIOWE FLAGI OPTYMALIZACYJNE ARCHITEKTURALNE KOMPILATORA ICC PRZEŁĄCZNIKI TYPU O[X] FLAGI OPTYMALIZACYJNE OBLICZENIOWE FLAGI OPTYMALIZACYJNE ARCHITEKTURALNE 16 4 WIELOWĄTKOWOŚĆ PROGRAMÓW 17 5 OPENMP WSTĘP DO OPENMP PRAGMY W OPENMP PRAGMA PARALEL PRAGMA FOR KLAUZULA ORDERED KLAUZULA SCHEDULE 19 1 S trona

3 5.2.5 KONSTRUKCJA BARIER KONSTRUKCJA MASTER KONSTRUKCJA CRITICAL KONSTRUKCJA ATOMIC DYREKTYWA FLUSH 21 6 MPI WSTĘP DO MPI OPTYMALNA KOMUNIKACJA W MPI ANALIZA KOMUNIKACJI W MPI NA PODSTAWIE PROGRAMU VAMPIR ANALIZA PRZEPROWADZONEGO TESTU 25 7 EKSPERYMENTY TEST PRZEZNACZONY DLA KOMPILATORÓW GCC I ICC TEST PRZEZNACZONY DLA WIELOWĄTKOWOŚCI TEST PRZEZNACZONY DLA OPENMP TEST PRZEZNACZONY DLA MPI 31 8 ŚRODOWISKO EKSPERYMENTÓW MASZYNA NO MASZYNA NO WYNIKI TESTÓW PRZY UŻYCIU KOMPILATORÓW GCC I ICC PRZEŁĄCZNIKI PODSTAWOWE KOMPILATORÓW EKSPERYMENT PIERWSZY EKSPERYMENT DRUGI FLAGI ROZSZERZAJĄCE KOMPILATORÓW EKSPERYMENT PIERWSZY SZYBKOŚĆ VS. JAKOŚĆ PODSUMOWANIE PORÓWNANIA KOMPILATORÓW WYNIKI TESTÓW PRZY UŻYCIU WIELOWĄTKOWOŚCI OPTYMALNE ZARZĄDZANIE WĄTKAMI W EKSPERYMENCIE EKSPERYMENT PIERWSZY EKSPERYMENT DRUGI PODSUMOWANIE PROGRAMU WIELOWĄTKOWEGO PORÓWNANIE PROGRAMU WIELOWĄTKOWEGO I SEKWENCYJNEGO 55 2 S trona

4 11 WYNIKI TESTÓW PRZY UŻYCIU OPENMP ORAZ MPI OPENMP ZARZĄDZANIE PRAGMAMI EKSPERYMENT PIERWSZY EKSPERYMENT DRUGI SZYBKOŚĆ ZA JAKOŚĆ PODSUMOWANIE MPI EKSPERYMENT PIERWSZY MPI+OPENMP PODSUMOWANIE WNIOSKI SPIS 75 BIBLIOGRAFIA 75 RYSUNKÓW 75 RÓWNAŃ 75 SPIS TABEL 76 WYKRESÓW 76 FIGURE 78 3 S trona

5 1 Wprowadzenie W systemie, w którym program musi wykonać szereg obliczeń numerycznych, obok poprawności wyników, istotnym elementem jest czas pozyskania wyników. Uzyskanie większej szybkości wykonywania obliczeń, co za tym idzie, szybszego przetwarzania danych, odgrywa kluczowe znaczenie w miejscu, gdzie danych do obróbki jest dużo. Takimi danymi zazwyczaj są przekazy wizyjne. Mogą być one dynamiczne lub quasi-statyczne. Obróbka takiej liczby danych zazwyczaj zajmuje więcej czasu niż ich pozyskanie. Polepszenie szybkości działania programu, przy zachowaniu jego zgodności, co do poprawności wyznaczanych danych, jest pożądanym efektem. Również, gdy danych do przetworzenia jest niewiele, lecz na danych tych trzeba wykonać czasochłonne obliczenia numeryczne. Jest kilka możliwości, które pozwalają zwiększyć szybkość działania programu. Są to metody, począwszy od zastosowania odpowiedniego kompilatora i jego przełączników. Takie postępowanie nie wymusza pisania kodu programu od początku, czy też jakąkolwiek zmianę strukturalną kodu wykonaną przez programistę. Następne metody polegają na zmianie struktury kodu, w celu wykorzystania największej ilość mocy obliczeniowej, która może być wykorzystana przez pracujący program. Takimi technikami są np. wątki, OpenMP oraz MPI. Postępowanie optymalizacyjne zależy głównie od tego, co ma wykonywać program. Generalnie, optymalizację rozpoczyna się od programisty, który odpowiada na pytanie: Czy zmieniając tą linię kodu uzyskam szybsze wyniki działania małym nakładem sił na zmianę linii kodu?. Te pytanie odnosi się do podstawowych zasad programistycznych, których główną ideą jest: nie wykonuj obliczeń niepotrzebnie. Następnie, gdy programista stwierdził, że nie ma sobie nic do zarzucenia, można spróbować wykonać optymalizację wykorzystując podstawowe narzędzia, jakimi są kompilatory języka. Kompilatory, prócz tego, iż przetwarzają język zrozumiały dla człowieka, na język zrozumiały dla maszyny, posiadają gamę przełączników, lub też flag, które można ustawić podczas kompilacji programu. Flagi te mają za zadanie optymalizować kod w kategoriach: czas wykonywania obliczeń lub wielkość zajmowanego miejsca. Typy flag określa się, jako: ogólną optymalizację lub też na specyficzną technikę obliczeń. W pracy tej wybrano dwa kompilatory: GCC oraz ICC, wraz z kilkoma przykładowymi przełącznikami, celem pokazania, jak posługiwać się przełącznikami, aby kompilat być wydajniejszy w czasowym kryterium. Kroki powyższe posiadają niezwykła zaletę. Nie trzeba dużo manipulować przy kodzie, aby osiągnąć lepsze wyniki w wybranym kryterium. Jednak posiadają wadę, iż przy tych technikach nie uzyska się maksymalnego efektu. Efekt taki, można uzyskać, wtedy, gdy wykorzysta się całą dostępną moc obliczeniową. Jednak takie podejście, wymaga zazwyczaj pisania kodu od podstaw, z użyciem zaawansowanych technika przetwarzania danych. Taki technikami mogą być programy wielowątkowe, wielordzeniowe, rozproszone, czyli podpadające pod zasadę: im więcej mocy mogę wykorzystać, tym lepiej. Warto podkreślić, iż wybór odpowiedniego podejścia optymalizacyjnego, zależy głównie od chęci zmiany, możliwych nakładów przeznaczonymi na wykonanie optymalizacji oraz rzeczywistym zyskiem czasowym. Dlatego nie trzeba wykorzystywać wszystkich tych technik i zwyczajów. Można spróbować dowolnej gałęzi optymalizacyjnej, dopasowanej do swoich potrzeb. W celu pokazania, jakie przyspieszenia czasowe można osiągnąć wykonano po dwa eksperymenty dla każdego zestawu przełączników kompilatorów, oraz zmiany struktury kodu z sekwencyjnego na wydajniejsze, kolejno: wielkowątkowe, OpenMP oraz MPI. Przeprowadzone eksperymenty to: 4 S trona

6 1. Mnożenie dwóch macierzy kwadratowych o elementach całkowitoliczbowych. 2. Mnożenie dwóch macierzy kwadratowych o elementach zmiennoprzecinkowych. Warto zaznaczyć, że poniższa analiza nie musi mieć charakteru globalnego. Wartości poszczególnych przyspieszeń mogą zależeć od maszyny a przede wszystkim od umiejętności algorytmicznych i numerycznych programisty. 5 S trona

7 2 Zasady Efektywnego Programowania 2.1 Wstęp Zasady przedstawione w tym rozdziale mają na celu przyspieszenie wykonywania kody wynikowego, zaczynając od poprawy techniki programowania autora kodu. Zasady te zostały wybrane według reguły: kilka z wielu. Pozwalają one na efektywniejsze zagospodarowanie jednostki obliczeniowej oraz przyszykowanie kodu do lepszej optymalizacji w przyszłości. Warto zaznaczyć, że korzystanie z poniższych zasad nie przyspieszy znacząco działania programu na liczbę instrukcji optymalizowanych. Jednak optymalizacja przez te zasady może przynieść znaczący skutek, gdy operacji wykonywanych w miejscach newralgicznych, jest dużo, czyli gdy liczba iteracji jest znacząca dla miejsca optymalizacji. Poniższe zasady zostały wybrane i opisane bez technologii know-how, więc nie trzeba posiadać wiedzy informatycznej, aby jest stosować i zrozumieć. W celu polepszenia swojej techniki programowania warto zajrzeć do dodatkowej literatury, opisującej głębsze relacje między kodem pisanym a wynikowym. 2.2 Obliczanie stałych Obliczenie wartości wyrażenia, gdy jest ono długie, warto wykonać osobno i wpisać do zmiennej gotowy wynik. Nieoptymalnie: long x = 12*72+13* *( ) + 735* * *76532; Optymalnie: //12*72+13* *( )+735* *765-43*76532 long x = 55219; 2.3 Dopasowanie typów do wartości Jeżeli wiadomo, jakie wartość będą przyjmowane przez określone zmienne, warto dopasować określony typ do rozpatrywanej zmiennej tak, aby dopasowanie było jak najlepsze, w kryterium wykorzystania wszystkich liczb z zakresu typu do zakresu wartości zmiennej. Mamy kilka liczb: 17;-73;[-500,200];[0,100]; ; -9.23; Nieoptymalnie: int x1=17; int x2=-73; int x3a=-500; int x4a=0; int x5 = ; double x6 = -9.23; Optymalnie: unsigned char x1=17; signed char x2=-73; //char x2=-73 signed short x3a = -500; //short x3a = -500 // for(x3a=-500;x3a<200;x3a++) unsigned char x4a=0; // for(x4a=0;x4a<100;x4a++) signed int x5 = ; //int x5 = signed float x6 = -9.23; //float x6 = S trona

8 2.4 Wyrzucanie niezmienników pętli poza ciało Przy wykonywaniu instrukcji w pętli, warto zastanowić się, czy niektóre zmienne są stałe względem tej pętli. Jeżeli jakaś zmienna jest stała względem tej pętli, to można ją wyrzucić poza ciało pętli. Wtedy program wykona mniej przypisań, więc wykonanie będzie szybsze. Nieoptymalnie: int tab[1000]; for(int i=0;i<1000;i++) { int s=5*8+9-(3+12*5-7*127)-111*3-541; //można również wyliczyć wartość. tab[i]=s; } Optymalnie: unsigned short tab[1000]; //dopasowanie zakresu do wartości unsigned char s=1; //wyliczona wartość oraz dopasowanie zakresu do wartości for(unsigned short i=0; i<1000; i++) tab[i]=s; 2.5 Upraszczanie wyrażeń logicznych i algebraicznych Często warunki, które zamieszczane są w programie są warunkami prostymi, jednoargumentowymi. Zdarzą się niekiedy, że sprawdzany warunek jest w bardzo rozbudowanej formie. Warto wtedy zastosować upraszczanie wyrażeń arytmetycznych i logicznych, korzystając z praw logiki, algebry. Nieoptymalnie: /*przykład 1*/ float licz(int x) { return ((5*8+9-(3+12*5-7*127)-111*3-539)*x+2*5+2-(7+9*4-8*183)-215*6-121)/(3*x+11); } /*przykład 2*/ bool test(bool spr1, bool spr2, bool spr3) { if((spr1 AND (spr2 OR spr3)) OR spr1 OR (spr2 AND (spr1 OR spr3)) AND (spr3 OR (spr1 AND spr2)) OR spr2 OR spr3) return true; else return false; } Optymalnie: /*przykład 1*/ float licz(int x) { return 1+11/(3*x+11); } /*przykład 2*/ 7 S trona

9 bool test(bool spr1, bool spr2, bool spr3) { if(spr1 OR spr2 OR spr3) return true; else return false; } 2.6 Łączenie instrukcji Gdy kolejne instrukcje wykonują podobne operacje, może je połączyć w jedną. Nieoptymalnie: int tab[10]; int x=10; for(int i=0;i<10;i++) { x=x+10; x=x-i; x=3*x+5; x=x+i; x=2*x+9; tab[i]=x; } Optymalnie: int tab[10]; int x=10; for(int i=0;i<10;i++) tab[i]=-4*i+6*x+79; 2.7 Łączenie pętli Jeżeli pętle posiadają ten sam warunek iteracyjny, można je połączyć w jedną pętle. Niekiedy można połączyć kilka pętli, które nie posiadają tego samego warunku iteracyjnego. Nieoptymalnie: /*przykład 1*/ int tab1[100]; int tab2[100]; int tab3[100]; int s=10; int w=11; for(int i=0;i<100;i++) tab1[i]=1; for(int j=0;j<100;j++) tab2[j]=tab1[j]+j+w; //tab2[j]=1+j+w; for(int k=0;k<100;k++) tab3[k]=k+s; /*przykład 2*/ int tab1[100]; int tab2[200]; 8 S trona

10 int tab3[50]; int s=10; int w=11; for(int i=0;i<100;i++) tab1[i]=1; for(int j=0;j<200;j++) tab2[j]=3*j+w; for(int k=0;k<50;k++) tab3[k]=k+s; Optymalnie: /*przykład 1*/ int tab1[100]; int tab2[100]; int tab3[100]; int s=10; int w=11; for(int i=0;i<100;i++) { tab1[i]=1; tab2[j]=tab1[j]+j+w; //tab2[j]=1+j+w; tab3[k]=k+s; } /*przykład 2*/ int tab1[100]; int tab2[200]; int tab3[50]; int s=10; int w=11; for(int i=0;i<200;i++) { if(i<50) { } tab1[i]=1; tab3[i]=i+s; else if(i<100) tab1[i]=1; // zawsze wykonaj przypisanie dla tab2 } tab2[i]=3*i+w; 2.8 Pętla o malejącym iteratorze Można stosować iterator i++ (++i) lub również i--(--i). Iterator drugi jest szybszy, bowiem warunek sprawdzający komputer wykonuje w jednym rozkazie (i>0) a nie w dwóch (i- 100>0). Nieoptymalnie: 9 S trona

11 for(int i=0;i<100;i++) tab[i]=3; Optymalnie: for(int i=100;i>0;i--) tab[i]=3; 2.9 Operacje na szybszych operandach Maszynie trudniej jest wykonać potęgowanie niż mnożenie czy dzielenie. Szybciej radzi sobie z dodawaniem i odejmowaniem. Jednak najszybciej wykonuje przesuniecie bitowe. Zamiast mnożyć/dzielić dwie liczby, można wykorzystać z przesunięcia bitowego i dodawania. Nieoptymalnie: long licz(int podaj) { } Optymalnie: return podaj*199; long licz(int podaj) { } return (podaj<<0) + (podaj<<1) + (podaj<<2) + (podaj<<6) + (podaj<<7); 2.10 Spłaszczanie pętli Zastępowanie kilku zagnieżdżonych pętli w jedną dłuższą. Nieoptymalnie: int tab[100][100]; for(int i=0;i<100;i++) for(int j=0;j<100;j++) tab[i][j]=i+j; Optymalnie: unsigned char tab[10000]; //bo 100*100 unsigned short it=0; unsigned char w=0; unsigned char k=0; for(it=0;it<10000;it++) { } if(w==100) {w=0; k++;} tab[it]=w+k; w++; 2.11 Eliminacja zbędnych wyrażeń Pomijanie instrukcji, dla których ich wynik będzie miał taką samą wartość. Zazwyczaj są to instrukcje pisane przez programistę w celu odszukania błędu w programie i kontrolowaniu poszczególnych wartości na każdym etapie algorytmu. Niekiedy jednak takie instrukcje nie są pisane w określonym celu, jakim jest np. szukanie błędu. Czasami programista pisze dwie 10 S trona

12 funkcje, które mają właściwie takie same ciała i dają identyczne wyniki. Zdarza się czasami, iż używa ich naprzemiennie. Warto wtedy pozostać przy jednej Wykonane obliczenia Najlepiej widać to w rozwinięciach w szereg Taylora. Załóżmy, że trzeba policzyć kolejne wyrazy dla skończonego rozwinięcia, w zwiniętym szeregu: Ideą takiego postępowania jest, iż jeżeli obliczona została potęgę dla x^7 to aby obliczyć x^9 nie trzeba ponownie obliczyć dla x^7. Więc, aby przyspieszyć obliczenia odszukano zależność między i-tym oraz (i+1)-szym wyrazem i skorzystano z tej zależności. Warto zwrócić uwagę, iż w takim podejściu można zredukować liczbę funkcji dodatkowych potrzebnych do obliczeń. Niekiedy zredukowane funkcje są czasochłonne. Nieoptymalnie: double wyraz(int pozycja, int x) { } Optymalnie: return potega(x,2*pozycja+1)/silnia(pozycja); //nie zagłębiam się jak wyglądają funkcje: potęga( ) oraz silnia( ) double wyraz(double poprzednik, int x, int pozycja) { } return poprzednik*potega(x,2)/(pozycja+1); //nie zagłębiam się jak wygląda funkcja potega( ) 2.13 Sprawdzanie warunków Stosując instrukcje if, zdarza się czasami, iż warunek do sprawdzenia jest długi i skomplikowany. Zdarza się czasami, iż warunek zawiera odwołanie od funkcji, której obliczenia są czasochłonne. Warto wiedzieć, iż komputer sprawdza warunki od lewej strony do prawej. Można wtedy skorzystać z faktu, iż najpierw niech sprawdzi warunki, które sprawdza się szybko lub które często będą nieprawdziwe i stopniowo przechodzić do warunków bardziej czasochłonnych. Warto również spróbować najpierw uprościć wyrażenie, natomiast później zamieścić je w odpowiedniej kolejności. W tym przypadku funkcja Licz(arg) jest funkcją czasochłonną w obliczeniach. Nieoptymalnie: /*przykład 1*/ if(test1==true AND Licz(arg)==true OR test2==true) /*przykład 2*/ if(licz(arg))==true AND test2=false AND test1==true) Optymalnie: /*przykład 1*/ if(test2==true OR test1==true AND Licz(arg)==true) /*przykład 2*/ if(test2=false AND test1==true OR Licz(arg))==true)! 11 S trona

13 2.14 Zwiększenie skoku pętli Dla wielkich pętli, gdzie iterator przebiega od 0 do >10, warto zwiększyć skok pętli. Przy skoku równym 1 komputer sprawdzi 10 warunek zakończenia pętli. Warto wówczas zaoszczędzić ten czas i przeznaczyć go na coś efektywniejszego. Nieoptymalnie: for(unsigned long i=0;i< ;i++) { tab[i]=i; } Optymalnie: for(unsigned long i=0;i< ;i+=5) { tab[i]=i; tab[i+1]=i+1; tab[i+2]=i+2; tab[i+3]=i+3; tab[i+4]=i+4; } 2.15 Przekazywanie dużych danych Jeżeli jakaś funkcja posiada, jako argument strukturę, to nie opłaca się przekazywać całej struktury. Warto przekazywać argument, jako wskaźnik/referencje, która jest czasami znacznie lżejsza niż przekazanie całej struktury. struct moja { double a,b,c,d,e,f,g,h,i,j; }; Nieoptymalnie: void obliczenia(moja dane) Optymalnie: void obliczenia(moja &dane) 2.16 Konstrukcja wzajemnego wykluczania Warto zastępować konstrukcje if, konstrukcja if else if Chodzenie po tak stworzonej strukturze warunków jest znaczenie szybsze oraz nie zastają sprawdzane wielokrotnie warunki, które pośrednio zostały sprawdzone i są one nieprawdziwe. Nieoptymalnie: /*przykład 1*/ if(test1<10) {/*instrukcja1*/} if(test1>=10 AND test1<100) {/*instrukcja2*/} /*przykład 2*/ if(test1<10 AND test2<60) {/*instrukcja3*/} if(test1>=10 AND test1<100 AND test2<60) {/*instrukcja4*/} if(test1>=100 AND test1<200 AND test2>=60 AND test2<75) {/*instrukcja5*/} Optymalnie: /*przykład 1*/ if(test1<10) {/*instrukcja1*/} 12 S trona

14 else if(test1<100) {/*instrukcja2*/} /*przykład 2*/ if(test2<60){ if(test1<10) {/*instrukcja3*/} else if(test1<100) {/*instrukcja4*/} } else if(test2<75) if(test1>=100 AND test1<200) {/*instrukcja5*/} 2.17 Wartości leniwe Strategia wyznaczania wartości argumentów funkcji na żądanie. Podczas próby wykonywania obliczeń sprawdzamy czy już takie obliczenia były wykonane i czy wartości z tych obliczeń są aktualne. Jeżeli wynik obliczeń jest nieaktualny wracamy do obliczenia danych na nowo. Zazwyczaj uzyskiwanie tych informacji i przetrzymywanie wiąże się z niewielkim narzutem czasowym i pamięciowym Podsumowanie Zasad Efektywnego Programowania Zasady, które zostały przytoczone powyżej, nie wyczerpują po trosze tematu efektywnego programowania. Pokazują, w jaki sposób można rozpocząć efektywne programowanie, w kryterium czasu wykonywania kompilatu. Zasady te warto stosować i przetestować na dużych liczbach iteracji, aby całkowity uzysk czasowy był miły dla oka. Warto zwrócić szczególną uwagę na to, że programy składają się z pętli, które niekiedy z rzędem licznika milion. Warto wtedy zwrócić swoją uwagę na te pętle i skupić całą optymalizację w ich obrębie. Warto również rozważyć instrukcje warunkowe, czy warunki są w najprostszej postaci oraz czy nie następuje sprawdzanie warunku, który z góry będzie niespełniony. 13 S trona

15 3 Przełączniki wybranych kompilatorów Wybrane do testowania kompilatory posiadają 2 typy podstawowych przełączników optymalizacyjnych. Pierwszy typ odpowiada za wielkość kodu wynikowego, natomiast drugi typ odpowiada za szybkość działania kompilatu. W niniejszym rozdziale skupiono się na typem optymalizacyjnym względem czasu wykonywania kompilatu. Są cztery tego typu przełączników. Kompilatory również posiadają flagi optymalizacyjne, które można podzielić na: obliczeniowe, architektoniczne, precyzji, inne. Skupiono się na flagach obliczeniowych oraz architektonicznych, bowiem te flagi mają bezpośredni wpływ na optymalizację w wybranym kryterium. Flagi precyzji, są to flagi, które pozwalają na zmniejszenie precyzji obliczeń. Flagi te nie będą przedmiotem niniejszej pracy, bowiem praca dotyczy optymalizacji bez straty precyzji prowadzonych obliczeń. 3.1 Kompilator GCC -O0: Przełączniki typu O[x] Brak optymalizacji. Przełącznik domyślnie aktywny. -O1: Kompilator stara się zmniejszyć rozmiar kodu i czas realizacji, bez wykonywania żadnych optymalizacji, które mogą powodować problem przy uruchamianiu kompilatu na innym sprzęcie, lub mogące powodować zmianę struktury kodu. W zależności od jądra systemu, ten przełącznik włącza następujące flagi: -fauto-inc-dec, -fcprop-registers, -fdce, -fdefer-pop, -fdelayed-branch, -fdse, -fguess-branchprobability, -fif-conversion2, -fif-conversion, -fipa-pure-const, -fipa-reference, -fmergeconstants, -fshrink-wrap, -fsplit-wide-types, -ftree-builtin-call-dce, -ftree-ccp, -ftree-ch, -ftreecopyrename, -ftree-dce, -ftree-dominator-opts, -ftree-dse, -ftree-forwprop, -ftree-fre, -ftreephiprop, -ftree-sra, -ftree-pta, -ftree-ter, -funit-at-a-time. -O2: Kompilator stara się zwiększyć szybkość działania kodu wynikowego, dopasowując się do rodziny sprzętowej, jak analizując kod pod względem typowych przekształceń numerycznych i algorytmicznych. W zależności od jądra systemu, ten przełącznik włącza następujące dodatkowe względem przełącznika O1 flagi: -fthread-jumps, -falign-functions, -falign-jumps, -falign-loops, -falign-labels, -fcaller-saves crossjumping, -fcse-follow-jumps, -fcse-skip-blocks, -fdelete-null-pointer-checks, -fexpensiveoptimizations, -fgcse, -fgcse-lm, -finline-small-functions, -findirect-inlining, -fipa-sra, -foptimizesibling-calls, -fpeephole2, -fregmove -freorder-blocks, -freorder-functions, -frerun-cse-afterloop, -fsched-interblock, -fsched-spec, -fschedule-insns, -fschedule-insns2, -fstrict-aliasing, - fstrict-overflow, -ftree-if-to-switch-conversion, -ftree-switch-conversion, -ftree-pre -ftree-vrp. -O3: 14 S trona

16 Kompilator stara się zwiększyć szybkość działania kodu wynikowego, dopasowując się do konkretnej architektury system. Program taki może nie wykonać się na innej klasie jednostki obliczeniowej. W zależności od jądra systemu, ten przełącznik włącza następujące dodatkowe względem przełącznika O2 flagi: -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload, -ftreevectorize, -fipa-cp-clone options. Możliwości optymalizacyjnych, jakie oferuje kompilator GCC jest więcej, co za tym idzie, zaleca się przeczytanie dokumentacji kompilatora, w celu jak najlepszego dopasowania swojej optymalizacji do użytku programu Flagi optymalizacyjne Obliczeniowe Są to flagi kompilatora, które pozwalają dopasować się do konkretnych obliczeń, które wykonywane są w programie. Jeżeli wykonywane są obliczenia modulo dla pewnego pierścienia można przyspieszyć obliczenia ze względu na włączenia flagi, która przyspieszy takie obliczenia. W celu dopasowania specyficznych obliczeń do konkretnej flagi zaleca się zapoznanie z dokumentacją kompilatora. Przykładowe flagi, które zostały wybrane: -fipa-pure-const, -fipa-reference, -fmerge-constants, -fshrink-wrap, -fsplit-wide-types, -ftreebuiltin-call-dce, -ftree-copyrename, -ftree-dce, -ftree-dominator-opts, -ftree-dse, -ftreeforwprop, -ftree-fre, -ftree-phiprop, -ftree-sra, -ftree-pta, -ftree-ter, -funit-at-a-time, -fkeepinline-functions, -fkeep-static-consts, -fmerge-constants, -fmodulo-sched, -fgcse, -fdce, -fdse, - fexpensive-optimizations, -fipa-cp-clone, -fipa-matrix-reorg, -ftree-loop-linear, -floopinterchange, -floop-strip-mine, -floop-block, -ftree-loop-distribution, -ffast-math, -fassociativemath, -freciprocal-math, -funroll-all-loops, -fpeel-loops, Flagi optymalizacyjne Architekturalne Są to flagi kompilatora, które pozwalają dopasować się do kontentej maszyny liczącej, wykorzystując jej najlepsze cechy, rozkład rejestrów. Wykorzystują architekturę tak aby jak najlepiej dopasować się pod względem szybkości wykonywanych obliczeń. Przykładowe flagi, które zostały wybrane: -mmangle-cpu. -mcpu=cpu, -mcpu=name, -mtune=name, -march=name, -mfpu=name, - mfpe=number, -mfp=number, -mstructure-size-boundary=n, -mtp=name, -mcpu=cpu[- sirevision], -mmulticore. 3.2 Kompilatora ICC -O0: Przełączniki typu O[x] Wyłącza wszystkie optymalizacje. Przełącznik domyślnie aktywny. -O1: Kompilator poprzez ten przełącznik nie dopasowuje się do architektury maszyny. Kompilator próbuje optymalizować kod poprzez wykorzystanie ogólnodostępnych narzędzi komunikacji między poszczególnymi fragmentami kodu wynikowego. Przełącznik ten oferuje 15 S trona

17 najmniejszy stopień optymalizacji. W zależności od architektury maszyny, przełącznik ten może aktywować flagi, o których użytkownik może nie wiedzieć 1. -O2: Zalecany poziom optymalizacji. Przełącznik ten umożliwia lepsze dostosowanie się do rodziny sprzętowej, przez globalne zarządzanie rejestrami. Dopasowuje się również do optymalnego zarządzania wyjątkami, optymalizuje wybrany fragment kodu przez rozwinięcie pętli oraz zmianę warunków w pętli. Przełącznik ten może włącz inne flagi optymalizacyjne w celu zwiększenia prędkości działania kompilatu, jednak włączenie ich zależy od systemu i architektury, na jakiej kompilator działa. W celu zwiększenia działania swojego kodu, zalecane jest zapoznanie się z dokumentacją kompilatora z sekcją: Optymalizacja. -O3: Kompilator agresywniej podchodzi do kompilacji, stosując pewne techniki optymalizacyjne, przez co kompilat może być niestabilny. Kompilator próbuje bardziej dostosować się do architektury komputera, co może uniemożliwić działanie kodu na innej maszynie. Przełącznik ten aktywuje flaga, w zależności od parametrów technicznych maszyny, na której kompilator pracuje. Optymalizacja tym przełącznikiem jest niezalecana, w kryterium bardzo dokładnych obliczeń oraz mobilności kodu wynikowego. W celu zapoznania się z przełącznikiem, warto przeczytać dokumentacje kompilatora. Przełączników kompilatora ICC jest więcej. Głównie flagi, które są zawarte w dokumentacji kompilatora, mają za zadanie dopasowanie się do architektury firmy prowadzącej kompilator Flagi optymalizacyjne Obliczeniowe -fast, -fast-transcendentals, -fpie, -funroll-all-loops, -funsigned-bitfields, -parallel, -opt-matmul, - fmath-errno, -fp-model keyword, -fp-speculation=mode Flagi optymalizacyjne Architekturalne -auto-p32, -axcode, -fomit-frame-pointer. 1 Jeżeli kompilator odszuka sprzyjający sprzęt firmy Intel, kompilator aktywuje flagi związane z dostosowaniem się do rodziny jednostki obliczeniowej. 16 S trona

18 4 Wielowątkowość programów Wątek to jest twór systemowy, który wie, co ma zrobić i próbuje dostać od jednostki obliczeniowej trochę czasu na wykonanie powierzonego mu zadania. Wielowątkowość to cecha systemu operacyjnego, która umożliwia w ramach jednego procesu można wykonywać kilka wątków. Nowe wątki to kolejne instrukcje wykonywane oddzielnie, pochodzące z tego samego procesu, które współdzielą kod programu oraz dane. Wielowątkowość można odnieść do procesorów. W takim przypadku, wielowątkowość oznacza możliwość jednoczesnego wykonywania wielu wątków na pojedynczej jednostce obliczeniowej. W takim przypadku są to wątki sprzętowe, które zależą od liczby rdzeni procesora i wykonywane są równolegle. Cechą wielowątkowości jest to, iż wszystkie wątki wykonują się w ramach procesu głównego. Wielowątkowość została wprowadzona, w celu przetwarzania współbieżnego. Przetwarzanie współbieżne może przynieść zwiększenie wydajności programu, jednak mu istnieć ku temu odpowiednie zasoby sprzętowe. Wielowątkowość może również obniżyć wydajność, ponieważ potrzeba stworzyć wątek i go obsłużyć. Tworzenie jak i obsługa, np. synchronizacja wątków zabierają cenny czas procesora. Wszystkie wątki w obrębie jednego procesu współdzielą tę samą wirtualną przestrzeń adresową. Komunikacją między wątkami jest skonstruowana dosyć łatwo, bowiem wystarczy odwołać się do tych zmiennych współdzielonych. 17 S trona

19 5 OpenMP 5.1 Wstęp do OpenMP OpenMP jest to standard dla komputerów równoległych (SMP) dostarczony w postaci API dla programisty. Dostarcza mechanizmów korzystających w sposób jawny z wielowątkowości i pamięci współdzielonej w trybie równoległym. Standard bazuje na tworzeniu i usuwaniu wątków dla obszarów równoległych, które wykonują narzucone zadania przez programistę. Programista ma wpływ na liczbę tworzonych wątków i jakie główne zadanie ma zostać wykonanie przez grupę wątków. Programista natomiast nie ma wpływu, jakie wątki, co wykonają, tzn. programista nie przyporządkowuje konkretnemu wątkowi określonego zadania. Idea działania programu w standardzie OpenMP została ukazana na rysunku poniżej. Rysunek 1. Idea działania programu ze standardem OpenMP. Źródło: Zawsze startuje pojedynczy proces, który tworzy n wątków dla sekcji równoległej. po zakończeniu działania w tej sekcji następuje synchronizacja i porządkowanie. Wynikiem tego wątkiem, który zostaje jest wątek główny. Przechodząc do następnej sekcji równoległej, wątek główny tworzy n wątków, które wykonują zadanie w sekcji równoległej, po czym kończą działanie i wątek główny przechodzi dalej. Tworzenie sekcji równoległych opatrzone jest w kodzie źródłowym w postaci jawnej, odpowiednia dyrektywą preprocesora w postaci: #pragma omp nazwa_dyrektywy warunki nowa_linia_kodu Warto zaznaczyć, iż każda dyrektywa posiada jedną nazwę oraz każda dyrektywa dotyczy najbliższego następującego bloku kodu, czyli np. #pragma omp parallel shared(sum) private(i,arg) { //miejsce, w którym kodu nie powinno być //instrukcje sekcji równoległej } //koniec sekcji równoległej automatyczna synchronizacja i zarządzanie watkami 18 S trona

20 5.2 Pragmy w OpenMP Pragma paralel Aby potencjalnie wykorzystać równoległość obliczeń można zastosować pragme parallel. Po dyrektywnie parallell następuje bezpośrednio blok kodu z jednym wejściem i jednym wyjściem. Postać konstrukcji parallel jest następujące: #pragma omp parallel { //przetwarzanie równoległe } //przetwarzanie sekwencyjne Wykonanie konstrukcji parrallel jest następujące. Gdy wątek główny programu osiągnie miejsce określone przez dyrektywę parallel, wówczas tworzona jest grupa wątków. Grupa wątków stworzona jest pod warunkami, iż nie występuje klauzula if oraz jeśli występuje klauzula if ma ona wartość różna od zera. Gdy nie wystąpi taka sytuacja, wówczas blok kodu znajdujący się bezpośrednio pod dyrektywą parallel jest wykonywany przez wątek główny. Liczba wątków zależy od zmiennej OMP_NUM_THREADS Pragma for Warto również zapoznać się z pragmami określającymi dzielenie pracy. Najbardziej rozpoznawalną konstrukcją jest konstrukcja for. Konstrukcja for umożliwia dzielenie ciała pętli między wątki w grupie, przy czym każdy obrót pętli będzie wykonywany tylko raz. Konstrukcja ma postać: #pragma omp for for(...,...,...) { //ciało pętli for } Konstrukcja for wymaga, aby przed jej wykonaniem była znana liczba obrotów pętli Klauzula ordered Klauzula ordered umożliwia realizację wybranej części ciała pętli for w takim porządku, jakby pętla była wykonywana sekwencyjnie. #pragma omp for ordered for (i=0; i<32; i++) { // intensywne obliczenia #pragma omp ordered p r i n t f ( "Watek %d wykonuje:= %d\n",iam,i) ; } Klauzula schedule Klauzula schedule specyfikuje sposób podziału wykonań ciała pętli między wątki. Decyduje o tym parametr rodzaj, który może przybierać następujące wartości: static gdy przyjmuje postać schedule(static,rozmiar), wówczas pula obrotów jest dzielona na kawałki o wielkości rozmiar, które są cyklicznie przydzielane do wątków; gdy nie poda się rozmiaru, to pula obrotów jest dzielona na mniej więcej równe części; 19 S trona

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Przetwarzanie Równoległe i Rozproszone

Przetwarzanie Równoległe i Rozproszone POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Kompilator języka C na procesor 8051 RC51 implementacja

Kompilator języka C na procesor 8051 RC51 implementacja Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności. Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Organizacja pamięci Organizacja pamięci współczesnych systemów komputerowych

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU

Programowanie procesorów graficznych GPGPU Programowanie procesorów graficznych GPGPU 1 GPGPU Historia: lata 80 te popularyzacja systemów i programów z graficznym interfejsem specjalistyczne układy do przetwarzania grafiki 2D lata 90 te standaryzacja

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII Spis treści Od autora..................................................... Obliczenia inżynierskie i naukowe.................................. X XII Ostrzeżenia...................................................XVII

Bardziej szczegółowo

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia

Bardziej szczegółowo

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie

Bardziej szczegółowo

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm Streszczenie Tematem pracy jest standard OpenMP pozwalający na programowanie współbieŝne w systemach komputerowych

Bardziej szczegółowo

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

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Wprowadzenie Procesory graficzne GPU (Graphics Processing Units) stosowane są w kartach graficznych do przetwarzania grafiki komputerowej

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Typy danych, zmienne i tablice. Tomasz Borzyszkowski Typy danych, zmienne i tablice Tomasz Borzyszkowski Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów?

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10. ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I DZIESIĘTNYM Aby zamienić liczbę z systemu dwójkowego (binarnego) na dziesiętny (decymalny) należy najpierw przypomnieć sobie jak są tworzone liczby w ww systemach

Bardziej szczegółowo

Przetwarzanie potokowe pipelining

Przetwarzanie potokowe pipelining Przetwarzanie potokowe pipelining (część A) Przypomnienie - implementacja jednocyklowa 4 Add Add PC Address memory ister # isters Address ister # ister # memory Wstęp W implementacjach prezentowanych tydzień

Bardziej szczegółowo

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga! Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

Microsoft IT Academy kurs programowania Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego

Bardziej szczegółowo

Zarządzanie pamięcią w systemie operacyjnym

Zarządzanie pamięcią w systemie operacyjnym Zarządzanie pamięcią w systemie operacyjnym Cele: przydział zasobów pamięciowych wykonywanym programom, zapewnienie bezpieczeństwa wykonywanych procesów (ochrona pamięci), efektywne wykorzystanie dostępnej

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16 M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Programowanie strukturalne i obiektowe

Programowanie strukturalne i obiektowe Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład I I Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Zaliczenie przedmiotu Na laboratorium można zdobyć 100 punktów. Do zaliczenia niezbędne jest

Bardziej szczegółowo

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard

Bardziej szczegółowo

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

Wyklad 11 Języki programowania równoległego

Wyklad 11 Języki programowania równoległego Wyklad 11 Języki programowania równoległego Części wykładu: 1. Środowisko programu równoległego - procesy i wątki 2. Podstawowe problemy języków programowania równoległego 3. Języki programowania w środowisku

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

Program 14. #include #include using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

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

Python wstęp do programowania dla użytkowników WCSS Python wstęp do programowania dla użytkowników WCSS Dr inż. Krzysztof Berezowski Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Wprowadzenie CHARAKTERYSTYKA JĘZYKA Filozofia języka

Bardziej szczegółowo

Funkcja (podprogram) void

Funkcja (podprogram) void Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji

Bardziej szczegółowo

Sieci obliczeniowe poprawny dobór i modelowanie

Sieci obliczeniowe poprawny dobór i modelowanie Sieci obliczeniowe poprawny dobór i modelowanie 1. Wstęp. Jednym z pierwszych, a zarazem najważniejszym krokiem podczas tworzenia symulacji CFD jest poprawne określenie rozdzielczości, wymiarów oraz ilości

Bardziej szczegółowo

PROGRAMOWANIE w C prolog

PROGRAMOWANIE w C prolog PROGRAMOWANIE w C prolog dr inż. Jarosław Stańczyk Uniwersytet Przyrodniczy we Wrocławiu Wydział Biologii i Hodowli Zwierząt Katedra Genetyki 1 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014

Bardziej szczegółowo

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16 MMX i SSE Zbigniew Koza Wydział Fizyki i Astronomii Uniwersytet Wrocławski Wrocław, 10 marca 2011 Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16 Spis treści Spis treści 1 Wstęp Zbigniew Koza (WFiA UWr) MMX

Bardziej szczegółowo

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 1-2. Podstawowe pojęcia Plan wykładu Omówienie programu wykładów, laboratoriów oraz egzaminu Etapy rozwiązywania problemów dr Helena Dudycz Katedra Technologii Informacyjnych

Bardziej szczegółowo

Modelowanie procesów współbieżnych

Modelowanie procesów współbieżnych Modelowanie procesów współbieżnych dr inż. Maciej Piotrowicz Katedra Mikroelektroniki i Technik Informatycznych PŁ piotrowi@dmcs.p.lodz.pl http://fiona.dmcs.pl/~piotrowi -> Modelowanie... Literatura M.

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI Patryk Mach Uniwersytet Jagielloński, Instytut Fizyki im. Mariana Smoluchowskiego OpenMP (Open Multi Processing) zbiór dyrektyw kompilatora, funkcji

Bardziej szczegółowo

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3-2 5 8 12-4 -26 12 45-76

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3-2 5 8 12-4 -26 12 45-76 . p. 1 Algorytmem nazywa się poddający się interpretacji skończony zbiór instrukcji wykonania zadania mającego określony stan końcowy dla każdego zestawu danych wejściowych W algorytmach mogą występować

Bardziej szczegółowo

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Wydajność obliczeń a architektura procesorów Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Wydajność komputerów Modele wydajności-> szacowanie czasu wykonania zadania Wydajność szybkość realizacji wyznaczonych

Bardziej szczegółowo

Podstawy programowania komputerów

Podstawy programowania komputerów Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

Kiedy i czy konieczne?

Kiedy i czy konieczne? Bazy Danych Kiedy i czy konieczne? Zastanów się: czy często wykonujesz te same czynności? czy wielokrotnie musisz tworzyć i wypełniać dokumenty do siebie podobne (faktury, oferty, raporty itp.) czy ciągle

Bardziej szczegółowo

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

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz

Bardziej szczegółowo

Programowanie mikrokontrolerów AVR

Programowanie mikrokontrolerów AVR Programowanie mikrokontrolerów AVR Czym jest mikrokontroler? Mikrokontroler jest małym komputerem podłączanym do układów elektronicznych. Pamięć RAM/ROM CPU wykonuje program Układy I/O Komunikacje ze światem

Bardziej szczegółowo

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, zapoczątkowana przez i wstecznie zgodna z 16-bitowym procesorem

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Podstawy programowania C dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Tematy Struktura programu w C Typy danych Operacje Instrukcja grupująca Instrukcja przypisania Instrukcja warunkowa Struktura

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1 Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1 MPI dynamiczne zarządzanie procesami MPI 2 umożliwia dynamiczne zarządzanie procesami, choć

Bardziej szczegółowo

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą 1. Statystyka odczytać informacje z tabeli odczytać informacje z diagramu 2. Mnożenie i dzielenie potęg o tych samych podstawach 3. Mnożenie i dzielenie potęg o tych samych wykładnikach 4. Potęga o wykładniku

Bardziej szczegółowo

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem Moduł 1 1. Wprowadzenie do języka Python Python jest dynamicznym językiem interpretowanym. Interpretowany tzn. że kod, który napiszemy możemy natychmiast wykonać bez potrzeby tłumaczenia kodu programistycznego

Bardziej szczegółowo

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

* WWW: * E-mail: * Adres: Instytut Informatyki ul. Będzińska 39 41-200 Sosnowiec Pokój 214 * Telefon: 32 3689765

* WWW: * E-mail: * Adres: Instytut Informatyki ul. Będzińska 39 41-200 Sosnowiec Pokój 214 * Telefon: 32 3689765 * Łagodny start * * WWW: * E-mail: * Adres: Instytut Informatyki ul. Będzińska 39 41-200 Sosnowiec Pokój 214 * Telefon: 32 3689765 Zaliczenie zajęć: 3-4 kolokwia + obecność ALBO Projekt zaliczeniowy +

Bardziej szczegółowo

1 Wskaźniki i listy jednokierunkowe

1 Wskaźniki i listy jednokierunkowe 1 Wskaźniki i listy jednokierunkowe 1.1 Model pamięci komputera Pamięć komputera możemy wyobrażać sobie tak, jak na rysunku: Zawartość:... 01001011 01101010 11100101 00111001 00100010 01110011... adresy:

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl Programowanie niskopoziomowe dr inż. Paweł Pełczyński ppelczynski@swspiz.pl 1 Literatura Randall Hyde: Asembler. Sztuka programowania, Helion, 2004. Eugeniusz Wróbel: Praktyczny kurs asemblera, Helion,

Bardziej szczegółowo

Proste programy w C++ zadania

Proste programy w C++ zadania Proste programy w C++ zadania Zbiór zadao do samodzielnego rozwiązania stanowiący powtórzenie materiału. Podstawy C++ Budowa programu w C++ Dyrektywy preprocesora Usunięcie dublujących się nazw Częśd główna

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Algorytmy i programowanie Algorithms and Programming Kierunek: Zarządzanie i Inżynieria Produkcji Rodzaj przedmiotu: kierunkowy Poziom studiów: studia I stopnia forma studiów: studia

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24 Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.

Bardziej szczegółowo

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej. Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Konstrukcje i Technologie w Aparaturze Elektronicznej Ćwiczenie nr 5 Temat: Przetwarzanie A/C. Implementacja

Bardziej szczegółowo

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI plan Cechy, właściwości procesów Multitasking Scheduling Fork czym jest proces? Działającą instancją programu Program jest kolekcją

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1 dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1 Cel wykładu Definicja, miejsce, rola i zadania systemu operacyjnego Klasyfikacja systemów operacyjnych Zasada działanie systemu operacyjnego

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Algorytmika i Programowanie VBA 1 - podstawy

Algorytmika i Programowanie VBA 1 - podstawy Algorytmika i Programowanie VBA 1 - podstawy Tomasz Sokół ZZI, IL, PW Czas START uruchamianie środowiska VBA w Excelu Alt-F11 lub Narzędzia / Makra / Edytor Visual Basic konfiguracja środowiska VBA przy

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)

Bardziej szczegółowo

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

Bardziej szczegółowo

Czytanie wykresów to ważna umiejętność, jeden wykres zawiera więcej informacji, niż strona tekstu. Dlatego musisz umieć to robić.

Czytanie wykresów to ważna umiejętność, jeden wykres zawiera więcej informacji, niż strona tekstu. Dlatego musisz umieć to robić. Analiza i czytanie wykresów Czytanie wykresów to ważna umiejętność, jeden wykres zawiera więcej informacji, niż strona tekstu. Dlatego musisz umieć to robić. Aby dobrze odczytać wykres zaczynamy od opisu

Bardziej szczegółowo

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36 Bazy danych wykład dwunasty Wykonywanie i optymalizacja zapytań SQL Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36 Model kosztów

Bardziej szczegółowo

Nowoczesne technologie przetwarzania informacji

Nowoczesne technologie przetwarzania informacji Projekt Nowe metody nauczania w matematyce Nr POKL.09.04.00-14-133/11 Nowoczesne technologie przetwarzania informacji Mgr Maciej Cytowski (ICM UW) Lekcja 2: Podstawowe mechanizmy programowania równoległego

Bardziej szczegółowo

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

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne

Bardziej szczegółowo