2013-10-05 23 views

cevap

14

Kernel başlatılması asenkron'dur. Bu, çekirdeğin yürütülmesini tamamlamadan önce GPU işlemini başlattıktan hemen sonra CPU iş parçacığına kontrolü döndürdüğü anlamına gelir.

Yani burada işlemci dizisinde sonraki şey nedir? Uygulama çıkışı

Uygulama çıkışında, çıktıyı standart çıktıya gönderme özelliği işletim sistemi tarafından sonlandırılır.

Böylelikle çekirdeğin daha sonra üretilen çıktının gideceği yer yoktur ve göremezsiniz. Uygulama çıkmak için izin önce, sen cudaDeviceSynchronize() kullanmak Öte yandan

, ardından çekirdek bitirmek için garanti edilir (ve çekirdekten çıkışı bir bekleme standart çıkış sırası bulacaksınız).

+0

fakat gönderdiğim bağlantıyı görüyorsanız, kernal çağrısından hemen sonra cudamemcpy (.... cihazını barındırmak için) çağırıyoruz. neden cudadevicesynchronize() burada yok? – gpuguy

+5

Aynı akışa verilen CUDA işlemleri (API çağrıları, çekirdek çağrıları), eşzamansız olsa bile, seri olarak yürütme garantilidir. Çekirdek ve cudaMecpy işlemi aynı (varsayılan) akışta olduğu için, çekirdek başlatımı eşzamansız olsa bile (ana iş parçacığına göre), çekirdek tamamlanana kadar cudaMemcpy'nin başlatılmayacağı garanti edilir. –

İlgili konular