Eşlenmiş kopyadaki sıfır kopyayı cudaHostGetDevicePointer
ile kullanmak istiyorum. thrust::host_vector
kullanabilir miyim yoksa cudaHostAlloc(...,cudaHostAllocMapped)?
kullanmalı mıyım? Veya Thrust ile bir şekilde daha kolay mı?thrust :: host_vector kullanabilir miyim veya Thrust ile sıfır kopyalar için cudaHostAlloc kullanmalı mıyım?
6
A
cevap
5
Yine de, bir thrust :: host_vector öğesini eşlenmiş bir ana bilgisayar ayırması olarak kullanmanın mümkün olmadığından eminim. Sabitlenmiş bir bellek ayırıcısı var, ancak eşlenen belleğin kullanılabilir olduğuna inanmıyorum.
- ile
- Ayrılan eşlenen, İğnelenmiş konak bellek
cudaHostGetDevicePointer
- kullanarak sıfır kopya bellek için cihaz işaretçisi alın söz konusu cihaz işaretçisi üzerinde
thrust::device_pointer_cast
kullanarakthrust::device_ptr
oluşturun: Ne yapmanız gereken böyle bir şeydirgeçmesi dirctly
cudaHostAlloc
ya thrust::device_ptr
kullanarak thrust::device_vector
yapabilirsiniz (daha fazla bilgi için here bakınız) ya da Bir yineleyici kabul eden herhangi bir algoritmaya.
Teşekkürler! Ama itme :: device_ptr kullanarak thrust :: device_vector nasıl yapabilirim? – Alex
Bir iterator aralığından bir 'thrust :: device_vector' yaratabilirsiniz, bu nedenle 'thrust :: device_vector v (p, p + n)' gibi bir şey, '' device_ptr'' p''den vektör 'v' oluşturur. 'n' elemanlarının bir tahsisi. –
talonmies
Ama yeni device_vector yaratacak ve device_ptr p'den belleğe vektör kopyalayacak, değil mi? – Alex