Osiągnij sukces biznesowy, wypełniając lukę pomiędzy oprogramowaniem i sprzętem w systemach wbudowanych
Fazy projektowania i prototypowania rozwiązań technologicznych są zazwyczaj długie i kluczowe dla sukcesu biznesowego. Początkowe inwestycje kapitałowe w te projekty mogą być wysokie. W związku z tym stawka i oczekiwania są wysokie! Ponieważ nadal odczuwamy skutki pandemii w postaci opóźnień w dostawach i niedoborów komponentów elektronicznych, w wielu przypadkach firmy odczuwają ogromną presję, aby dotrzeć na rynek i terminowo wysłać zamówione produkty.
Dochodzi również do nieustannej walki o zasoby sprzętowe, ponieważ aplikacje często wymagają coraz większych mocy obliczeniowych. Oznacza to, że sprzęt prawdopodobnie będzie na początku zbyt duży i z czasem stanie się przestarzały. W związku z tym konieczne będzie ciągłe modyfikowanie projektu, aby stale dodawać nowe możliwości sprzętowe do produktów technologicznych, co niepotrzebnie zwiększy koszty i inwestycje.
Znalezienie doświadczonego personelu posiadającego jednocześnie wiedzę z zakresu systemów wbudowanych, sprzętu i oprogramowania nie zawsze jest łatwe. W niektórych firmach inżynierowie bez doświadczenia w systemach wbudowanych prowadzą i rozwijają projekty technologiczne. W związku z tym mogą oni wybierać zestawy deweloperskie (Jetson Nano, Arduino, Raspberry PI) ze względu na znajomość tych systemów i standardowe funkcje ułatwiające integrację z innymi systemami. Płytki deweloperskie mają unikalne zastosowania przemysłowe, o których można przeczytać więcej w tym wpisie na blogu. W przypadku produkcji masowej może to jednak nie mieć zastosowania.
Wszystkie te czynniki mogą negatywnie wpłynąć na decyzję dotyczącą programowania języka, architektury algorytmów i całego rozwoju oprogramowania. Czasami decyzja sprowadza się do użycia standardowego systemu operacyjnego zamiast niestandardowego lub specjalistycznego, z kodem kolażowym ze Stack Overflow zamiast zastrzeżonego algorytmu. Prowadzi to do niewykorzystanych zasobów, przewymiarowanych komponentów sprzętowych, niepotrzebnych opóźnień, dodatkowych kosztów przeprojektowania lub ponownej certyfikacji. Na początku może się to wydawać opłacalne, ale z czasem może się okazać, że nie jest to najbardziej opłacalne rozwiązanie. Co gorsza, podczas normalnej pracy sprzęt pracujący z pełną wydajnością może prowadzić do przegrzewania się, skrócenia średniego czasu między awariami i wyższych kosztów napraw.
Architektura algorytmów
Przyjrzyjmy się najczęstszym ścieżkom obieranym przez firmy w kierunku architektury algorytmów. Niestety, niektórzy inżynierowie pracujący z systemami wbudowanymi siadają do programowania bez żadnego planu ani projektu. Problem polega na tym, że dopiero po fakcie okaże się, czy algorytm jest skuteczny, czy nieefektywny.
Opiszemy dwa przykłady idealnych algorytmów: liniowy i logarytmiczny. Załóżmy, że każda operacja podstawowa trwa sekundę. W przypadku algorytmów liniowych wraz ze wzrostem danych wejściowych, czas wykonania również rośnie, jak pokazano w tabeli 1. Gdyby ten algorytm zachowywał się logarytmicznie, wraz ze wzrostem liczby danych wejściowych, jego czas wykonania pozostałby stabilny (tabela 2). Na przykład algorytmy wyszukiwania binarnego wykazują zachowanie logarytmiczne.
Tabela 1. Zależność między danymi wejściowymi a czasem wykonania algorytmu liniowego.
| Wejście | Czas wykonania |
| 10 | 0,00000001 |
| 100 | 0,0000001 |
| 1 000 | 0,000001 |
| 1 000 000 000 | 1 |
Tabela 2. Zależność między danymi wejściowymi a czasem wykonania algorytmu logarytmicznego.
| Wejście | Czas wykonania |
| 10 | 3.3E-09 |
| 100 | 6.6E-09 |
| 1 000 | 1.0E-08 |
| 1 000 000 000 | 3.0E-08 |
Te dwa przykłady nie występują zazwyczaj w życiu rzeczywistym, ponieważ algorytmy rzadko zachowują się liniowo lub logarytmicznie. Algorytm „Stupid Sort” może być użyty jako przykład wyników, gdy przed rozpoczęciem programowania nie wykonano żadnego planowania ani projektowania. Jest to algorytm strukturyzacji oparty na losowym teście w grupie kart o zachowaniu czynnikowym (Tabela 3). W tym przypadku, jeśli mamy 100 danych wejściowych, mamy 3,2E+183 lata na jego rozwiązanie. Według NASA wiek Wszechświata wynosi 13,7E9 lat, co oznacza, że gdybyśmy wykonali algorytm w dniu powstania Wszechświata, nadal działałby on bez rozwiązania. Należy unikać algorytmów czynnikowych, takich jak algorytm „Stupid Sort”, aby uniknąć marnowania zasobów sprzętowych.
Tabela 3. Zależność między danymi wejściowymi a czasem wykonania algorytmu silniowego.
| Wejście | Czas wykonania | Czas trwania w latach |
| 10 | 10 | 3.171E-7 |
| 100 | 1,0E+191 | 3.2E+183 |
| 1 000 | ? | ? |
| 1 000 000 000 | ? | ? |
W rzeczywistości sprzęt ma swoje ograniczenia. Ogólnie rzecz biorąc, skale czasowe systemów wbudowanych są trudne do zrozumienia dla ludzi. Z tego powodu na potrzeby tej analizy zdefiniujemy skalę łatwiejszą do zrozumienia. Dla typowego procesora 3,9 GHz, stosowanego w standardowych komputerach z 2014 roku, możemy założyć, że jeden cykl procesora trwa 1 sekundę, a czasy te przedstawiono w tabeli 4. W takich przypadkach odczyt pliku z dysku twardego mógłby zająć w najgorszym przypadku 1,5 roku, a odczyt pliku z pamięci RAM 32 sekundy. Jak widać, źle zaprojektowany algorytm marnuje zasoby. W związku z tym, można pomyśleć, że potrzebny jest bardziej wydajny sprzęt o większych możliwościach, gdy trzeba przeanalizować sposób tworzenia oprogramowania.
Tabela 4. Czasy wykonywania standardowych procesów w komputerze w skali łatwiejszej do zrozumienia.
| Działalność | Czas | Skala ludzka |
| Cykl procesora | 0,256 ns | 1 sekunda |
| Pamięć podręczna L1 | 1,026 ns | 4 sekundy |
| Pamięć podręczna L2 | 3,077 ns | 12 sekund |
| Pamięć podręczna L3 | 6,154 ns | 24 sekundy |
| R.A.M. Pamięć | 8,4 ns | 32 sekundy |
| Dysk twardy – najlepszy przypadek | 2,9 ms | 132 dni |
| Dysk twardy – najgorszy przypadek | 12 milisekund | 1.5 lat |
| SDD | 85 μs | 3 dni i 20 godzin |
| Zmiana kontekstu | 10 μs | 10,8 godziny |
| Kwant | 100 milisekund | 12,4 roku |
Jak osiągnąć sukces biznesowy, rozwijając produkty technologiczne?
Z przemyślaną architekturą algorytmów. Musisz zebrać zespół, w którym będzie co najmniej jeden doświadczony inżynier systemów wbudowanych. Ten specjalista będzie najlepiej przygotowany do tworzenia architektury algorytmów, które będą działać na konkretnym sprzęcie. Osoba ta będzie zasadniczo ulepszać oprogramowanie, aby jak najlepiej pasowało do sprzętu (a nie odwrotnie), co z kolei zapewni lepszy zwrot z inwestycji i zaoszczędzi Ci wielu problemów operacyjnych i produkcyjnych.
Inżynier systemów wbudowanych opracuje strategię, zaplanuje i zaprogramuje, aby uniknąć typowych błędów podczas tworzenia oprogramowania, a także będzie w stanie przewidzieć możliwości sprzętu. Oznacza to, że wyzwania mogą zostać zredukowane, a osiągnięcie sukcesu biznesowego będzie łatwiejsze. Kto wie! Może nawet staniesz się bohaterem Przemysłu 4.0, Internetu Rzeczy, robotyki lub przetwarzania obrazu w swojej firmie.
Jeśli chcesz kontynuować czytanie na ten temat, możesz sprawdzić ten blog. Możesz również sprawdź tę stronę Więcej informacji na temat systemów wbudowanych znajdziesz tutaj.
