CUDA C ++ Ошибка связи: неопределенная ссылка: threadIdx.x и blockDim.x - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь скомпилировать мой код, используя приложение CUDA for OpenGL. вот мой код.

#include <cuda_runtime.h>
#include <cuda_gl_interop.h>
#include <device_launch_parameters.h>

float t = 0.0f;   //timer
float3* device;   //pointer to memory on the device (GPU VRAM)
GLuint buffer;   //buffer

__global__ void demo(int * d_a)
{
    int a=blockDim.x * blockIdx.x + threadIdx.x;
}

Я получил ошибку

/usr/bin/ld: CMakeFiles/MatchSlide.dir/main.cpp.o: in function `demo(void*)':
main.cpp:33: undefined reference to `blockDim'
/usr/bin/ld: main.cpp:33: undefined reference to `blockIdx'
/usr/bin/ld: main.cpp:33: undefined reference to `threadIdx'

также в CMakeFile, я определил

# Look for Truetype && libpng
find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})

pkg_check_modules(PNG REQUIRED libpng)
include_directories(${PNG_INCLUDE_DIRS})
find_package(CUDA  REQUIRED)
include_directories("${CUDA_INCLUDE_DIRS}")

set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -lcurand -lglfw -lGLEW -lGLU -lGL -lglut -lfreetype -lpng -lpthread -lX11  -L/usr/local/cuda/lib64 -lcudart  -lcuda")
/**
 * User:Demo
 * Date: 30/4/20.
 * Sample Project
 */

// Headers

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include "Event.h"
#include "ResourceManager.h"
#include <cstdio>
#include <cstring>
#include <cuda_runtime.h>
#include <cuda_gl_interop.h>
#include <device_launch_parameters.h>

float t = 0.0f;   //timer
float3* device;   //pointer to memory on the device (GPU VRAM)
GLuint buffer;   //buffer


__global__ void rendering(float3 *output,float k)
{
    int a=blockDim.x * blockIdx.x + threadIdx.x;
}

, как вы можете видеть в мой код, я пытаюсь определить простую функцию потока для запуска моего кода. Но это генерирует ошибки, которые помогают мне понять, где я делаю ошибки в определении Cuda в моем приложении.

1 Ответ

0 голосов
/ 04 мая 2020

Пожалуйста, прочитайте здесь о поддерживаемых расширениях файлов nv cc. Если ваш исходный файл включает в себя и код хоста, и функции устройства, он больше не является простым исходным файлом C ++. Три решения, которые я могу придумать:

1 - Измените main.cpp на main.cu. Но если вы действительно не хотите менять main.cpp на main.cu (не уверен почему), рассмотрите следующие два варианта:

2 - включите ваше ядро ​​demo во вторичный файл с расширением cu,

3- Скомпилируйте файл .cpp как есть с параметром x cu, например:

nvcc main.cpp -x cu

, с помощью которого вы заставляете компилятор обрабатывать файл main.cpp как исходный файл CUDA, хотя расширение cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...