Biuletyn nr 21

Biuletyn KDM
1 | 2 | 3 | 4 | 5
6 | 7 | 8 | 9 | 10
11 | 12 | 13 | 14
15 | 16 | 17 | 18
19 | 20 | 21 | 22
23 | 24 | 25 | 26
27 | 28 | 29 | 30
31 | 32
Lista biuletynów

Biuletyn nr 21 (16 kwietnia 2007).

Spis treści

Witajcie na świecie!

Autorzy: Dział KDM

W ostatnim miesiącu u dwóch naszych kolegów zaszły duże zmiany. Poznajcie Antka Szpindlera, syna Maćka (54 cm, 3100 g), oraz Jasia Pawła Sota, syna Roberta (52 cm, 3100 g).

Syn Maćka Szpindlera.jpg Syn Roberta Sota.jpg
Antek Szpindler Jaś Paweł Sot

Obu kolegom, a także ich żonom składamy serdeczne gratulacje!

Ustawienia poczty w ICM - forward oraz vacation

Autor: Maciej Cytowski

Użytkownicy ICM razem z dostępem do maszyn obliczeniowych otrzymują również konta pocztowe. Artykuł ten opisuje krótko jak poradzić sobie z następującymi zagadnieniami związanymi z konfiguracją konta pocztowego w ICM:

  • automatyczne forwardowanie wiadomości e-mail na inny adres
  • automatyczne odpowiadanie na przychodzące wiadomości (opcja szczególnie przydatna w przypadku wakacji)

Automatyczne forwardowanie

Załóżmy, że chcemy aby wiadomości przychodzace na konto pocztowe z ICM były automatycznie przekazywane na inny adres mailowy. Taka konfiguracja konta pocztowego w ICM przyda nam się bardzo jeśli na codzien mamy zwyczaj korzystać z innego konta.

Jak to zrobić?

Logujemy się do ICM:

ssh atol.icm.edu.pl

Po zalogowaniu znajdujemy się na komputerze delta. W katalogu domowym tworzymy plik .forward:

touch .forward

Używając naszego ulubionego edytora (np. vi lub nano) w pliku tym umieszczamy adres na który chcemy aby przekazywane były nasze e-maile.

Automatyczne odpowiedzi - program vacation

Załóżmy, że chcemy aby osoby wysyłające nam wiadomości e-mail dostawały automatyczną odpowiedź. Takie ustawienie poczty przyda nam się w przypadku, gdy wyjeżdżamy na wakacje.

Jak to zrobić?

Logujemy się do ICM:

ssh atol.icm.edu.pl

Po zalogowaniu znajdujemy się na komputerze delta. Na komputerze tym dostępny jest progam vacation, który tak naprawdę dokona całej konfiguracji za nas (prowadząc nas za rękę krok po kroku). Uruchamiamy go:

vacation

O ile wcześniej nie definiowaliśmy automatycznych odpowiedzi program powinien otworzyć do edycji plik .vacation.msg. Domyślnie program vacation wpisze w nim następującą zawartość:

Subject: away from my mail

I will not be reading my mail for a while.
Your mail regarding "$SUBJECT" will be read when I return.

Jak widać mamy możliwość ustawienia nie tylko treści odpowiedzi ale również jej tytułu. Po zakończeniu edycji zapisujemy plik .vacation.msg. Musimy jeszcze odpowiedzieć na kilka innych pytań (proponowane przeze mnie odpowiedzi na zielono):

You have a message file in /home/staff/user/.vacation.msg.
Would you like to see it? n
Would you like to edit it? n
To enable the vacation feature a ".forward" file is created.
Would you like to enable the vacation feature? y
Vacation feature ENABLED. Please remember to turn it off when
you get back from vacation. Bon voyage.
delta:~> 

Wynikiem działania programu vacation jest nie tylko plik .vacation.msg ale przede wszystkim właściwy wpis w pliku .forward. W ICM wpis ten powinien przypominać następujący:

\user, "|/usr/bin/vacation user"

Powyższy zapis oznacza, że wiadomość zostanie przekazana do użytkownika o nazwie user oraz programu vacation. Program vacation otrzymuje jako parametr nazwę użytkownika i z jego katalogu domowego odczytuje plik konfiguracyjny .vacation.msg.


Gdy chcemy usunąć nasze "wakacyjne" ustawienia, wystarczy, że ponownie wywołamy program vacation:

