Co to jest przetwarzanie strumieniowe?
Przetwarzanie strumieniowe to koncepcja programowania i inżynierii komputerowej, którą można wykorzystać do projektowania aplikacji i systemów sprzętowych. Gdy używane jest przetwarzanie strumienia, dane są organizowane w strumienie, które są następnie podawane do węzłów lub procesorów, które manipulują danymi w strumieniu, po czym dane są kontynuowane wzdłuż ścieżki, aby inne węzły mogły nimi manipulować. Na końcu strumienia dane są umieszczane w pamięci lub przekazywane do aplikacji użytkownika końcowego w celu użycia. System lub aplikacja korzystająca z przetwarzania strumienia działa najskuteczniej, gdy informacje o strumieniu są generowane konsekwentnie przez jedno lub więcej źródeł, dzięki czemu są skuteczne w cyfrowym przetwarzaniu sygnału (DSP), obrazowaniu i grafice lub w ruchu o dużej przepustowości. Najbardziej rozpowszechnionym praktycznym zastosowaniem przetwarzania strumieniowego jest produkcja komputerowych kart graficznych, w których procesory strumieniowe są wbudowane w sprzęt graficzny, aby pomóc w wykonywaniu wielu operacji na przychodzących danych graficznych, takich jak tablice wierzchołków.
Podstawą przetwarzania strumienia jest koncepcja danych jako strumienia. Zamiast czerpać informacje z różnych źródeł lub przechwytywać wiadomości z mechanizmu przerywającego, strumień danych jest tworzony, gdy informacje są zestawiane przez jakiś proces w jedną linię zwaną strumieniem. Elementy danych mogą się różnić, ale ogólnie strumień składa się z bloków tego samego rodzaju elementów, które mogą być przetwarzane sekwencyjnie.
Procesory lub węzły używane do przetwarzania strumienia akceptują strumień i wykonują daną operację na danych, po czym dane mogą być przekazywane do innego węzła w celu dalszego przetwarzania. Aby uzyskać maksymalną wydajność, węzły mają być małymi funkcjami, które są ładowane i wykonywane bezpośrednio na centralnej jednostce przetwarzania (CPU), przy użyciu rejestrów i bezpośredniego dostępu do pamięci (DMA) w celu zwiększenia prędkości. Jeśli informacje w strumieniu mogą być niezależne i nie są zależne od wyniku operacji jednego węzła, wówczas w strumieniu można wykonać wiele operacji jednocześnie, jednocześnie zapewniając kompilatorowi programu wskazówki, które mogą pozwolić na bardzo skuteczne optymalizacje.
Przetwarzanie strumienia jest ogólnie dobrym rozwiązaniem w sytuacjach, w których dane są stale generowane i przesyłane do strumienia przez aplikację lub urządzenie, takie jak kamera, czujnik zewnętrzny lub połączenie sieciowe. Wiele kart graficznych wykorzystuje procesory strumieniowe, aby szybko przekształcić dane przychodzące przez potok graficzny w renderowany, zrasteryzowany obraz. Niektóre karty graficzne mają wiele procesorów lub węzłów wbudowanych w sprzęt karty, więc przetwarzanie strumienia może odbywać się szybko, a czasem jednocześnie, co często jest pożądane, gdy shadery są używane do grafiki trójwymiarowej (3D).