我的目标是做这样的事情:
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);
答案 0 :(得分:-1)
我认为在循环之前只需要一次HtoD拷贝,因此在运行循环时可以避免第一次cudaMemcpy调用。 另外我可以建议将循环置于CUDA内核中,但是你没有为内核提供代码。