Programowanie kart graficznych. Architektura i API część 2
|
|
- Julia Szymczak
- 6 lat temu
- Przeglądów:
Transkrypt
1 Programowanie kart graficznych Architektura i API część 2
2 CUDA hierarchia pamięci c.d.
3 Globalna pamięć urządzenia: funkcje CUDA API takie jak cudamalloc() i cudafree() z założenia służą do manipulowania pamięcią adresowaną liniowo (czyli predystynowaną do przechowywania i obróbki wektorów) nie wyklucza to użycia tych funkcji do obróbki tablic dwu- i trójwymiarowych, ale dla tych zastosowań CUDA API przewiduje użycie funkcji specjalizowanych są to: cudamallocpitch() - dla macierzy 2D cudamalloc3d() - dla macierzy 3D
4 Globalna pamięć urządzenia: użycie tych funkcji gwarantuje, że tablica zostanie rozmieszczona w pamięci w optymalny sposób, gwarantujący najkrótszy czas dostępu do wierszy oraz przy kopiowaniu jej elementów do innych regionów pamięci urządzenia najpierw rozpatrzymy aspekt 2D takiego przydziału
5 CUDA API zarządzanie pamięcią: przydzielenie pamięci dla tablicy 2D cudaerror_t cudamallocpitch( void **devptr, size_t *pitch, size_t width, size_t height ); Funkcja przydziela co najmniej width*height bajtów i zwraca wskaźnik do przydzielonej pamięci w zmiennej *devptr; funkcja może dopełnić każdy z wierszy dodatkowymi bajtami celem optymalnego rozmieszczenia danych; rzeczywisty rozmiar wiersza jest zwracany w pitch.
6 cudamallocpitch: parametry: devptr: wskaźnik na wskaźnik reprezentujący przydzielony blok pamięci pitch : wskaźnik na daną reprezentującą przydzielony faktycznie rozmiar wiersza width : rozmiar wiersza przydzielanej tablicy (liczba bajtów) height : rozmiar kolumny przydzielanej tablicy (liczba wierszy) wynik: cudasuccess poprawne zakończenie działania funkcji cudaerrormemoryallocation błąd przydziału, awaryjny powrót z funkcji
7 cudamallocpitch przykład (iterowanie po elementach tablicy 2D) float *devptr; int pitch; cudamallocpitch((void**)&devptr, &pitch,width * sizeof(float), height); MyKernel<<<100, 512>>>(devPtr, pitch); global void MyKernel(float* devptr, int pitch) { for (int r = 0; r < height; ++r) { // wyliczenie adresu początkowego wiersza float *row = (float *)((char *)devptr + r * pitch); } } // iterowanie po elementach wiersza for (int c = 0; c < width; ++c) { float element = row[c]; }
8 Pamięć urządzenia: a teraz pora na aspekt 3D
9 CUDA API zarządzanie pamięcią: reprezentowanie rozmiarów tablicy 3D struct cudaextent { size_t depth; // głębokość (liczba elementów) size_t height;// wysokość (liczba elementów) size_t width; // szerokość (liczba bajtów(!)) };
10 CUDA API zarządzanie pamięcią: wytworzenie struktury typu cudaextent: struct cudaextent make_cudaextent(size_t w, size_t h, size_t d); parametry: w : szerokość definiowanej tablicy (liczba bajtów) h : wysokość definiowanej tablicy (liczba elementów) d : głębokość definiowanej tablicy (liczba elementów) wynik: nowo utworzona struktura typu cudaextent wypełniona podanymi danymi
11 CUDA API zarządzanie pamięcią: reprezentowanie przydziału tablicy 3D struct cudapitchedptr { size_t pitch; // rozmiar wiersza (liczba bajtów) void ptr; // wskaźnik na przydzieloną pamięć }; size_t xsize; // logiczna szerokość przydziału // (liczba elementów) size_t ysize; // logiczna wysokość przydziału // (liczba elementów)
12 CUDA API zarządzanie pamięcią: wytworzenie struktury typu cudapitchedptr: struct cudapitchedptr make_cudapitchedptr (void *d, size_t p, size_t xsz, size_t ysz); parametry: d : wskaźnik na przydzieloną tablicę p : rozmiar wiersza fizycznego (liczba bajtów) h : logiczna szerokość tablicy (liczba elementów) d : logiczna głębokość tablicy (liczba elementów) wynik: nowo utworzona struktura typu cudapitchedptr wypełniona podanymi danymi
13 CUDA API zarządzanie pamięcią: przydzielenie pamięci dla tablicy 3D cudaerror_t cudamalloc3d( struct cudapitchedptr *pitcheddevptr, struct cudaextent extent ); Funkcja przydziela co najmniej width*height*depth bajtów i wypełnia danymi strukturę wskazywaną przez *pitcheddevptr; funkcja może dopełnić każdy z wierszy dodatkowymi bajtami celem optymalnego rozmieszczenia danych; rzeczywisty rozmiar wiersza jest zwracany w polu pitch.
14 cudamallocpitch: parametry: pitcheddevptr : wskaźnik na strukturę przeznaczoną do reprezentowania przydzielonego bloku pamięci (zostanie wypełniona danymi przez funkcję) extent: struktura opisująca rozmiary przydzielanej wynik: tablicy cudasuccess poprawne zakończenie działania funkcji cudaerrormemoryallocation błąd przydziału, awaryjny powrót z funkcji
15 cudamalloc3d przykład (iterowanie po elementach tablicy 3D) CudaPitchedPtr devpitchedptr; CudaExtent extent = make_cudaextent(64, 64, 64); cudamalloc3d(&devpitchedptr, extent); MyKernel<<<100, 512>>>(devPitchedPtr, extent); global void MyKernel(cudaPitchedPtr devpitchedptr, cudaextent extent) { char* devptr = devpitchedptr.ptr; size_t pitch = devpitchedptr.pitch; size_t slicepitch = pitch * extent.height; } for(int z = 0; z < extent.depth; ++z) { //wyliczenie adresu początku plasterka char* slice = devptr + z * slicepitch; for(int y = 0; y < extent.height; ++y) { // wyliczenie adresu początku wiersza float *row = (float *)(slice + y * pitch); // iterowanie po wierszu for(int x = 0; x < extent.width; ++x) { float element = row[x]; } } }
16 Dzielona pamięć urządzenia: użycie pamięci dzielonej urządzenia jest w kodzie źródłowym manifestowane użyciem specyfikatora shared zmienna zadeklarowana jako shared jest dostępna we wszystkich wątkach i w każdym z nich oznacza ten sam byt pamięć dzielona jest (według deklaracji producenta) znacząco szybsza (i w odczycie i w zapisie) niż pamięć globalna daje to szansę przyspieszania obliczeń wymagających intensywnego dostępu do pamięci
17 Dzielona pamięć urządzenia: zilustrujemy to przykładem opartym o rutynowe mnożenie dwóch macierzy każdy wątek ma za zadanie odczytać jeden wiersz macierzy A i jedną kolumnę macierzy B w celu wyliczenia odpowiedniego elementu macierzy wynikowej C
18 Schemat pracy algorytmu: Źródło: NVIDIA CUDA Programming Guide Version 3.0
19 Mnożenie macierzy implementacja klasyczna część 1/4 // Macierze są pamiętane wierszami, a więc: // M(row, col) = *(M.elements + row * M.width + col) typedef struct { int width; int height; float *elements; } Matrix; // definiujemy rozmiar bloku wątków: #define BLOCK_SIZE 16 // prototyp funkcji mnożącej (kernela) global void MatMulKernel(const Matrix, const Matrix, Matrix); // Zakładamy (dla uproszczenia rozważań), że wymiary macierzy są // całkowitymi wielokrotnościami wartości BLOCK_SIZE
20 Mnożenie macierzy implementacja klasyczna część 2/4 // Funkcja mnożąca void MatMul(const Matrix A, const Matrix B, Matrix C) { // kopiujemy macierze A i B to globalnej pamięci urządzenia // najpierw A Matrix d_a; d_a.width = A.width; d_a.height = A.height; size_t size = A.width * A.height * sizeof(float); cudamalloc((void **)&d_a.elements, size); cudamemcpy(d_a.elements, A.elements, size, cudamemcpyhosttodevice); // potem B Matrix d_b; d_b.width = B.width; d_b.height = B.height; size = B.width * B.height * sizeof(float); cudamalloc((void **)&d_b.elements, size); cudamemcpy(d_b.elements, B.elements, size,cudamemcpyhosttodevice); : :
21 Mnożenie macierzy implementacja klasyczna część 3/4 : : // przydzielamy macierz C w globalnej pamięci urządzenia Matrix d_c; d_c.width = C.width; d_c.height = C.height; size = C.width * C.height * sizeof(float); cudamalloc((void **)&d_c.elements, size); // preparujemy środowisko i wywołujemy kernel dim3 dimblock(block_size, BLOCK_SIZE); dim3 dimgrid(b.width / dimblock.x, A.height / dimblock.y); MatMulKernel<<<dimGrid, dimblock>>>(d_a, d_b, d_c); // odbieramy obliczoną macierz C z pamięci globalnej urządzenia cudamemcpy(c.elements, d_c.elements, size, cudamemcpydevicetohost); } // zwalniamy pamięć cudafree(d_a.elements); cudafree(d_b.elements); cudafree(d_c.elements);
22 Mnożenie macierzy implementacja klasyczna część 4/4 // kernel odpowiedzialny za wymnożenie macierzy global void MatMulKernel(Matrix A, Matrix B, Matrix C) { } // każdy wątek oblicza jeden element macierzy C // akumulując wynik w zmiennej Cvalue float Cvalue = 0; int row = blockidx.y * blockdim.y + threadidx.y; int col = blockidx.x * blockdim.x + threadidx.x; for (int e = 0; e < A.width; ++e) Cvalue += A.elements[row * A.width + e] * B.elements[e * B.width + col]; C.elements[row * C.width + col] = Cvalue;
23 A teraz to samo, ale z użyciem pamięci dzielonej... zakładamy, że każdy blok wątków jest odpowiedzialny za wyliczenie kwadratowej podmacierzy macierzy C, którą nazwiemy tu C sub w ten sposób każde wydzielone C sub jest iloczynem dwóch prostokątnych podmacierzy: macierzy A o wymiarach (A.width, n*block_size), która ma te same numery wierszy co C sub macierzy B o wymiarach (n*block_size, B.heigth), która ma te same numery kolumn co C sub każdą z powyższych prostokątnych macierzy dzieli się na odpowiednią liczbę kwadratowych podpodmacierzy o boku BLOCK_SIZE
24 Schemat pracy algorytmu: Źródło: NVIDIA CUDA Programming Guide Version 3.0
25 w ten sposób każdy z elementów podmacierzy C sub wyliczany jako suma iloczynów wyróżnionych podpodmacierzy każdy z iloczynów jest obliczany drogą wstępnego załadowania odpowiednich fragmentów macierzy A i B z pamięci globalnej do pamięci dzielonej zakładamy, że w pierwszej kolejności każdy wątek ładuje swoje dane, a następnie wylicza cząstkową wartość iloczynu każdy wątek akumuluje wartość cząstkową, aby na końcu zapisać ją w pamięci globalnej grupując obliczenia w powyższy sposób zmniejszamy transfer z pamięci globalnej, ponieważ macierz A jest czytana jedynie (B.width / block_size) razy, a macierz B (A.height / block_size) razy
26 Przy okazji zawieramy znajomość z nowym specyfikatorem: device poprzedza deklaracje funkcji funkcja zadeklarowana w taki sposób przeznaczona jest do wykonania na urządzeniu (tylko i wyłącznie) funkcję taką można wywołać z kodu wykonywanego na urządzeniu (tylko i wyłącznie)
27 Mnożenie macierzy implementacja z pamięcią dzieloną część 1/6 // Macierze są pamiętane wierszami, a więc: // M(row, col) = *(M.elements + row * M.width + col) typedef struct { int width; int height; int stride; float *elements; } Matrix; // funkcja do odczytywania wartości elementu wskazanej macierzy device float GetElement(const Matrix A, int row, int col) { return A.elements[row * A.stride + col]; } // funkcja do zapisywania wartości elementu wskazanej macierzy device void SetElement(Matrix A, int row, int col, float value) { A.elements[row * A.stride + col] = value; }
28 Mnożenie macierzy implementacja z pamięcią dzieloną część 2/6 // wykreowanie opisu podmacierzy o rozmiarze BLOCK_SIZExBLOCK_SIZE, która // ulokowana jest col podmacierzy w prawo i row podmacierzy w dół // licząc od lewego wierzchołka danej macierzy device Matrix GetSubMatrix(Matrix A, int row, int col) { Matrix Asub; Asub.width = BLOCK_SIZE; Asub.height = BLOCK_SIZE; Asub.stride = A.stride; Asub.elements = &A.elements[A.stride * BLOCK_SIZE * row+ BLOCK_SIZE * col]; } return Asub;
29 Mnożenie macierzy implementacja z pamięcią dzieloną część 3/6 #define BLOCK_SIZE 16 global void MatMulKernel(const Matrix, const Matrix, Matrix); void MatMul(const Matrix A, const Matrix B, Matrix C) { Matrix d_a; d_a.width = d_a.stride = A.width; d_a.height = A.height; size_t size = A.width * A.height * sizeof(float); cudamalloc((void **)&d_a.elements, size); cudamemcpy(d_a.elements, A.elements, size,cudamemcpyhosttodevice); Matrix d_b; d_b.width = d_b.stride = B.width; d_b.height = B.height; size = B.width * B.height * sizeof(float); cudamalloc((void **)&d_b.elements, size); cudamemcpy(d_b.elements, B.elements, size,cudamemcpyhosttodevice); : :
30 Mnożenie macierzy implementacja z pamięcią dzieloną część 4/6 : : Matrix d_c; d_c.width = d_c.stride = C.width; d_c.height = C.height; size = C.width * C.height * sizeof(float); cudamalloc((void **)&d_c.elements, size); dim3 dimblock(block_size, BLOCK_SIZE); dim3 dimgrid(b.width / dimblock.x, A.height / dimblock.y); MatMulKernel<<<dimGrid, dimblock>>>(d_a, d_b, d_c); cudamemcpy(c.elements, d_c.elements, size, cudamemcpydevicetohost); } cudafree(d_a.elements); cudafree(d_b.elements); cudafree(d_c.elements);
31 Mnożenie macierzy implementacja z pamięcią dzieloną część 5/6 global void MatMulKernel(Matrix A, Matrix B, Matrix C) { // ustalenie numeru wiersza i kolumny wewnątrz bloku int blockrow = blockidx.y; int blockcol = blockidx.x; // każdy blok oblicza jedną podmacierz Csub macierzy C Matrix Csub = GetSubMatrix(C, blockrow, blockcol); // każdy wątek oblicza jeden element Csub akumulując wynik w Cvalue float Cvalue = 0; // ustalenie numeru wiersza i kolumny wewnątrz wątku int row = threadidx.y; int col = threadidx.x; : :
32 Mnożenie macierzy implementacja z pamięcią dzieloną część 6/6 } // iterujemy wszystkie podmacierze A i B, które // są potrzebne do obliczenia Csub mnożymy ze sobą każdą parę // podmacierzy i akumulujemy wynik for(int m = 0; m < (A.width / BLOCK_SIZE); ++m) { // kreujemy podmacierz Asub macierzy A Matrix Asub = GetSubMatrix(A, blockrow, m); // kreujemy podmacierz Bsub macierzy B Matrix Bsub = GetSubMatrix(B, m, blockcol); // deklarujemy obszar pamięci dzielonej dla podmacierzy Asub i Bsub shared float As[BLOCK_SIZE][BLOCK_SIZE]; shared float Bs[BLOCK_SIZE][BLOCK_SIZE]; // załaduj Asub i Bsub z pamięci globalnej do dzielonej // (każdy wątek ładuje jeden element z każdej podmacierzy) As[row][col] = GetElement(Asub, row, col); Bs[row][col] = GetElement(Bsub, row, col); // poczekajmy, aż wszystkie dane zostaną skopiowane syncthreads(); // mnożymy Asub i Bsub for (int e = 0; e < BLOCK_SIZE; ++e) Cvalue += As[row][e] * Bs[e][col]; // poczekajmy, aż obliczenia zostaną zakończone zanim zabierzemy // się za przetwarzanie następnej podmacierzy syncthreads(); } // odsyłamy obliczone Cvalue do pamięci urządzenia SetElement(Csub, row, col, Cvalue);
33 Wiele urządzeń CUDA w jednym systemie hosta: jeden host może zarządzać więcej niż jednym urządzeniem CUDA urządzenia te mogą być wyliczane i odpytywane o właściwości jedno z nich może być wybierane do wykonywania kodu kernela więcej niż jeden wątek hosta może wykonywać kod kernela na jednym urządzeniu CUDA jeden wątek hosta może wykonywać kod kernela tylko na jednym urządzeniu zasoby wykreowane i używane w jednym wątku hosta nie mogą być używane w innych wątkach
34 Wiele urządzeń CUDA w jednym systemie hosta: domyślnie jako urządzenie aktywne wybierane jest urządzenie o numerze 0 (pierwsze rozpoznane w systemie) ustalenie innego aktywnego urządzenia jest możliwy poprzez wywołanie funkcji cudasetdevice() zmiana aktywnego urządzenia jest możliwa pod warunkiem wykonania funkcji cudathreadexit(), które sygnalizuje zakończenie współpracy z dotychczasowym aktywnym urządzeniem
35 CUDA API zarządzanie urządzeniami: wybór aktywnego urządzenia cudaerror_t cudasetdevice (int device) parametry: device: numer urządzenia CUDA wybieranego do wykonywania kodu kerneli (uwaga urządzenia numeruje się od zera!) wynik: cudasuccess wykonanie poprawne cudaerrorinvaliddevice niepoprawne urządzenie cudaerrorsetonactiveprocess - próba użycia funkcji w sytuacji, gdy urządzenie jest już wybrane i wykonuje kod
36 CUDA API zarządzanie urządzeniami: zwolnienie wszystkich zasobów na aktywnym urządzeniu cudaerror_t cudathreadexit (void) wynik: cudasuccess wykonanie poprawne
Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA
Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM
Programowanie kart graficznych
CUDA Compute Unified Device Architecture Programowanie kart graficznych mgr inż. Kamil Szostek AGH, WGGIOŚ, KGIS Wykorzystano materiały z kursu Programowanie kart graficznych prostsze niż myślisz M. Makowski
Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA
Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM
Programowanie kart graficznych. Architektura i API część 1
Programowanie kart graficznych Architektura i API część 1 Literatura NVIDIA CUDA Programming Guide version 4.2 http//developer.download.nvidia.com/compute/devzone/ docs/html/c/doc/cuda_c_programming_guide.pdf
Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń
Programowanie CUDA informacje praktycznie i. Wersja
Programowanie CUDA informacje praktycznie i przykłady Wersja 16.12.2013 Podstawowe operacje na GPU cudasetdevice() Określenie GPU i ustanowienie kontekstu (analog w GPU tego czym jest proces dla CPU) dla
Programowanie Współbieżne
Programowanie Współbieżne Agnieszka Łupińska 5 października 2016 Hello World! helloworld.cu: #include global void helloworld(){ int thid = (blockidx.x * blockdim.x) + threadidx.x; printf("hello
CUDA. cudniejsze przyk ady
CUDA cudniejsze przyk ady Agenda: CPU vs. GPU Mnożenie macierzy CPU Mnożenie macierzy - GPU Sploty Macierze CPU vs. GPU CPU: GPU: Mnożenie wykonywane w kolejnych iteracjach pętli. Przechodzimy przez pierwszy
Programowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja
CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.
CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.com) 1 Architektura karty graficznej W porównaniu z tradycyjnym
Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 Projektowanie kerneli Zasady optymalizacji: należy maksymalizować liczbę wątków (w rozsądnych granicach, granice zależą
Programowanie CUDA informacje praktycznie i przykłady. Wersja
Programowanie CUDA informacje praktycznie i przykłady problemów obliczeniowych Wersja 25.11.2014 cudasetdevice() Podstawowe operacje na urządzeniu GPU Określenie GPU i ustanowienie kontekstu (analog w
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
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
Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
Programowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak
Programowanie PKG - informacje praktycznie i przykłady problemów obliczeniowych Wersja z 7.05.2018 Opracował: Rafał Walkowiak cudasetdevice() Podstawowe operacje na urządzeniu GPU Określenie GPU i ustanowienie
Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.
Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania
Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe Wykład, 07.01.2014 CUDA praktycznie 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce Wykład 2: Cuda +
Obliczenia na GPU w technologii CUDA
Obliczenia na GPU w technologii CUDA 1 Różnica szybkości obliczeń (GFLOP/s) pomiędzy CPU a GPU źródło NVIDIA 2 Różnica w przepustowości pamięci pomiędzy CPU a GPU źródło NVIDIA 3 Różnice architektoniczne
Programowanie kart graficznych
Programowanie kart graficznych Sławomir Wernikowski swernikowski@wi.zut.edu.pl Wykład #1: Łagodne wprowadzenie do programowania w technologii NVIDIA CUDA Terminologia: Co to jest GPGPU? General-Purpose
Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład 12 OpenGL + algorytm n ciał Maciej Matyka Instytut Fizyki Teoretycznej CUDA z OpenGL 1. Dane dla kerneli znajdują się na karcie GFX. 2. Chcemy liczyć i rysować używając
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego Mariusz Uchroński 3 grudnia 2010 Plan prezentacji 1. Wprowadzenie 2.
Programowanie procesorów graficznych w CUDA.
Programowanie procesorów graficznych w CUDA. Kompilujemy program Alokacja zasobów gpgpu oraz załadowanie modułu CUDA odbywa się za pomocą komend: qsub -q gpgpu -I -l walltime=2:00:00,nodes=1:ppn=1:gpus=1
Macierzowe algorytmy równoległe
Macierzowe algorytmy równoległe Zanim przedstawimy te algorytmy zapoznajmy się z metodami dekompozycji macierzy, możemy wyróżnić dwa sposoby dekompozycji macierzy: Dekompozycja paskowa - kolumnowa, wierszowa
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,
Przetwarzanie równoległe PROJEKT OMP i CUDA Temat projektu dotyczy analizy efektywności przetwarzania równoległego realizowanego przy użyciu komputera równoległego z procesorem wielordzeniowym z pamięcią
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ę
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to
Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
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
Stałe, tablice dynamiczne i wielowymiarowe
Stałe, tablice dynamiczne i wielowymiarowe tylko do odczytu STAŁE - CONST tablice: const int dni_miesiaca[12]=31,28,31,30,31,30,31,31,30,31,30,31; const słowo kluczowe const sprawia, że wartość zmiennej
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
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
utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
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,
// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Programowanie aplikacji równoległych i rozproszonych
Programowanie aplikacji równoległych i rozproszonych Dr inż. Krzysztof Rojek krojek@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Strumienie operacji na GPU Domyślne
Programowanie obiektowe W3
Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice
Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe
I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom
typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury
typy złożone- tablice wielowymiarowe, struktury Wykład 6 Deklarowanie wskaźników nazwa_typu * nazwa_wskaznika; WSKAŹNIKI: PRZYPOMNIENIE Przypisywanie wskaźnikom wartości double * pn = &zmienna_typu_double;
Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu
Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)
Programowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń (processing element): jeden wątek wykonywany
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
Struktury czyli rekordy w C/C++
Struktury czyli rekordy w C/C++ Wprowadzenie do programowania w języku C struktury. pola bitowe, unie Struktury (rekordy) są złożonymi zmiennymi, składającymi się z elementów różnych typów zwanych polami,
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,
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Szablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
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
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót
Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
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
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
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
Tablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.:
emat zajęć: ablice wielowymiarowe i struktury w języku C Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (ablice liczbowe wielowymiarowe) ablicę 2-wymiarową można przedstawić jako pewien zestaw tablic
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
CUDA ćwiczenia praktyczne
CUDA ćwiczenia praktyczne 7 kwietnia 2011, Poznań Marek Błażewicz, marqs@man.poznan.pl Michał Kierzynka, michal.kierzynka@man.poznan.pl Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów
Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
Tablice. Jones Stygar na tropie zmiennych
Tablice Jones Stygar na tropie zmiennych Czym jest tablica? Obecnie praktycznie wszystkie języki programowania obsługują tablice. W matematyce odpowiednikiem tablicy jednowymiarowej jest ciąg (lub wektor),
Funkcje i tablice. Elwira Wachowicz. 23 maja 2013
Funkcje i tablice Elwira Wachowicz elwira@ifd.uni.wroc.pl 23 maja 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 1 / 22 Największy wspólny dzielnik: algorytm Euklidesa Problem:
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,
Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab
LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem
Język C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Programowanie Współbieżne. Algorytmy
Programowanie Współbieżne Algorytmy Sortowanie przez scalanie (mergesort) Algorytm :. JEŚLI jesteś rootem TO: pobierz/wczytaj tablice do posortowania JEŚLI_NIE to pobierz tablicę do posortowania od rodzica
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
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
Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe. 1. Wektory i macierze: a. Przykład
CUDA PROGRAMOWANIE PIERWSZE PROSTE PRZYKŁADY RÓWNOLEGŁE. Michał Bieńkowski Katarzyna Lewenda
PROGRAMOWANIE RÓWNOLEGŁE PIERWSZE PROSTE PRZYKŁADY Michał Bieńkowski Katarzyna Lewenda Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne Czym jest? PROGRAMOWANIE
Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Programowanie dynamiczne
Programowanie dynamiczne Ciąg Fibonacciego fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2), gdzie n 2 Elementy tego ciągu stanowią liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem
IX. Wskaźniki.(3 godz.)
Opracowała: dr inż. Anna Dubowicka Uczelniane Centrum Komputerowe PK IX. Wskaźniki.(3 godz.) Wskaźnik jest zmienną, która zawiera adres innej. 1. Definiowanie wskaźników. typ * nazwa ; gdzie: znak * informuje
JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski
JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski Agenda GPU Dlaczego warto używać GPU Budowa GPU CUDA JCuda Przykładowa implementacja Co to jest? GPU GPU Graphical GPU Graphical Processing GPU
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Zmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
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
Moc płynąca z kart graficznych
Moc płynąca z kart graficznych Cuda za darmo! Czyli programowanie generalnego przeznaczenia na kartach graficznych (GPGPU) 22 października 2013 Paweł Napieracz /20 Poruszane aspekty Przetwarzanie równoległe
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 8 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Podział kodu programu Struktury definiowanie struktur
/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>
Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.
Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Typy c.d. 2 Typy zmiennych Instrukcja typedef -
Wskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
Jacek Matulewski - Fizyk zajmujący się na co dzień optyką kwantową i układami nieuporządkowanymi na Wydziale Fizyki, Astronomii i Informatyki
Michał Matuszak, Jacek Matulewski CUDA i czyny Technologia NVIDIA CUDA W zeszłomiesięcznym numerze SDJ w artykule pt. Czyń cuda opisaliśmy
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
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski
MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata
MACIERZE Sobiesiak Łukasz Wilczyńska Małgorzata Podstawowe pojęcia dotyczące macierzy Nie bez przyczyny zaczynamy od pojęcia macierzy, które jest niezwykle przydatne we wszystkich zastosowaniach, obliczeniach
Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
Tablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli
Języki i metodyka programowania. Wskaźniki i tablice.
Wskaźniki i tablice. Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Zmienna to fragment pamięci o określonym rozmiarze identyfikowany za pomocą nazwy, w którym może być przechowywana
Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD
Języki C i C++ Wykład: 2 Wstęp Instrukcje sterujące 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe
// Potrzebne do memset oraz memcpy, czyli kopiowania bloków
ZAWARTOŚCI 3 PLIKOW W WORDZIE: MAIN.CPP: #include #include #include pamięci // Potrzebne do memset oraz memcpy, czyli kopiowania bloków #include "Rysowanie_BMP.h" using
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.
LEKCJA 12. Wskaźniki i tablice w C i C++. W czasie tej lekcji: 1. Dowiesz się więcej o zastosowaniu wskaźników. 2. Zrozumiesz, co mają wspólnego wskaźniki i tablice w języku C/C++. WSKAŹNIKI I TABLICE
Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.
Zadanie 1. Utworzyć klasę reprezentującą liczby wymierne. Obiekty klasy powinny przechowywać licznik i mianownik rozłożone na czynniki pierwsze. Klasa powinna mieć zdefiniowane operatory czterech podstawowych