delta:~> vacation
This program can be used to answer your mail automatically
when you go away on vacation.
You have a message file in /home/staff/user/.vacation.msg.
Would you like to see it? n
Would you like to edit it? n
You have a .forward file in your home directory containing:
    \user, "|/usr/bin/vacation user"
Would you like to remove it and disable the vacation feature? y
Back to normal reception of mail.
delta:~> 


Pliki binarne w Fortranie – na halo

Autor: Łukasz Bolikowski

Odczyt i zapis plików binarnych w Fortranie nie zawsze jest prostym zadaniem. Pół biedy, jeśli odczytujemy pliki zapisane na tej samej maszynie, przy pomocy programów skompilowanych tym samym kompilatorem – wtedy operacje przebiegają raczej bez problemów. Kłopoty zaczynają się, gdy chcemy odczytać pliki zapisane na maszynie o innej architekturze (np. odczytać na halo pliki zapisane na tornado).

Co należy wiedzieć, aby odczytać plik binarny?

Aby odczytać plik binarny pochodzący z innej maszyny, lub choćby innego komputera, trzeba mieć następujące informacje:

  • jaka jest wielkość słowa: 32 czy 64 bity?
  • jaka jest kolejność bajtów w słowie: tzw. big-endian czy little-endian?
  • czy w pliku znajdują się tzw. record control words (RCW), czy nie?
  • (dla zaawansowanych) jeśli RCW istnieją, to jaka jest dla nich wielkość słowa i endianness?

Co to jest endianness?

Endianness określa kolejność bajtów w słowie. Przykładowo, liczba całkowita 4356732, czyli heksadecymalnie 427A7C może być zapisana w komórkach pamięci na dwa sposoby. Tak (little-endian):

7C 7A 42 00 00 00 00 00

lub tak (big-endian):

00 00 00 00 00 42 7A 7C

Na komputerach PC (Intel, AMD), w tym na klastrze halo, obowiązuje porządek little-endian. Duże maszyny obliczeniowe, w tym Cray X1e (tornado) pracują zazwyczaj w porządku big-endian.

Chcąc na klastrze halo odczytywać i zapisywać pliki fortranowe w porządku big-endian, należy dodać podczas kompilacji kompilatorem PGI opcję: -byteswapio. Uwaga: taka konwersja w locie dotyczy wyłącznie danych odczytywanych lub zapisywanych przy pomocy fortranowych instrukcji READ i WRITE.

Co to jest wielkość słowa?

Wielkość słowa to wyrażony w bitach rozmiar obszaru, w którym przechowywana jest jedna liczba. Obecnie najczęściej spotyka się architektury, w których słowa są 32-, lub 64-bitowe. Liczba 4356732 zapisana w porządku big-endian na 32 bitach wygląda tak:

00 42 7A 7C

a zapisana w tym samym porządku na 64 bitach tak:

00 00 00 00 00 42 7A 7C

Kompilator PGI na halo domyślnie odczytuje i zapisuje liczby na 32 bitach. Aby użyć 64-bitowych słów, należy użyć opcji: -i8 -r8.

Co to jest RCW?

Record control word (RCW) to znacznik początku i końca rekordu, czyli bloku danych zapisanych jednym poleceniem WRITE. Przykładowo, trzy 32-bitowe liczby 4356732, zapisane w porządku little-endian, mogą być otoczone następującymi znacznikami:

0C 00 00 00 7C 7A 42 00 7C 7A 42 00 7C 7A 42 00 0C 00 00 00
znacznik 1-sza liczba 2-ga liczba 3-cia liczba znacznik

To, czy instrukcja READ lub WRITE używa takich znaczników, zależy od tego, jakie argumenty zostały podane podczas otwierania pliku instrukcją OPEN. Argument form='unformatted' spowoduje użycie znaczników RCW, argument form='binary' będzie czytał i pisał pliki bez tych znaczników.

Uwaga dla zaawansowanych: Znaczniki zawierają liczbę określającą rozmiar bloku, który otaczają — w powyższym przykładzie blok ma 12 bajtów (heksadecymalnie: 0C). Należy więc znać również format zapisu liczb w RCW. Zazwyczaj rozmiar słowa i endianness w RCW są takie same, jak w przypadku rzeczywistych danych, ale zdarzają się wyjątki. Na przykład na tornado, żądając zapisu danych w porządku little-endian, RCW są nadal zapisywane w porządku big-endian.

