-2
因此,我正在進行一項分配工作,涉及使用CUDA在C中進行編碼。我寫了一個函數和一個工作的內核(產生正確的結果)。不過,我期待着提高速度。循環內的CUDA副本和內核調用
這是內核:
__global__ void update_c(const double *d_u, double *d_u_new, const int nx, const double k)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < nx-1 && i > 0)
{
d_u_new[i] = d_u[i] + k*(d_u[i+1] + d_u[i-1] -2*d_u[i]);
}
}
,這是功能:
void update() {
cudaMemcpy(d_u, u, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_u_new, u_new, size, cudaMemcpyHostToDevice);
update_c<<<blocksPerGrid, threadsPerBlock>>>(d_u, d_u_new, nx, k);
cudaMemcpy(u, d_u, size, cudaMemcpyDeviceToHost);
cudaMemcpy(u_new, d_u_new, size, cudaMemcpyDeviceToHost);
double *tmp = u_new; u_new = u; u = tmp;
}
我明白,一旦複製d_u和d_u_new將留在設備上,所以我並不需要複製它們每一次。我的問題是,如何重寫這個變量來反覆使用變量,並且只在程序的開始和結束處複製內存?我是CUDA的新成員,在分配之前只有一個非常簡短的速成課程。
我們需要看看調用'update()'的代碼才能真正知道。你能添加更多的上下文嗎? –