Проблемы со структурами, CUDA C / C ++ и VS 2008 - PullRequest
1 голос
/ 23 ноября 2010

Привет ... я использую VS2008, программирую на CUDA C. У меня установлен и работает инструментарий 3.2.

Теперь моя проблема в том, что у меня есть файл с таким:

#ifndef _cuda_rng_cu_included_
#define _cuda_rng_cu_included_

#include <stdio.h>


static void HandleError( cudaError_t err,
                         const char *file,
                         int line ) {
    if (err != cudaSuccess) {
        printf( "%s in %s at line %d\n", cudaGetErrorString( err ),
                file, line );
        exit( EXIT_FAILURE );
    }
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))

//some other struct

Я получил этот код из книги CUDA на примере, поэтому он должен работать .. но когда я нажимаю build, я получаю эту ошибку (первую):

error C2065: 'cudaError_t' : undeclared identifier

, а затем добавляется цунами ошибок, например uint2 тип не найден и переменные не объявлены.

В чем может быть проблема?cudaError_t определено в $ (CUDA_PATH_V3_2) \ include, и этот путь находится в моем обязательном каталоге include.

Свойство файла установлено так: Tool: CUDA Runtime API

Я поместил этот #ifndef, потому что яЯ не разобрался, как работать с компоновщиком между обычным C ++ и CUDA C. Например, если у меня есть структура с CUDA C (__global__ и ` __device__) и некоторыми обычными методами.Если я назову этот файл .cu, то в обычном коде C ++, использующем эту структуру, будет напечатана ошибка, говорящая, что она не была объявлена.

Я попытался вручную включить driver_types.h и тонны других заголовков, нони один из них не найден компилятором.

Извините, если я не понял, я сонный.

Ответы [ 2 ]

3 голосов
/ 23 ноября 2010

Файлы с расширением .cu обрабатываются nvcc, который автоматически включает в себя специфичные для CUDA заголовки, так что типы CUDA объявляются.Когда вы называете это .c / .cpp, вам нужно включить соответствующий заголовок, чтобы получить типы.Поскольку вы используете API времени выполнения, попробуйте включить cuda_runtime_api.h.

Тот факт, что вы их не находите, говорит о том, что ваши пути не были установлены правильно.Попробуйте добавить $ (CUDA_PATH) \ include к путям включения (см. этот пост для более подробной информации).

Сказав это, здесь есть проблемы ...

Вам не нужно объявлять структуру (или класс) как __global__ или __device__, структура является просто типом, а тип является кроссплатформенным.Там, где вам нужны эти объявления, это место, где подразумевается хранилище, т.е. когда вы создаете экземпляр структуры или когда вы создаете код, который должен быть скомпилирован для устройства.

Если вы просто объявляете структуру, тогда вам следуетбыть в состоянии объявить его в заголовочном файле и включить его в файлы .cpp и .cu без проблем, а если нет, то непременно опубликуйте отдельный вопрос с более подробной информацией.

0 голосов
/ 23 ноября 2010

Правильно ли установлены пути включения? Это объясняет, почему компилятор не находит включаемые файлы.

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