Kompilator PGI

Podsumowanie opcji kompilacji kontrolujących format odczytu i zapisu plików binarnych w Fortranie.

Kompilator PGI na halo domyślnie:

  • używa porządku little-endian
  • używa słów 32-bitowych

Aby zmienić porządek na big-endian:

-byteswapio

Aby zmienić wielkość słowa na 64 bity:

-i8 -r8

Przykładowy program

program testrcw
  integer, parameter :: m = 6
  real ftab(m)
  integer, parameter :: n = 4
  integer itab(n)

  ftab(1:m) = 1.235
  itab(1:n) = 3457

  open(11, file='data.unf.out', form='unformatted')
  write(11) ftab(1:m)
  write(11) itab(1:n)
  close(11)

  open(11, file='data.bin.out', form='binary')
  write(11) ftab(1:m)
  write(11) itab(1:n)
  close(11)
end program

Wyniki

Poniżej przedstawiona jest zawartość plików wynikowych powyższego programu. Do oglądania zawartości plików używamy programu xxd dostępnego w większości dystrybucji GNU/Linuksa.

W pierwszym przypadku program był kompilowany z domyślnymi opcjami:

# xxd data.unf.out
0000000: 1800 0000 7b14 9e3f 7b14 9e3f 7b14 9e3f  ....{..?{..?{..?
0000010: 7b14 9e3f 7b14 9e3f 7b14 9e3f 1800 0000  {..?{..?{..?....
0000020: 1000 0000 810d 0000 810d 0000 810d 0000  ................
0000030: 810d 0000 1000 0000                      ........
# xxd data.bin.out
0000000: 7b14 9e3f 7b14 9e3f 7b14 9e3f 7b14 9e3f  {..?{..?{..?{..?
0000010: 7b14 9e3f 7b14 9e3f 810d 0000 810d 0000  {..?{..?........
0000020: 810d 0000 810d 0000                      ........

W drugim przypadku kompilowaliśmy z opcją -byteswapio:

# xxd data.unf.byteswapio.out
0000000: 0000 0018 3f9e 147b 3f9e 147b 3f9e 147b  ....?..{?..{?..{
0000010: 3f9e 147b 3f9e 147b 3f9e 147b 0000 0018  ?..{?..{?..{....
0000020: 0000 0010 0000 0d81 0000 0d81 0000 0d81  ................
0000030: 0000 0d81 0000 0010                      ........
# xxd data.bin.byteswapio.out
0000000: 3f9e 147b 3f9e 147b 3f9e 147b 3f9e 147b  ?..{?..{?..{?..{
0000010: 3f9e 147b 3f9e 147b 0000 0d81 0000 0d81  ?..{?..{........
0000020: 0000 0d81 0000 0d81                      ........

W trzecim przypadku kompilowaliśmy z opcjami -byteswapio -i8 -r8:

# xxd data.unf.byteswapio.i8r8.out
0000000: 0000 0030 3ff3 c28f 5c28 f5c3 3ff3 c28f  ...0?...\(..?...
0000010: 5c28 f5c3 3ff3 c28f 5c28 f5c3 3ff3 c28f  \(..?...\(..?...
0000020: 5c28 f5c3 3ff3 c28f 5c28 f5c3 3ff3 c28f  \(..?...\(..?...
0000030: 5c28 f5c3 0000 0030 0000 0020 40ab 0200  \(.....0... @...
0000040: 0000 0000 40ab 0200 0000 0000 40ab 0200  ....@.......@...
0000050: 0000 0000 40ab 0200 0000 0000 0000 0020  ....@..........
# xxd data.bin.byteswapio.i8r8.out
0000000: 3ff3 c28f 5c28 f5c3 3ff3 c28f 5c28 f5c3  ?...\(..?...\(..
0000010: 3ff3 c28f 5c28 f5c3 3ff3 c28f 5c28 f5c3  ?...\(..?...\(..
0000020: 3ff3 c28f 5c28 f5c3 3ff3 c28f 5c28 f5c3  ?...\(..?...\(..
0000030: 40ab 0200 0000 0000 40ab 0200 0000 0000  @.......@.......
0000040: 40ab 0200 0000 0000 40ab 0200 0000 0000  @.......@.......


Linki

http://www.arsc.edu/support/news/HPCnews/HPCnews344.shtml#article1