首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态并行错误: LNK2001

动态并行错误: LNK2001
EN

Stack Overflow用户
提问于 2013-10-18 16:37:07
回答 2查看 1.5K关注 0票数 0

好的,我已经从Python转到了C++ in VS2012,以便再次启动这个项目。我遇到了很多障碍和头痛来了解这个问题的来龙去脉。这是我最新的,最令人沮丧的一个,以及它的编译错误。

代码语言:javascript
复制
1>  C:\Users\Karsten Chu\New Google Drive\Research\Visual Studio 2012\Projects\Dynamic Parallelism Test\Dynamic Parallelism Test>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe" -dlink -o "x64\Debug\Dynamic Parallelism Test.device-link.obj" -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\lib\x64" cuda.lib cudart.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib -lcudadevrt  -gencode=arch=compute_35,code=sm_35 -G --machine 64 "x64\Debug\CUDA Test 2.cu.obj" "x64\Debug\CUDA Test.cu.obj" 
1>Dynamic Parallelism Test.device-link.obj : error LNK2001: unresolved external symbol __fatbinwrap_54_tmpxft_00000634_00000000_8_cuda_device_runtime_cpp1_ii_5f6993ef
1>C:\Users\Karsten Chu\New Google Drive\Research\Visual Studio 2012\Projects\Dynamic Parallelism Test\x64\Debug\Dynamic Parallelism Test.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

还有我的密码。

代码语言:javascript
复制
#include <cuda.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
#include <stdio.h>
#include <iostream>
using namespace std;

__global__ void rkf5(double*, int*);
__global__ void k1(double*);

int main2(int argc, char** argv)
{
    const int max_length = 5;
    double concs[max_length];
    for (int i=0; i<max_length; i++)
    {
        concs[i]=0;
        //std::cout<<concs[i];
    }

    double *d_concs;
    int *d_max_length;
    size_t size_concs = sizeof(concs);
    size_t size_max_length = sizeof(max_length);
    cudaMalloc((void**)&d_concs, size_concs);
    cudaMemcpy(d_concs, concs, size_concs, cudaMemcpyHostToDevice);
    cudaMalloc((void**)&d_max_length, size_max_length);
    cudaMemcpy(d_concs, concs, size_concs, cudaMemcpyHostToDevice);
    rkf5<<<1,max_length>>>(d_concs, d_max_length);
    cudaMemcpy(concs, d_concs, size_concs, cudaMemcpyDeviceToHost);

    for (int i=0; i<max_length; i++)
    {
        std::cout<<concs[i];
    }
    return 0;
}

__global__ void rkf5(double* concs, int* max_length)
{
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    concs[idx]=idx;
    //dim3 threads = dim3(max_length);
    k1<<< 1, *max_length >>>(concs);
}
__global__ void k1(double* concs)
{
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    concs[idx]=0;
}

请帮帮我,我花了那么多时间搜索这个问题,我发现的每一个线索都没有发布任何解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 16:51:38

用于编译和链接的命令行:

代码语言:javascript
复制
nvcc.exe -dlink -o "x64\Debug\Dynamic Parallelism Test.device-link.obj" 
-Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " 
-L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\lib\x64" 
cuda.lib cudart.lib kernel32.lib user32.lib gdi32.lib winspool.lib  
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib -lcudadevrt -gencode=arch=compute_35,code=sm_35 -G 
--machine 64 "x64\Debug\CUDA Test 2.cu.obj" "x64\Debug\CUDA Test.cu.obj"

您正在尝试链接到cudadevrt样式(-lcudadevrt)。这将不适用于windows,被调用的链接器是form。将cudadevrt.lib添加到链接器输入中,比如cudart.lib

票数 3
EN

Stack Overflow用户

发布于 2013-10-18 16:56:57

我已经成功地编译并运行了您的代码:

  1. 在Visual 2010中使用CUDA动态并行中使用该程序;
  2. main2改为main

程序输出0123 :-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19454712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档