【问题标题】:A strange issue of CUDA compilingCUDA编译的一个奇怪问题
【发布时间】:2018-08-31 10:19:31
【问题描述】:

该项目由 CMake 构建并由 Visual Studio 2015 编译。 并使用 CUDA_ADD_LIBRARY 命令将 cuda 代码编译成 .lib 文件。

代码如下:

//kernel.h
#pragma once
void run_kernel();

//kernel.cu
#include "kernel.h"
#include <cuda.h>
#include <cuda_runtime.h>
#include "device_launch_parameters.h"
#include<stdio.h>

__global__ void kernel1()
{
    printf("kernel1\n");
}
__global__ void kernel2()
{
    printf("kernel2\n");
}

void run_kernel()
{
    kernel1 <<<1, 1>>>();
    cudaDeviceSynchronize();
}

上面的代码应该在CMD窗口中输出字符串kernel1,但实际上输出的是kernel2

这个奇怪的问题只出现在我当前的解决方案中,并且只出现在发布模式中。 我尝试了很多事情,包括重建项目、删除 Cmake 缓存以及将 cuda 代码组织为解决方案的单独项目。但它不断出现。

另外我也做了一些实验,发现问题可能是函数名无法区分。后面定义的函数可以覆盖首先定义的函数,只要它们的参数列表相同

整个解决方案包含大量代码和依赖项,无法有效共享。很抱歉这个问题很难为你重现,但我已经被这个问题困扰了好几天了。希望大家能给我一点关于这个问题的线索,也非常感谢在这个问题下看到或者写东西的大家。如果我进步了一点,我也会把它包括在问题中。

【问题讨论】:

    标签: cmake compilation cuda


    【解决方案1】:

    问题已解决。

    事实证明,这个项目使用了编译器优化选项:/GL(Whole Program Optimization) 和 /LTCG。 我删除了这些选项,一切都正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2013-09-15
      相关资源
      最近更新 更多