我具有單個GPU(例如的GeForce GTX 980Ti)。我有一個單一的浮陣列,例如,cudaMalloc'ed(分配在該單個裝置GPU)長度爲128的,與所有值是1.f.我想用nccl將它們相加得到128,即(1 + 1 + ... + 1)= 128。NCCL - 我們可以總結的陣列的所有的值在1個裝置GPU以獲得總和?
但是,我讀了NCCL開發者文檔上的減少僅是跨設備,而不能在一個單一的設備,如果我正確地解釋它:
比照http://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/index.html#axzz4rabuBrOP
從那裏(引用),
「AllReduce與N個值的獨立陣列VK開始於每個k的位列,並與N個值,其中S [I] = V 0 [的相同的陣列s結尾i] + V1 [i] + ... + Vk-1 [i],對於每個等級k「。
我想確認我無法在單個GPU上減少設備GPU(求和)上的數組。
我完整的代碼(以及如何編譯)在這裏作爲參考/背景:
https://github.com/ernestyalumni/CompPhys/blob/master/moreCUDA/nccl/Ex01_singleprocess_b.cu
的代碼「肉」就在這裏;在「準備」之前(聲明)應該是正確的:
ncclCommCount(*comm.get(),&count);
ncclAllReduce(d_in.get(), d_out.get(), size,
ncclFloat, ncclSum, *comm.get(), *stream.get());
// size is 128 for the 128 elements in both the (pointers to) float arrays
// d_in and d_out
我曾在C++ 11個智能指針「包裝」我的三分球,但我已經盡了與原始指針以及結果相同的代碼;如果您願意,我可以發佈該版本。
請確認我不能在單個設備GPU使用NCCL做平行降低單個設備上,通過單一的陣列,或者告訴我怎樣,我可以。謝謝!
這是很好的知道和進一步的解釋都證實我如何閱讀該報價,並希望能夠幫助其他人。是的,CUB對減少和掃描非常有用,尤其是因爲它正在積極更新,並且具有足夠的低級別以利用nVidia的架構,並且高級別足夠有用。萬分感謝! – ernestyalumni2014