Visual studio 2013 发布模式和调试模式之间的CUDA运行时差异

Visual studio 2013 发布模式和调试模式之间的CUDA运行时差异,visual-studio-2013,cuda,nvcc,Visual Studio 2013,Cuda,Nvcc,我正在运行Visual Studio 2013。 我正在运行CUDA 7.0.28 我可以通过选中或取消选中CUDA选项来切换运行时差异: 生成GPU调试信息 我让设备内核运行一个,即使在那个时候错误也会发生 我的问题是: 为什么在发布和调试模式下它会给我不同的结果 我应该寻找什么样的东西来尝试和追踪为什么会发生这种情况 有没有办法在内核函数中突破点?看来并非如此。除了制作printf语句外,我还可以使用什么方法来追踪问题 多谢各位 为什么在发布和调试模式下它会给我不同的结果 在调试模式下,CU

我正在运行Visual Studio 2013。 我正在运行CUDA 7.0.28

我可以通过选中或取消选中CUDA选项来切换运行时差异:

生成GPU调试信息

我让设备内核运行一个,即使在那个时候错误也会发生

我的问题是:

  • 为什么在发布和调试模式下它会给我不同的结果
  • 我应该寻找什么样的东西来尝试和追踪为什么会发生这种情况
  • 有没有办法在内核函数中突破点?看来并非如此。除了制作printf语句外,我还可以使用什么方法来追踪问题 多谢各位

    为什么在发布和调试模式下它会给我不同的结果

    在调试模式下,CUDA C/C++源代码生成的机器代码看起来会非常不同。这里列出的差异太长,无法涵盖,但大多数情况下,当所有编译器优化在调试模式下关闭时,都会对它们进行总结。这可能会导致竞争条件,例如,在调试中很明显,但在发布时却不明显,反之亦然

    我应该寻找什么样的东西来尝试和追踪为什么会发生这种情况

    我将从最简单的工具开始。首先使用cuda memcheck本身确认内核正在运行,而不会产生基本错误。如果cuda memcheck报告您的内核出现故障,请按照该方法将故障隔离到一行源代码中。在修复cuda memcheck以这种方式报告的任何错误后,使用cuda memcheck,包括racecheck、synccheck和initcheck,查看是否存在这些捕获问题

    有没有办法在内核函数中突破点

    是的,windows和linux上都有可用的调试器。在windows上,调试器集成到Visual Studio中。有很多视频、演练,甚至youtube视频演示如何执行各种操作,例如设置断点。然而,在使用
    cuda memcheck
    之前,我不会走这条路

    为什么在发布和调试模式下它会给我不同的结果

    在调试模式下,CUDA C/C++源代码生成的机器代码看起来会非常不同。这里列出的差异太长,无法涵盖,但大多数情况下,当所有编译器优化在调试模式下关闭时,都会对它们进行总结。这可能会导致竞争条件,例如,在调试中很明显,但在发布时却不明显,反之亦然

    我应该寻找什么样的东西来尝试和追踪为什么会发生这种情况

    我将从最简单的工具开始。首先使用cuda memcheck本身确认内核正在运行,而不会产生基本错误。如果cuda memcheck报告您的内核出现故障,请按照该方法将故障隔离到一行源代码中。在修复cuda memcheck以这种方式报告的任何错误后,使用cuda memcheck,包括racecheck、synccheck和initcheck,查看是否存在这些捕获问题

    有没有办法在内核函数中突破点

    是的,windows和linux上都有可用的调试器。在windows上,调试器集成到Visual Studio中。有很多视频、演练,甚至youtube视频演示如何执行各种操作,例如设置断点。然而,在使用
    cuda memcheck
    之前,我不会走这条路

    为什么在发布和调试模式下它会给我不同的结果

    在调试模式下,CUDA C/C++源代码生成的机器代码看起来会非常不同。这里列出的差异太长,无法涵盖,但大多数情况下,当所有编译器优化在调试模式下关闭时,都会对它们进行总结。这可能会导致竞争条件,例如,在调试中很明显,但在发布时却不明显,反之亦然

    我应该寻找什么样的东西来尝试和追踪为什么会发生这种情况

    我将从最简单的工具开始。首先使用cuda memcheck本身确认内核正在运行,而不会产生基本错误。如果cuda memcheck报告您的内核出现故障,请按照该方法将故障隔离到一行源代码中。在修复cuda memcheck以这种方式报告的任何错误后,使用cuda memcheck,包括racecheck、synccheck和initcheck,查看是否存在这些捕获问题

    有没有办法在内核函数中突破点

    是的,windows和linux上都有可用的调试器。在windows上,调试器集成到Visual Studio中。有很多视频、演练,甚至youtube视频演示如何执行各种操作,例如设置断点。然而,在使用
    cuda memcheck
    之前,我不会走这条路

    为什么在发布和调试模式下它会给我不同的结果

    在调试模式下,CUDA C/C++源代码生成的机器代码看起来会非常不同。这里列出的差异太长,无法涵盖,但大多数情况下,当所有编译器优化在调试模式下关闭时,都会对它们进行总结。这可能会导致竞争条件,例如,在调试中很明显,但在发布时却不明显,反之亦然

    我应该寻找什么样的东西来尝试和追踪为什么会发生这种情况

    我将从最简单的工具开始。首先使用cuda memcheck本身确认内核正在运行,而不会产生基本错误。如果cuda memcheck报告您的内核出现故障,请按照该方法将故障隔离到一行源代码中。在修复cuda memcheck以这种方式报告的任何错误后,使用cuda memcheck,包括racecheck、synccheck和initcheck,查看是否存在这些捕获问题

    有没有办法打破p