【问题标题】:assert() in CUDA 5.5CUDA 5.5 中的断言()
【发布时间】:2013-08-02 04:24:09
【问题描述】:

我刚刚从 CUDA 5.0 升级到 5.5,由于 assert() 的问题,我所有的 VS2012 CUDA 项目都停止了编译。为了重现这个问题,我在 VS 2012 中创建了一个新的 CUDA 5.5 项目,并直接从 Programming Guide 添加了代码,得到了同样的错误。

__global__ void testAssert(void)
{
    int is_one = 1;
    int should_be_one = 0;
    // This will have no effect
    assert(is_one);
    // This will halt kernel execution 
    assert(should_be_one);
}

这会产生以下编译器错误:

kernel.cu(22): error : calling a __host__ function("_wassert") from a __global__ function("testAssert") is not allowed

我有什么明显的遗漏吗?

【问题讨论】:

  • assert 是一个转换为_wassert() 的宏。我很惊讶它实际上在 CUDA 5 中工作。
  • 你包括assert.h 吗?对于编译问题,如果你发布一个完整的复制器,而不是仅仅一个代码片段,真的会更方便。即我可以复制、粘贴和编译的整个程序,无需添加任何内容或编辑任何内容。
  • @Pixelchemist:断言在 CUDA 中工作正常,请参阅 docs.nvidia.com/cuda/cuda-c-programming-guide/…

标签: cuda


【解决方案1】:

确保您包含assert.h,并确保您的目标是 sm_20 或更高版本。还要检查您是否包括 Windows 标头,如果您尝试不使用。

【讨论】:

  • 谢谢,问题出在代码生成设置上。我的 .vcxproj 文件中有以下内容:compute_20,sm_20;compute_30,sm_35 但由于某种原因,升级后它被忽略了。将其重置回相同的值有助于解决问题。
猜你喜欢
  • 2018-06-03
  • 2013-06-13
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2013-07-16
  • 2015-02-15
  • 2014-02-26
相关资源
最近更新 更多