reduction

    1熱度

    1回答

    我想了解Cuda中的並行復原(這非常有趣)。在我最後一個關於並行減少的問題Robert Crovella給了我一個非常直觀和詳細的解釋,幫助了我很多。非常直觀。現在看Cuda SDK的縮小樣本,幾乎沒有黑斑。 爲什麼(在下面的評論)是工作的複雜性是在O(n)的保持?在這種情況下會發生相反的情況?我有關於步驟複雜性的相同問題。 該版本按順序爲每個線程添加多個元素。這減少了算法的整體成本,同時保持了工

    2熱度

    2回答

    據我所知有兩個步驟來證明一個問題是NP完全性: 給出了一種算法,可以驗證在多項式時間內解決問題。也就是說,一種算法,其輸入是提出的問題解決方案,其輸出是「是」還是「否」,取決於輸入是否是問題的有效解決方案。 證明這個問題是NP難 - 比如,假設你有一個可以在一個步驟計算其它已知的NP完全問題的神諭。使用它,編寫一個在多項式時間內解決這個問題的算法。 例如,假設我們要證明下面的問題是NP完全性: 給

    1熱度

    2回答

    我想更好地理解減少,我目前正在看兩個算法,「中位數」和Quicksort。 我知道這兩種算法都使用類似的(有效的)分區子程序來幫助解決他們的問題,最終使他們非常相似。 Select(A[1...n],k): // Pseudocode for median of medians m = [n/5] for i from 1 to m: B[i] = Select(A[

    4熱度

    3回答

    我想申請在這片我的內核的代碼減少(1個維數據): __local float sum = 0; int i; for(i = 0; i < length; i++) sum += //some operation depending on i here; 代替具有正好1個線程執行此操作的,我想有n個線程(n =長度),最後有1個線程作總和。 在僞代碼,我想能寫這樣的事: int

    1熱度

    3回答

    我有兩個文件作爲輸入。 (它們各自有更多的列,但我只將其縮小到重要的列) A 15.6 A D B 10.3 A B C 12.5 A E D 14.5 A Y E 11.4 C A F 23.7 C B C R D A D R D F 第一個文件是一種索引。我想查看第二個文件,並通過在第

    2熱度

    2回答

    我知道我可以通過parallel reduction並行總結一個數組的元素。 但我有點難以跟隨它。我在cublas中看到了這個函數cublasDasum,它總結了元素的絕對值。看來應該有一個非常相似的功能來總結元素,而不是絕對值。有沒有什麼辦法可以找到cublasDasum的源代碼,看看它是如何完成的? 添加一個數組就是這樣一個基本操作。我不相信沒有這樣的功能......。

    1熱度

    1回答

    __global__ void gpu_Heat (float *h, float *g, float * sum, int N) { int nbx, bx, nby, by; float diff = 0.0; nbx = (N-2)/blockDim.x; bx = nbx/gridDim.x; nby = (N-2)/blockD

    0熱度

    1回答

    我有一個for循環遍歷相當大量的點(約20000),對於每個點檢查點是否在某個柱面內(該柱面是每個點都一樣)。 此外,我想從點集中得到最高的Y座標。 由於我必須做很多計算,而且速度很慢,我想使用OpenMP來並行化循環。目前我有(略減): #pragma omp parallel for default(shared) private(reducedCloudSize, reducedCloud,

    0熱度

    1回答

    我在前面的帖子中討論過CUDA中的減少算法(比如在一系列元素上求和和最大化),但是使用動態並行性,它們有可能以不同的方式實現。是否有更高效的實現可以從內核中調用?

    2熱度

    1回答

    讀書的問題,並從以下 LINK 的答案後,我仍然留在我的腦海裏的問題。來自我在C/C++中的背景;我明白使用volatile有缺點。並且在答案中指出,對於CUDA,如果不使用volatile關鍵字,優化可以用寄存器替換共享數組以保留數據。 我想知道計算(總和)減少時可能遇到的性能問題。例如 __device__ void sum(volatile int *s_data, int tid) {