Prosta odpowiedź jest taka, że GPU działa najlepiej, gdy trzeba wykonać dość małe, dość proste obliczenia dla każdego z bardzo dużej liczby elementów. Aby osiągnąć wiele w ten sposób, obliczenia dla każdego elementu muszą być niezależne od obliczeń dla innych elementów. Jeśli istnieje (normalnie) pewna zależność między jednym elementem a drugim, zazwyczaj musisz znaleźć sposób na jego zerwanie, zanim zaczniesz czerpać dużo korzyści z wykonywania tego kodu na GPU. Jeśli zależności nie można w ogóle przerwać lub wymaga ona zbyt dużo pracy, aby złamać, kod może zostać szybciej wykonany na procesorze.
Większość obecnych procesorów obsługuje także kilka rodzajów operacji, których obecne GPU po prostu nie próbują w ogóle obsługiwać (np. Ochrona pamięci dla wielozadaniowości).
Patrząc na to z nieco innej strony, procesory zostały (w dużej mierze) zaprojektowane tak, aby były dość wygodne dla programistów, a sprzęt, który ludzie zrobili, co w ich mocy (i cholernie dobrze!), Aby stworzyć sprzęt, który utrzymuje ten wygodny model dla programista, ale nadal działa tak szybko, jak to możliwe.
Procesory graficzne działają w zupełnie odwrotnym kierunku: są w dużej mierze wygodne dla projektantów sprzętu, a takie rzeczy jak OpenCL próbowały zapewnić możliwie rozsądny model programowania, biorąc pod uwagę ograniczenia sprzętowe.
Pisanie kodu do uruchomienia na GPU zwykle zajmuje więcej czasu i wysiłku (więc będzie kosztować więcej) niż robienie tego samego na CPU. Jako takie, ma to sens przede wszystkim wtedy, gdy:
- Problem jest tak równoległy, że można oczekiwać dużego zysku przy minimalnym wysiłku, lub
- Zwiększenie prędkości jest tak ważne, że uzasadnia wiele dodatkowej pracy.
Istnieją pewne oczywiste możliwości dla każdej z nich - ale ogromna liczba aplikacji najwyraźniej nawet nie jest zbliżona do żadnej z nich. Byłbym bardzo zaskoczony, gdy zobaczę (na przykład) aplikację CRUD działającą na GPU w najbliższym czasie (a jeśli tak się stanie, prawdopodobnie tak się stanie, ponieważ ktoś wyznaczył dokładnie ten cel, niekoniecznie coś zbliżającego się do optymalnego stosunek kosztów do korzyści).
Rzeczywistość jest taka, że w przypadku wielu (mam ochotę powiedzieć „większość”) typowy procesor jest o wiele bardziej niż wystarczająco szybki, a wygoda programowania (prowadząca do łatwiejszego rozwoju nowych funkcji) jest znacznie ważniejsza niż szybkość wykonania.