Typ elementów tablicy jest opisywany przez trzeci parametr funkcji
MPI_Send (w naszym przypadku MPI_), zaś liczba
elementów w tablicy — przez drugi parametr (w naszym przypadku
). MPI definiuje pewną liczbę typów prostych
(np. MPI_CHAR, MPI_INT, MPI_LONG,
MPI_FLOAT, MPI_DOUBLE) oraz umożliwia aplikacjom tworzenie
własnych typów złożonych (patrz literatura). Defekt ten usunięto w omawianym, wielopunktowym wtrysku paliwa. Jak wskazuje nazwa, otrzymał on już liczbę wtryskiwaczy odpowiadającą liczbie cylindrów silnika.
Koszty adaptacji pod gaz bywają kilka razy tańsze, stąd wybór wydaje się oczywisty. Pierwszy silnik 1.6 z bezpośrednim wtryskiem benzyny – moc 110 KM. To właśnie te i późniejsze wersje (z wtryskiem bezpośrednim) bierzemy pod lupę. Tym bardziej że silniki 1.6 MPI i FSI w ciągu ostatnich 16 lat trafiły do wielu samochodów koncernu VW – głównie Seatów, Skód i Volkswagenów, ale znajdziecie je także pod maskami Audi. Do badania przepustowości
użyj bardzo dużych tablic, do badania opóźnień — jednoelementowych.
Silnik 1.0 (szczególnie MPI, ale też TSI) może wydawać się prosty, w rzeczywistości jednak to ciekawa konstrukcja. Ma zmienne fazy rozrządu, a kolektor wydechowy zintegrowano z głowicą (m.in. lepszy bilans cieplny). Dzięki temu turbina może być chłodzona również na postoju. Poza tym silnik ma solidną budowę, podparty w czterech miejscach wał korbowy wykonano z kutej stali, a większość odmian ma tradycyjne żeliwne tuleje cylindrów. Jak wspomniano powyżej, MPI_Finalize zwalnia zasoby zaalokowane przez
implementację MPI dla kończonego procesu. Z tego powodu ważne jest, aby
MPI_Finalize było wołane w każdej ścieżce zakończenia procesu.
Koszt usunięcia usterki poza ASO to ok. 1500 zł. Jeśli doszło do kolizji zaworów z tłokami, naprawa przeważnie kosztuje ok. 4000 zł. Jeśli chodzi o działania producenta, to w 2001 r. Na rynek trafił silnik z bezpośrednim wtryskiem paliwa (FSI), który w praktyce rzeczywiście spalał średnio o proc. Do tego charakteryzował się nowoczesną budową, łańcuchowym napędem rozrządu, a także lepszą dynamiką (początkowo 110 KM, później – 115 KM). W dobie nieustannego dążenia do poprawy wydajności silników przy jednoczesnym podołaniu coraz bardziej restrykcyjnym normom emisji spalin, ten typ wtrysku przynosił same korzyści.
Wtrysk pośredni wielopunktowy – jak z LPG?
Inicjalizacja informuje środowisko uruchomieniowe MPI o
nowym procesie, jak również wykonuje inne czynności administracyjne. Wszystkie te czynności są jednak przeźroczyste dla użytkownika —
zamknięte w wywołaniu pojedycznej funkcji — co znacznie ułatwia
programowanie. W 1.6 MPI należy wymieniać pasek i wszystkie rolki co 90 tys. Przy okazji warto też założyć nową pompę wody. W silnikach FSI – łańcuch, poza wersją o oznaczeniu BAD. Rozrząd — w silniku 1.6 MPI należy wymieniać pasek i wszystkie rolki co 90 tys.
- Kierowcy poszukujący dopracowanego i taniego w codziennej eksploatacji silnika, powinni zdecydować się na starszą konstrukcję.
- MPI definiuje pewną liczbę typów prostych
(np. MPI_CHAR, MPI_INT, MPI_LONG,
MPI_FLOAT, MPI_DOUBLE) oraz umożliwia aplikacjom tworzenie
własnych typów złożonych (patrz literatura). - W nich minimalizowane jest ryzyko jednoczesnego spalania obydwu rodzajów paliwa.
- Na przestrzeni lat pojawiły się wtryski sekwencyjne z elektroniką rozdzielającą dawki paliwa w taki sposób, by uzyskać największą efektywność jednostki napędowej.
- Troską należy otoczyć układ chłodzenia (szczególnie pompę) oraz skrzynię biegów wraz ze sprzęgłem – reszta to naprawdę drobiazgi mające przypadkowy charakter.
- Nie zostają one jednak spalone, co w konsekwencji nie tylko pogarsza osiągi, ale i powoduje częstsze wizyty na stacjach benzynowych.
Opierał się na zainstalowaniu wtryskiwaczy paliwa bezpośrednio w cylindrze, dzięki czemu przyspieszaniu ulegał proces spalania mieszanki paliwowo-powietrznej (paliwo trafiało od razu do komory spalania). Odpowiedni kąt ustawienia wtryskiwacza pozwalał na wytworzenie warstwowej mieszanki (bogatej przy świecy, ubogiej w dalszych partiach cylindra), w efekcie skutkującej obniżeniem zużycia paliwa. Niestety, wraz z opracowaniem bezpośredniego wtrysku pojawiły się nowe usterki wynikające z charakterystyki jego pracy.
Ważne jest, aby wszystkie procesy wywołały
funkcję MPI_Barrier (dokładniej, wszystkie procesy w komunikatorze
użytym jako parametr tej funkcji). Instrukcja ta jest wykonywana przez wszystkie procesy. Ma ona za zadanie
zainicjalizowanie środowiska MPI dla procesu, który ją wywołuje
(man MPI_Init).
Warto przy tym wspomnieć, że tak naprawdę mianem wielopunktowego można określić zarówno wtrysk pośredni, jak i bezpośredni. By nie wprowadzać jednak niepotrzebnego zamętu, oficjalnie stosuje się podział na wtrysk pośredni wielopunktowy i po prostu bezpośredni. Wtrysk wielopunktowy stosuje się masowo w silnikach Diesla.
Silnik 1.6 MPI czy 1.6 FSI – który lepszy?
Dokładniej, wybieramy jeden proces (np. o
randze zero), który będzie odpowiedzialny za wypisanie wszystkich
komunikatów. Każdy z pozostałych procesów przesyła do tego procesu
swoją rangę oraz czas spania. Wybrany proces odbiera te komunikaty
w kolejności rang i wypisuje je na standardowe wyjście. Ponieważ
wszystkie napisy są produkowane przez jeden proces, będą one dobrze
uporządkowane. Innymi słowy, procesy nie synchronizują między sobą
wypisywania komunikatów.
Naszym pierwszym zadaniem na dzisiaj będzie napisanie trywialnego
programu korzystającego z MPI. Można zacząć od prostego szablonu dla programów w C. Tego rodzaju komplikacje nie dotyczą właścicieli samochodów z pośrednim wtryskiem, a w chwili obecnej najczęściej do takich zaliczamy wielopunktowe. Firmy specjalizujące się w LPG opracowały wiele rodzajów instalacji dopasowanych do parametrów silnika i jego budowy.
Odbiorca zaś
musi mieć możliwość selektywnego odbierania komunikatów, tj. Komunikatów o
określonym formacie lub też komunikatów, na które obecnie oczekuje. Znacznikami (piąty parametr funkcji
MPI_Send). Znaczniki to po prostu liczby całkowite unikalnie
identyfikujące rodzaj komunikatu w aplikacji równoległej (w naszym
przykładzie jest to ). Nie trzeba jednak koniecznie kupować starego auta, by nie narażać się na konsekwencje awarii bezpośredniego wtrysku paliwa. Typ wielopunktowy (pośredni) wciąż spotkamy w niektórych jednostkach montowanych w samochodach miejskich, np.
Stosowane jest jest w samochodach z Grupy Volkswagen. W silnikach tego typu każdy cylinder ma osobny wtryskiwacz, który umieszczony jest w kolektorze, przed zaworem dolotowym. Jeśli do
MPI_Recv zamiast przekazalibyśmy
stałą MPI_ANY_SOURCE, oznaczałoby to, że chcemy odebrać komunikat
od dowolnego procesu. Po odebraniu takiego komunikatu, możemy dowiedzieć
się od jakiego procesu go właściwie odebraliśmy używając pola
MPI_SOURCE struktury .
Ćwiczenie 3: Hello world z komunikatami
Gwarantują nie tylko lepszą dynamikę, lecz także niższe spalanie. Trochę nas dziwi, że Volkswagen nie zrezygnował z nazwy “TSI”. Bo o ile MPI (dla wolnossących odmian) kojarzy się całkiem dobrze, o tyle TSI nie zdobyło uznania – poprzednik opisywanego silnika (czyli generacja EA 111) to pasmo wpadek i pomyłek. Wystarczy przypomnieć rozciągnięte łańcuchy rozrządu czy nawet pękające tłoki, żeby nabrać do jednostki dużego dystansu.
- 1.0 MPI od Volkswagena czy 1.2 DualJet od Suzuki.
- Podobnie, jeśli do
MPI_Recv zamiast
przekazalibyśmy MPI_ANY_TAG, oznaczałoby to, że chcemy odebrać
komunikat dowolnego typu. - Zadaniem tej funkcji (man MPI_Finalize) jest poinformowanie systemu
uruchomieniowego MPI, że aktualny proces kończy pracę, i zwolnienie
zasobów zaalokowanych przez implementację MPI. - Dzięki temu turbina może być chłodzona również na postoju.
- Pełni ona rolę punktu
synchronizacyjnego, do którego każdy proces musi dojść, aby którykolwiek
z nich mógł przejść dalej.
Ale w tym przypadku można mówić nawet nie o modernizacji, lecz o całkowicie nowej konstrukcji, korzystającej jedynie z przykrych doświadczeń. Z oznaczenia wiemy tylko, że jest to EA – Entwicklungsauftrag modularer Ottomotorbaukasten (rozwojowa platforma modułowego silnika benzynowego). Modularność polega na tym, że bliźniaczą konstrukcję do naszych litrówek mają też silniki 1.2, 1.4 oraz 1.5 TSI. Zamiast barier w programie “Hello world” zastosuj komunikaty do
synchronizacji procesów.
Kompilowanie programów używających MPI
Na dzisiejszym laboratorium poznamy środowisko, w którym będziemy testować
nasze programy wykorzystujące MPI oraz poznamy podstawy samego MPI. Przewaga układów wtryskowych w porównaniu do zasilania gaźnikowego przejawia się w niższym zużyciu paliwa oraz w lepszej czystości spalin. Systemy wtryskowe gwarantują dokładniejsze wypalenie paliwa i charakteryzują się znacznie niższymi poziomami emisji tlenków węgla (COx), tlenków azotu (NOx) i niedopalonych węglowodorów (HC). Początkowo pracą wtryskiwaczy sterowały układy mechaniczne, hydrauliczne i elektromechaniczne.
Te problemy nie są znane właścicielom samochodów ze starszym typem wtrysku paliwa, mianowicie wielopunktowym (MPI – Multi Point Injection). Stanowi on rozwinięcie systemu jednopunktowego dotrysku paliwa (SPI – Single Point Injection), z czego oba zaliczamy do grupy wtrysków pośrednich. Paliwo, zanim znajdzie się w komorze spalania, trafia do kolektora ssącego. Tam miesza się z powietrzem i przez kanały wędruje do cylindrów, gdzie następuje spalenie mieszanki.
Jedyne rozwiązanie problemu stanowi mozolne czyszczenie jego wnętrza – niezbędny jest demontaż głowicy. 1.6 FSI ma także inną dosyć istotną wadę dla kierowców liczących każdą wydaną złotówkę. W przeciwieństwie do swojego poprzednika, benzynowy motor mniej ochoczo współpracuje z LPG. Koszt dedykowanej instalacji to nawet 5 tysięcy złotych. Najwięcej wątpliwości budzi jednak współpraca z instalacjami gazowymi.
Nieprawdą jest, że silników z bezpośrednim wtryskiem nie da się zasilać LPG. Dlatego stosuje się do nich instalacje dostarczające LPG do kolektora dolotowego przy jednoczesnym „zaangażowaniu” wtryskiwaczy benzyny tak, by miały zapewnione chłodzenie. Najdroższe typy instalacji z kolei w ogóle nie przewidują oddzielnych urządzeń dawkujących gaz, a robią to w fazie ciekłej przez fabryczne wtryskiwacze benzyny. W nich minimalizowane jest ryzyko jednoczesnego spalania obydwu rodzajów paliwa.
Obecnie czasy otwarcia wtryskiwaczy są regulowane komputerowo, co gwarantuje jeszcze wyższą precyzję działania i dokładność. Do tego znaczenie ma paliwo – VW rekomenduje benzynę 98-oktanową i jak się okazuje, warto taką stosować. Jeśli natomiast chodzi o motory 8-zaworowe, to owszem, palą dość dużo, ale uchodzą za trwałe, a powtarzalne usterki to uszkodzenia cewek zapłonowych i przepustnicy. Przerób program “Hello world” na program “Echo”, w którym jeden proces
kilkakrotnie wysyła do innego procesu tablicę liczb. Proces odbierający
natomiast odsyła otrzymaną tablicę z powrotem.
Samochody z tym silnikiem
Nie ma nawet gwarancji, że odbiorca zaczął odbierać
komunikat. MPI mówi tylko, że funkcja MPI_Send może się zablokować
do momentu, gdy kontynuowanie działania będzie bezpieczne z punktu
widzenia wysyłanego komunikatu (tj. pamięć z komunikatem będzie można zmieniać). Aby umożliwiać bardziej precyzyjną kontrolę nad tym, co dzieje się z wysyłanym
komunikatem, MPI udostępnia całą gamę wariantów funkcji MPI_Send
z różną semantyką, ale o tym na innym laboratorium. Jednym z mechanizmów synchronizacji procesów w MPI jest tak zwana
bariera (man MPI_Barrier). Pełni ona rolę punktu
synchronizacyjnego, do którego każdy proces musi dojść, aby którykolwiek
z nich mógł przejść dalej.
Pomiary rób wielokrotnie, odrzucając skrajne wyniki i uśredniając
pozostałe. Postaraj się, aby inne operacje (np. wypisywanie
wartości na standardowe wyjście) nie zakłócały pomiarów. Kolejnym zagadnieniem, na którym zatrzymamy się przy okazji funkcji
MPI_Send jest semantyka tej funkcji. Dokładniej, jakie gwarancje daje
MPI_Send w momencie zakończenia jeśli chodzi dostarczenie wysyłanego
komunikatu oraz o obszar pamięci zawierającej wysyłany komunikat. Generalnie, MPI_Send gwarantuje, że
komunikat zostanie kiedyś dostarczony oraz że w momencie zakończenia
MPI_Send, obszar pamięci zajmowany przez komunikat może być bezpiecznie
użyty. Jednakże nie ma żadnych gwarancji co do tego, że po opuszczeniu
funkcji MPI_Send, wysyłany komunikat został odebrany (i przetworzony
przez obiorcę).