Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions _site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,16 @@ navbar:
href: info3_informacje.html
- text: "Instrukcja I"
href: info3_lab_1.html
- text: "Instrukcja II - III"
href: info3_lab_2-3.html
- text: "Instrukcja II"
href: info3_lab_2.html
- text: "Instrukcja III"
href: info3_lab_3.html
- text: "Instrukcja IV"
href: info3_lab_4.html
- text: "Instrukcja V"
href: info3_lab_5.html
- text: "Instrukcja VI"
href: info3_lab_6.html
- text: "Instrukcja VII"
href: info3_lab_7.html
- text: "Bash: Dodatki"
href: info3_lab_dodatki.html
- text: "Met Num"
Expand Down
30 changes: 15 additions & 15 deletions hpc_resources.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,41 +9,41 @@ title: Resources

## Literature and additional resources

- Bakhvalov, D. (2020). Performance Analysis and Tuning on Modern CPUs.
- Bakhvalov, D. (2020). Performance Analysis and Tuning on Modern CPUs -[link](https://github.com/dendibakh/perf-book/releases/download/2.0_release/PerformanceAnalysisAndTuningOnModernCPUs_SecondEdition.pdf)
- Performance Engineering of Software Systems - Open MIT Course - [link](https://youtube.com/playlist?list=PLUl4u3cNGP63VIBQVWguXxZZi0566y7Wf)
- Turing Complete - a video game available on Steam

## Lecture 1

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture1.pdf)
- [Python code](http://ccfd.github.io/courses/code/hpc/lecture1/dgemm.py)
- [C++ code](http://ccfd.github.io/courses/code/hpc/lecture1/cpp.zip)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture1.pdf)
- [Python code](ccfd.github.io/courses/code/hpc/lecture1/dgemm.py)
- [C++ code](ccfd.github.io/courses/code/hpc/lecture1/cpp.zip)

## Lecture 2

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture2.pdf)
- [Demo code](http://ccfd.github.io/courses/code/hpc/lecture2_code.zip)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture2.pdf)
- [Demo code](ccfd.github.io/courses/code/hpc/lecture2_code.zip)

## Lecture 3

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture3.pdf)
- [Demo code](http://ccfd.github.io/courses/code/hpc/lecture3_code.zip)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture3.pdf)
- [Demo code](ccfd.github.io/courses/code/hpc/lecture3_code.zip)

## Lecture 4-5

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture45.pdf)
- [Demo code](http://ccfd.github.io/courses/code/hpc/lecture45_code.zip)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture45.pdf)
- [Demo code](ccfd.github.io/courses/code/hpc/lecture45_code.zip)

## Lecture 6

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture6.pdf)
- [Demo code](http://ccfd.github.io/courses/code/hpc/lecture6_code.zip)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture6.pdf)
- [Demo code](ccfd.github.io/courses/code/hpc/lecture6_code.zip)

## Lecture 7

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture7.pdf)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture7.pdf)

## GPU Lecture and Labs

- [Presentation](http://ccfd.github.io/courses/data/hpc/lecture8.pdf)
- [Code (reduction case study)](http://ccfd.github.io/courses/code/hpc/cuda-reduction.zip)
- [Presentation](ccfd.github.io/courses/data/hpc/lecture8.pdf)
- [Code (reduction case study)](ccfd.github.io/courses/code/hpc/cuda-reduction.zip)
229 changes: 138 additions & 91 deletions info3_lab_1.md

Large diffs are not rendered by default.

65 changes: 23 additions & 42 deletions info3_lab_2-3.md → info3_lab_2.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,16 @@ author:
- M. Dzikowski
- Ł. Łaniewski-Wołłk
- rev. K. Marchlewski
- rev. J. Gałecki
course: Informatyka III
material: Instrukcja 2-3
number: 2, 3
material: Instrukcja 2
number: 2
---

# Materiały

Materiały do laboratorium znajdują się w katalogu `/home/share/informatyka_3` na serwerze `info3.meil.pw.edu.pl`.
Za nim przystąpimy do pracy należy skopiować je do swojego katalogu domowego.
W tym celu należy wykonać polecenie
```{.bash}
cp -r /home/share/informatyka_3/. ~
```
Spowoduje ono pojawienie się w naszym katalogu domowym dwóch katalogów `drop` i `japan` zwierających obrazy.

Jeśli chcemy skopiować pliki na nasz komputer lokalny należy wykonać polecenie, które ściągnie pliki z serwera zdalnego.
W tym celu posłużymy się programem `scp`:
```{.bash}
scp -r studxy@info3.meil.pw.edu.pl:/home/share/informatyka_3/. ~
```

Jeśli nie masz dostępu do serwera `info3`, możesz skopiować te pliki bezpośrednio: [info3.zip](https://github.com/ccfd/courses_data/archive/info3.zip)
Materiały do laboratorium znajdują się [tutaj](https://github.com/ccfd/courses_data/archive/info3.zip).
Po rozpakowaniu powinniśmy zobaczyć dwa katalogi `drop` i `japan`, zwierające obrazy.

# Obróbka obrazków

Expand All @@ -35,21 +23,21 @@ Program ten służy do konwertowania i zmiany właściwości obrazów.
Potrafi także dodawać elementy do obrazu, a nawet tworzyć obrazy od zera.
Najłatwiej zobaczyć jak go używać analizując przykłady.

UWAGA: Zanim rozpoczniesz pracę, skopiuj zdjęcia do tymczasowego katalogu!
**Uwaga:**: Zanim rozpoczniesz pracę, skopiuj zdjęcia do tymczasowego katalogu!

Wykonaj poniższe operacje i sprawdź efekty.

- `convert plik.gif plik.jpg`{.bash} -- konwertuje plik w formacie `GIF` na format `JPG`,
- `convert plik.gif plik.jpg`{.bash} -- konwertuje plik w formacie `.gif` na format `.jpg`,
- `convert plik1.jpg -resize 50% plik2.jpg`{.bash} -- zmniejsza obrazek dwukrotnie,
- `convert plik1.jpg -resize 100 plik2.jpg`{.bash} -- zmniejsza obrazek, tak aby krótszy wymiar był równy 100 pikseli,
- `convert plik1.jpg -resize 100x100 plik2.jpg`{.bash} -- zmniejsza obrazek tak, aby mieścił się w kwadracie o wymiarze 100 na 100 pikseli,
- `convert plik1.jpg -resize 100x100\! plik2.jpg`{.bash} -- zmniejsza obrazek dokładnie do rozmiaru 100 na 100 pikseli,
- polecenie
```{.bash}
convert -size 320x85 canvas:none -pointsize 72 -fill red \
-draw "text 20, 55 'Magick'" magick.jpg
-draw "text 20, 55 'Magic'" magic.jpg
```
-- stworzy obrazek `magick.jpg`, z naniesionym tekstem "Magick" (znaki "spacji" i "ukośnika" na końcu linii oznaczają, że ciąg dalszy komendy nastąpi w kolejnej linii).
-- stworzy obrazek `magic.jpg`, z naniesionym tekstem "Magic" (znak `\` na końcu linii oznacza, że ciąg dalszy komendy nastąpi w kolejnej linii).

### Ćwiczenia

Expand Down Expand Up @@ -83,7 +71,7 @@ Przykładowo, komenda `convert 1.jpg 2.jpg 3.jpg +append 4.jpg`{.bash} złączy
Obrazy powinny być połączone tak aby tworzyły szachownicę 10 na 10 obrazów.
Podpowiedź: połącz obrazki `drop-00*.jpg` w poziomie, później `drop-01*.jpg`, itd.
Następnie wszystkie te podłużne obrazki połącz w całość w pionie.
- Rozłoży animację `GIF` na pojedyncze obrazy `JPG`. Do każdego z otrzymanych obrazów dopisze tekst, a następnie złoży je w nową animację `GIF`.
- Rozłoży animację GIF na pojedyncze obrazy JPG. Do każdego z otrzymanych obrazów dopisze tekst, a następnie złoży je w nową animację GIF.
Skrypt powinien skasować pliki tymczasowe (tzn. pojedyncze obrazy otrzymane przez rozłożenie pierwotnej animacji).

Czasem napisanie skryptu może być żmudne.
Expand Down Expand Up @@ -111,29 +99,22 @@ W tym celu skrypt powinien:
## Wczytywanie danych binarnych

Program `convert` może wczytać dane binarne interpretując je jako obrazek.
Przykładowo, może to być tablica zawierająca wartości typu "char".
Przykładowo, może to być tablica zawierająca wartości typu `char`.
Napisz program `obrazek.c` zawierający poniższy kod:
```{.C}
```C
#include <stdio.h>
#include <stdlib.h>

#define N 100
#define M 100

int main() {
int i;
unsigned char *tab;
const int N = 100;
const int M = 100;
char* tab = (char*)malloc(N * M * sizeof(char));

tab = malloc(N * M * sizeof(unsigned char));

for (i = 0; i < N * M; i++) {
for (int i = 0; i < N * M; ++i)
tab[i] = 255 * i / (N * M - 1);
}

fwrite(tab, sizeof(unsigned char), N * M, stdout);
fwrite(tab, sizeof(char), N * M, stdout);
free(tab);

return 0;
}
```

Expand All @@ -145,12 +126,12 @@ i wykonaj
```{.bash}
./obrazek.out > obrazek
```
Mamy teraz plik binarny zawierający liczby typu char (1 bajt) od 0 do 255.
Mamy teraz plik binarny zawierający liczby typu `char` (1 bajt) od 0 do 255.
Możemy dokonać jego konwersji na obrazek `JPG` wpisując:
```{.bash}
convert -size 100x100 -depth 8 gray:obrazek obrazek.jpg
```
Uwaga: Zamiast typu "char" moglibyśmy użyć tablicy typu "float" i liczb z przedziału $[0, 1]$.
Uwaga: Zamiast typu `char` moglibyśmy użyć tablicy typu `float` i liczb z przedziału $[0, 1]$.
Wtedy jednak musielibyśmy skonwertować obrazek za pomocą polecenia:
```{.bash}
convert -size 100x100 -depth 32 \
Expand All @@ -163,12 +144,12 @@ convert -size 100x100 -depth 32 \
- Zmodyfikuj utworzoną komendę, tak aby konwertować to zdjęcie na plik binarny.
- Na podstawie programu `obrazek.c` napisz program `filtr.c`, który:
- wczyta ze standardowego wejścia tablicę (służy do tego funkcja "fread"),
```{.C}
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
```C
size_t fread(void* ptr, size_t size, size_t count, FILE* stream);
```
gdzie: `*ptr` to wskaźnik na tablicę, `size` to rozmiar elementu tablicy, `count` to liczba elementów do wczytania, a `*stream` to wskaźnik do strumienia, na którym wykonywana jest operacja (w naszym przypadku będzie to `stdin`),
gdzie: `ptr` to wskaźnik na tablicę, `size` to rozmiar elementu tablicy, `count` to liczba elementów do wczytania, a `stream` to wskaźnik do strumienia, na którym wykonywana jest operacja (w naszym przypadku będzie to `stdin`),
- dla każdej wczytanej liczby `x` znajdzie wartość, która pozwoli na odwrócenie odpowiadającego jej koloru (zauważ, że dla liczb typu `char` kolor czarny to 0, a kolor biały to 255),
- wynik przekształcenia wyśle do standardowego wyjścia.
- Spróbuj przepuścić wybrany obrazek przez taki "filtr" i sprawdź wynik.
Pamiętaj, że informacje możemy wysłać na standardowe wejście programu za pomocą `<`{.bash}.
- Napisz skrypt, który wszystkie pliki z aktualnego katalogu zmniejszy do rozmiaru 100 na 100 pikseli, dokona konwersji na pliki binarne, przepuści przez filtr i zapisze wyniki w postaci plików `JPG`.
- Napisz skrypt, który wszystkie pliki z aktualnego katalogu zmniejszy do rozmiaru 100 na 100 pikseli, dokona konwersji na pliki binarne, przepuści przez filtr i zapisze wyniki w postaci plików `.jpg`.
Loading
Loading