2012-09-05 19 views
7

Kiedy sprawdzamy użycie rejestru za pomocą xptxas widzimy coś takiego:CUDA banki stały pamięci

ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16] 

Zastanawiam się, czy obecnie istnieje dokumentacja wyraźnie wyjaśnia CMEM [x]. Jaki jest sens oddzielania stałej pamięci w wielu bankach, ile jest tam banków i do czego służą inne banki inne niż 0, 2, 14, 16?

jak marginesie, @njuffa (Specjalne podziękowania dla Ciebie) wyjaśniono wcześniej na forum Nvidii co jest bankiem 0,2,14,16:

Używane stałą pamięć jest podzielona na „zmiennych” programu ciągłej (bank 1) plus stałe generowane przez kompilator (bank 14).

CMEM [0] Argumenty jądra

CMEM [2]: zdefiniowane przez użytkownika stałe obiekty

CMEM [16] kompilator generowane stałe (z których niektóre mogą odpowiadać dosłownym stałe w kodzie źródłowym)

+5

Nie ma za co. Myślę, że wspomniałem we wpisie na forach NVIDIA, że liczba stałych banków różni się między architekturami GPU, podobnie jak przypisanie banku.Innymi słowy, są to szczegóły implementacji, o które programiści nie powinni się martwić, ponieważ nie są częścią modelu programowania. Jednym z powodów korzystania z wielu banków jest zminimalizowanie potencjału sprzecznych zastosowań stałej pamięci, w szczególności utrzymywanie jak największej dostępnej dla użytkownika liczby stałych banków dla kodu użytkownika. – njuffa

+0

@njuffa Myślę, że to (wraz z cytatami z postów zamieszczonych powyżej) powinno zostać przekonwertowane na odpowiedź. :) – harrism

+0

@njuffa Mam kolejne pytanie. W przewodniku programowania napisano, że argumenty konfiguracji wykonawczej są obliczane zanim rzeczywiste argumenty funkcji i podobnie jak argumenty funkcji, są obecnie przekazywane za pośrednictwem pamięci współdzielonej do urządzenia._ Moje zrozumienie jest podczas kompilacji, argumenty są kopiowane do cmem [0] ], ale w czasie wykonywania są kopiowane z cmem do smem tuż przed rozpoczęciem nowego bloku. Czy to jest poprawne? –

Odpowiedz

4

Korzystanie z banków stałych GPU przez CUDA nie jest oficjalnie udokumentowane według mojej wiedzy. Liczba i wykorzystanie banków stałych różni się w zależności od generacji procesorów graficznych. Są to szczegóły implementacyjne niskiego poziomu, o które programiści nie muszą się martwić.

Wykorzystanie banków stałych można odwrócić, jeśli to konieczne, patrząc na kod maszynowy (SASS) wygenerowany dla danej platformy. Tak właśnie wymyśliłem informacje cytowane w pierwotnym pytaniu (informacje te pochodzą z mojego forum na temat twórców aplikacji NVIDIA). Jak pamiętam, informacje, które tam podałem, opierały się na inżynierii odwrotnej adhoc, konkretnie zastosowanej do urządzeń klasy Fermi, ale nie mogę tego teraz zweryfikować, ponieważ fora są w tej chwili niedostępne.

Jedną z przyczyn posiadania wielu stałych banków jest zarezerwowanie dla użytkownika stałej pamięci stałej dla programistów CUDA, przy jednoczesnym przechowywaniu dodatkowych informacji tylko do odczytu dostarczanych przez sprzęt lub narzędzia w dodatkowych stałych bankach.

Należy pamiętać, że biblioteka matematyczna CUDA jest dostarczana jako pliki źródłowe, a funkcje są wprowadzane do kodu użytkownika, dlatego też stałe wykorzystanie pamięci przez funkcje matematyczne biblioteki CUDA jest zawarte w statystykach stałej pamięci dostępnej dla użytkownika.

0

Zobacz "Miscellaneous NVCC Usage". Podkreślają, że stały przydział banku zależy od profilu.

W PTX guide mówią, że oprócz stałej pamięci 64KB mieli jeszcze 10 banków do stałej pamięci. Sterownik może alokować i inicjować stałe bufory w tych regionach i przekazywać wskaźniki do buforów jako parametry funkcji jądra.

Domyślam się, że profil podany dla nvcc będzie dbał o to, jakie stałe wchodzą w jaką pamięć. W każdym razie nie musimy się martwić, jeśli każda stała pamięć cmem [n] jest mniejsza niż 64 KB, ponieważ każdy bank ma rozmiar 64 KB i jest wspólny dla wszystkich wątków w siatce.

Powiązane problemy