我剛剛開始與CUDA,並試圖圍繞CUDA減少算法包裹我的大腦。就我而言,我一直試圖獲得兩個矩陣的點積。但是對於只有大小爲2的矩陣,我得到了正確的答案。對於任何其他大小的矩陣,我錯了。Cuda內核與減少 - 2個矩陣點積的邏輯錯誤
這只是測試,所以我保持矩陣大小非常小。只有大約100塊,所以只有1塊可以滿足所有需求。 任何幫助將不勝感激。謝謝!
這裏是常規代碼
float* ha = new float[n]; // matrix a
float* hb = new float[n]; // matrix b
float* hc = new float[1]; // sum of a.b
float dx = hc[0];
float hx = 0;
// dot product
for (int i = 0; i < n; i++)
hx += ha[i] * hb[i];
這裏是我的CUDA內核
__global__ void sum_reduce(float* da, float* db, float* dc, int n)
{
int tid = threadIdx.x;
dc[tid] = 0;
for (int stride = 1; stride < n; stride *= 2) {
if (tid % (2 * stride) == 0)
dc[tid] += (da[tid] * db[tid]) + (da[tid+stride] * db[tid+stride]);
__syncthreads();
}
}
我的完整代碼:http://pastebin.com/zS85URX5
那麼,語法錯誤會阻止你的代碼編譯。所以推測這不是一個語法錯誤。 –
它運行得很好,但可能我只是沒有使用正確的語法。我的主要疑問仍然是我正在增加和增加的內核。 –