CUDA Academy · 课时

在 CPU 上验证结果

与参考答案进行比较

第 3 / 4 课13 个步骤

在 CPU 上验证结果 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。

先信任,再验证

内核能够运行且不崩溃,并不能证明它是正确的。您必须检查计算结果,因为隐蔽的逻辑错误很容易被忽略。🔍

计算参考结果

最简单的检查方法,是用一个普通的 CPU 循环执行相同的计算。这个参考结果就是您可信的标准答案。

for (int i = 0; i < n; i++)
    ref[i] = h_A[i] + h_B[i];

逐个元素进行比较

遍历两个数组,将 GPU 的每个结果与参考结果进行比较。遍历全部n个元素的一次循环,就能发现任何错误值。

for (int i = 0; i < n; i++)
    if (h_C[i] != ref[i]) { /* mismatch */ }

浮点数并不精确

对于浮点数,绝不要使用普通的相等比较。细微的舍入差异意味着您应该改用一个较小的容差进行比较。

if (fabs(h_C[i] - ref[i]) > 1e-5f) { /* fail */ }

为什么使用容差而不是相等比较

GPU 和 CPU 可能以不同的顺序进行舍入,因此结果可能会有极小差异。像 1e-5 这样的小epsilon可以吸收这种无害的噪声。

统计错误数量

不要在发现第一个不匹配时就退出,而是记录错误数量。了解有多少个元素失败,有助于判断错误的类型。

int errors = 0;
if (fabs(h_C[i] - ref[i]) > 1e-5f) errors++;

输出清晰的结论

最后输出一条明确且诚实的消息。一行清晰的PASS 或 FAIL结果,可以让您不必费力查看原始数组。

printf(errors == 0 ? "PASS\n" : "FAIL: %d\n", errors);

抽查边界元素

边界错误最容易出现在第一个和最后一个元素。打印C[0]和 C[n-1],可以在完整循环前快速进行合理性检查。

发现差一错误的线索

如果恰好只有最后一个元素错误,请怀疑边界计算。错误的块数量或保护条件经常会漏掉最后一个线程。

先验证,再优化

请务必在调速之前确认正确性。一个运行很快却返回错误答案的内核,比一个运行较慢但结果正确的内核更糟糕。

保留验证检查

开发期间请保留验证步骤。它就是您的回归测试,能够在您修改内核的瞬间发现错误。

快速检查

应该如何将 GPU 的浮点结果与 CPU 参考结果进行比较?

回顾

您已经验证了结果:使用 CPU参考结果、容差比较、错误计数,以及清晰的 PASS 或 FAIL 结论。始终把正确性放在第一位。✅

免费开始

用 AI 导师学习 C++ — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「在 CPU 上验证结果」课时是免费的吗?

是的 — 「在 CPU 上验证结果」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。

「在 CPU 上验证结果」这节课中我会学到什么?

与参考答案进行比较 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CUDA Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「在 CPU 上验证结果」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CUDA Academy 课中编写并运行代码吗?

能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 向量加法内核
  2. 连接主机端代码
  3. 在 CPU 上验证结果
  4. 测量您的首次加速效果
← 返回 CUDA Academy