
Wpis o tym jak potraktowałem szlifierką kartę graficzną, aby zamontować ją w serwerze, stał się jednym z najpopularniejszych wpisów na PDAsite. Od tamtego czasu minął ponad rok, serwer zamieniłem na peceta opartego o popularną ostatnio modyfikację serwerowych czterordzeniowych Xeonów na cywilne płyty pod Core2Duo. Tym samym, zmieniając płytę główną na standardową uzyskałem pełny slot x16 i modyfikacja przestała być potrzebna.
Jednak, jak to na studenta przystało, często gdzieś wyjadę – a pecet jest mało mobilny. Mój Thinkpad T400 demonem szybkości również nie jest, a pomimo posiadania podwójnej/przełączanej grafiki – Intel 4500MHD + Radeon 3450, mocno brakuje mi wydajności graficznej poza domem.
I z tego powodu zacząłem szukać. A że kto szuka, wielbłądzi nie błądzi, szybko natknąłem się na rozwiązanie znane jako ViDock, a podążając dalej na wątek dotyczący budowy DIY eGPU… czyli podłączenia karty graficznej PCI-Express do laptopa. I tak saga trwa…
Trochę teorii…
Na początek polecam zapoznać się ze wspomnianym już wpisem, gdzie opisałem wcześniej podstawy działania PCI-Express, oraz to w jaki sposób karta x16 może współpracować z slotem x8, czy nawet x1. Natomiast tu skupię się na nieco innych aspektach, zarówno sprzętowych jak i wydajnościowych.
Zacznę zatem od spraw prądowych. Złącze PCI-Express dostarcza dwa napięcia zasilania. Są to 3.3V, które niezależnie od długości złącza zawsze musi dostarczyć minimum 3A (10W). Prócz tego mamy drugie napięcie, 12V – tu dopuszczalny prąd zmienia się od długości złącza, i karty do x8 mogą (łącznie!) pobrać max 25W, a x16 – 75W. Jeśli potrzeba więcej mocy, należy dostarczyć ją z zewnątrz, jak często jest to spotykane w kartach graficznych.
ExpressCard jak i mPCIe (Mini PCI-Express) w laptopach nie bez powodu noszą takie nazwy. W gruncie rzeczy są to standardy oparte o PCI-Express, z małymi zmianami – oba opierają się o złącze PCIe x1, dostarczają jednak inne napięcia – 3.3V i 1.5V – oraz posiadają zintegrowany slot USB, dzięki czemu producenci mogą wykorzystywać ten standard jako szynę danych. Jednak skupmy się na samych sygnałach PCIe – są one identyczne jak w pierwowzorze. A co to oznacza?
…i praktyki:
Skoro sygnały są identyczne, to i wykonanie przelotki powinno być proste – prawda? I istotnie, tak jest – najprostsza wersja przejściówki ExpressCard – PCI-Express x1, którą wykonałem, to dwa złącza + kable (plus dostarczenie z zewnątrz napięć 3.3V i 12V do funkcjonowania karty – samo 3.3V dostarczane przez EC ma max 1A kiedy PCIe wymaga wspomniane 3A), trochę czasu i dużo strachu przy podłączaniu. Wykorzystałem w tym celu adapter ExpressCard-SerialATA warty około 30zł + przedłużacz PCI-Express, do którego łatwo było podlutować się kablami, za około 10zł
W adapterze EC-SATA po rozebraniu karty pilnikiem odciąłem wszystkie połączenia z złączem, pozostawiając całość starej elektroniki w środku – w ten sposób karta złożona jest „na ścisk” i mamy mniejsze prawdopodobieństwo urwania kabla podczas używania. Jako taśmę sygnałową użyłem fragmentu starej taśmy od stacji dyskietek. Z drugiej strony podłączony został wspomniany przedłużacz PCI-Express, oraz złącze zasilania SerialATA z którego adapter pobiera napięcia 12 i 3.3V (wymaga to zasilacza który dostarcza 3.3V na złącze SATA, nie każdy to posiada, a na pewno brakuje go w adapterach sata-molex). Adapter wykonałem na podstawie schematu zamieszczonego w tym poście.
Jak to działa? Testowałem trzy karty – Radeon HD2400XT (zasilany wprost ze slotu), Radeon HD7770 oraz nVidia GTX275. Dwa pierwsze przypadki działają bezproblemowo – a nawet mój laptop posiada opcję ustawienia grafiki w slocie PCI-Express (jest dostępna stacja dokująca z tym slotem) po włączeniu której karty wbudowane zostały całkowicie deaktywowane na rzecz zewnętrznej. nVidia niestety zawieszała się po chwili pracy w systemie – ale mam duże podejrzenia że jest to wina za słabego zasilacza (karta bierze ponad 200W), będę jeszcze sprawdzał ten trop.
Zabawna sprawa jest na pulpicie, w 1920×1200 animacje okien potrafiły lekko przyciąć – wynika to najwyraźniej z sposobu renderowania pulpitu przez system Windows który wymaga większej przepustowości niż slot x1 pozwala przesłać. Jednak po włączeniu jakiejkolwiek gry sytuacja się wyklarowała – standardowy dla mnie Half-Life 2 na niemal maksymalnych detalach w 100-200FPS to coś na tym laptopie dotychczas nie osiągalnego. Liczba klatek na sekundę przy tej konfiguracji niestety będzie się wahać bardziej niż na komputerze stacjonarnym – winna jest tu znów przepustowość złącza – tekstury z dysku ładują się przez nią wolniej, ale już po załadowaniu do pamięci karty wykorzystywane są w pełni jej wydajności.
Czy jestem zadowolony – jak najbardziej. Choć mnie głównie zależało na OpenCL/CUDA (tj przetwarzanie danych na kartach) niż na samym graniu – prościej jest mi zabrać ze sobą kartę i zasilacz (docelowo będzie to zewnętrzny oparty o taki z Xboxa 360) niż całego peceta. No i w ten sposób nie mam potrzeby zmiany laptopa na nowszego.
Ach, i słowem końcowym – złożyłem obudowę karty ExpressCard, zaizolowałem kable w jedną wiązkę i obudowałem złącze PCI-Express, czego na zdjęciach nie uchwyciłem. Jako że na linii laptop-karta potrzebne jest dokładnie 16 pinów (w tym liczę kilka sztuk masy), planuję wykorzystać całą obudowę karty ExpressCard, podmieniając złącze na DE-15F (takie jak przy analogowych monitorach – idealnie pasuje wymiarami), czyniąc w ten sposób przejściówkę rozłączalną, a samą kartę można będzie wtedy odsunąć na kablu na większą odległość. Ale to już szczegóły, bo sama istota działania pozostaje niezmienna.
Komentarze