Moje pytanie jest tak samo jak tytuł. Właściwie szukam sposobu asynchronicznego uwolnienia pamięci urządzenia.Czy program cudaFree() jest asynchroniczny?
Dzięki!
Moje pytanie jest tak samo jak tytuł. Właściwie szukam sposobu asynchronicznego uwolnienia pamięci urządzenia.Czy program cudaFree() jest asynchroniczny?
Dzięki!
cudaFree() nie jest asynchroniczny. Wywołanie synchronizacji jest wywoływane wewnętrznie, gdy funkcja cudaFree() jest wywoływana z hosta.
Nie rozumiem, co właściwie oznacza twoja potrzeba asynchronicznego zwalniania pamięci.
cudaFree()
jest synchroniczna. Jeśli naprawdę chcesz, aby był asynchroniczny, możesz utworzyć własny wątek procesora, nadać mu kolejkę roboczą i zarejestrować żądania cudaFree
z głównego wątku.
Powiedziane, asynchroniczne uwolnienia wydają się dziwną prośbą. Być może mógłbyś wyjaśnić, dlaczego chciałbyś, aby to było asynchroniczne. Czy chcesz, aby darmowe wystąpiło natychmiast po uruchomieniu zdarzenia CUDA?
Strumienie CUDA i zdarzenia CUDA zostały wykonane asynchronicznie od momentu ich wprowadzenia, ponieważ niektóre aplikacje mają podprogramy, które ich używają, i istnieje potrzeba, aby te podprogramy nie powodowały synchronizacji ścieżek ich rozmówców. Uwalnianie asynchroniczne jest całkowicie uzasadnioną prośbą, z tego samego powodu. CUDA może asynchronicznie oznaczyć pamięć jako wolną, a jeśli musi zsynchronizować się z GPU, aby edytować tabele stron, wykonaj te operacje leniwie (poczekaj aż nastanie następne jądro jądra). – ArchaeaSoftware
@Archaea: To interesujące. Myślę, że plakat jest również zainteresowany uwolnieniem pamięci, a nie tylko obiektów cudaEvent_t. Jak powiązać cudaFree ze zdarzeniem lub strumieniem? –
Panie Fooz, twoja odpowiedź jest poprawna (to jest AFAIK cudaFree() jest synchroniczna), ja tylko podkreślam, że rozsądnie jest chcieć, aby była asynchroniczna. – ArchaeaSoftware
Wyobraźmy sobie, że rozpoczyna się uruchamianie zależnego jądra, a niektóre wymagają tymczasowych przydziałów. Byłoby miło, gdyby wątek hosta mógł asynchronicznie wstawiać 'cudaMalloc's i' cudaFree's do takiego potoku. –
W przypadku dużego problemu można użyć asynchronicznego zwalniania pamięci, aby zrobić miejsce dla innych strumieni. Innymi słowy, będziesz w stanie poradzić sobie z dużymi problemami z wieloma strumieniami w jednym GPU. –