Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake CUDA编译的一个奇怪问题_Cmake_Compilation_Cuda - Fatal编程技术网

Cmake CUDA编译的一个奇怪问题

Cmake CUDA编译的一个奇怪问题,cmake,compilation,cuda,Cmake,Compilation,Cuda,该项目由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"

该项目由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();
}
//kernel.h
#布拉格语一次
void run_kernel();
//kernel.cu
#包括“kernel.h”
#包括
#包括
#包括“设备启动参数.h”
#包括
__全局无效内核1()
{
printf(“内核1\n”);
}
__全局无效内核2()
{
printf(“内核2\n”);
}
void run_kernel()
{
内核1();
cudaDeviceSynchronize();
}
上面的代码应该在CMD窗口中输出字符串kernel1,但它会输出kernel2

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

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


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

问题已经解决了

事实证明,这个项目使用了编译器优化选项:and/LTCG。 我删除了这些选项,一切都是正确的