在hasChanges时做CUDA内核

时间:2015-01-10 10:50:12

标签: c++ cuda while-loop

我的目标是做这样的事情:

bool changed;

do {
    changed = false;
    hysteresis_edges_device <<<dimGrid, dimBlock>>> (devPtrF, devPtrA, nx, ny, tmin, &changed);
} while (changed);

以下代码正如我所料,对我有用。事情是因为while循环中的cudaMemcpy占用了太多时间。有没有更简单,更省时的方法来做到这一点?例如cudaMemset()?

注意:此代码用于图像处理。

bool *devPtrBool;
cudaMalloc((void**)&devPtrBool, sizeof(bool));
bool changed;

do {
    changed = false;
    cudaMemcpy(devPtrBool, &changed, sizeof(bool), cudaMemcpyHostToDevice);
    hysteresis_edges_device <<<dimGrid, dimBlock>>> (devPtrF, devPtrA, nx, ny, tmin, devPtrBool);
    cudaMemcpy(&changed, devPtrBool, sizeof(bool), cudaMemcpyDeviceToHost);
} while (changed);

1 个答案:

答案 0 :(得分:-1)

我认为在循环之前只需要一次HtoD拷贝,因此在运行循环时可以避免第一次cudaMemcpy调用。 另外我可以建议将循环置于CUDA内核中,但是你没有为内核提供代码。