2012-11-21 36 views
16

Bu üç işlev arasındaki fark nedir, özellikle son iki? Kütüphane el kitabı, 'un davranışını yansıttığı için bu fonksiyonun kullanımdan kaldırıldığını unutmayın. İşlevleri, yerine kullanılmaması gereken, kullanılmayan işlev olan kullanılmayan cudaDeviceSynchronize() işlevine benzer. Bu, ne anlama geldiğinden emin değil. Ancak, ne anlama geldiğinden emin değilsiniz.cudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize

cevap

30

Bunların hepsi bariyerleri. Bariyerler, bir koşul yerine getirilene kadar, kod yürütmeyi engelin ötesinde engeller.

  1. GPU daha önce istenen cuda görevleri (çekirdekleri, veri kopyaları, vb) senin kadar
  2. cudaThreadSynchronize() işlemeyi bitirene kadar (cudaDeviceSynchronize içinde verildiği) CPU/konak dizisindeki cudaDeviceSynchronize() durur yürütme' ve keşfedilen, sadece cudaDeviceSynchronize'un onaylanmamış bir sürümüdür. Kullanımdan kaldırıldı, şu an için hala çalıştığı anlamına gelir, ancak kullanılmaması önerilir (bunun yerine cudaDeviceSynchronize kullanın) ve gelecekte desteklenmeyebilir. Ancak cudaThreadSynchronize() ve cudaDeviceSynchronize() temel olarak aynıdır.
  3. cudaStreamSynchronize(), yukarıdaki iki işlevle aynıdır, ancak GPU, başvurulan akışta numaralı başvuruda belirtilen tüm önbellek görevlerini () işleyene kadar CPU ana bilgisayar iş parçacığında daha fazla yürütmeyi önler. Yani cudaStreamSynchronize() yalnızca bir parametre olarak bir akış id alır. CPU kod yürütme bu engelin ötesinde devam ettiğinde, diğer akışlarda verilen cuda görevleri tamamlanabilir veya olmayabilir.