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)
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
@njuffa Myślę, że to (wraz z cytatami z postów zamieszczonych powyżej) powinno zostać przekonwertowane na odpowiedź. :) – harrism
@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? –