WedX - журнал о программировании и компьютерных науках

использование необъявленного идентификатора temp

Приведенный ниже код С++ дает мне ошибку при использовании необъявленного идентификатора "temp"

/home/test/include/memory.h

#ifndef MEMORY_H
#define MEMORY_H

#if __ENABLE_MEMORY

__device__ int temp = 50;
extern "C" inline __device__ void* memory(){
     ...
     temp =  temp + 100;
     ...
}

#endif
#endif

/home/test/include/internal_memory.h

#ifndef INTERNAL_MEMORY_H
#define INTERNAL_MEMORY_H

#ifndef __ENABLE_MEMORY
#define __ENABLE_MEMORY 1
#endif

#if __ENABLE_MEMORY
extern "C" __device__ void* memory();
static inline __device__ void* call_memory(){ return memory();}
#endif

#include <memory.h> 
#endif

/home/test/main.cpp

 #include "internal_memory.h"
 ..
 .
 .
 void show(){
    std::cout << "temp is: " << temp << std::endl;
 }
 .
 .
 .

Я компилирую код с помощью clang++ версии 11.0.0.

clang --version выглядит следующим образом:

  clang version 11.0.0
  Target: x86_64-unknown-linux-gnu
  Thread model: posix
  InstalledDir: /opt/rocm/llvm/bin

Я компилирую код, как показано ниже.

  /opt/rocm/llvm/bin/clang++ -DDEBUG -D__x86_64__ -I/home/test/include -I/home/test -g -fPIC -std=c++14 -o main.o -c main.cpp

что мне здесь не хватает.

13.06.2020

Ответы:


1

Функция memory имеет квалификатор __device__ (я полагаю, вы компилируете программу CUDA).

memory относится к temp, глобальной переменной в памяти хоста. Вы, вероятно, хотите __device__ int temp = 50;

Чтобы запросить temp, вам нужно будет скопировать его значение обратно на хост. Вдоль линий

int host;
cudaMemcpy(&host, &temp, sizeof(int), cudaMemcpyDeviceToHost);
13.06.2020
  • Извините. я пропустил эту часть __ устройства __ .. отредактировал вопрос. это все еще дает мне ошибку. 13.06.2020
  • Вы не можете напрямую прочитать переменную __device__ из функции хоста show. Компилятор имеет право жаловаться на это. Во всех смыслах и целях подумайте, что части __device__ и части, не являющиеся __device__, находятся на разных машинах. 13.06.2020
  • Добавлен запрос. 13.06.2020
  • вы имеете в виду, что запрашивающая часть должна быть в шоу функций хоста. Эту часть я могу понять, поскольку части хоста и устройства различны. Но даже если я добавлю переменную int temp1, не являющуюся устройством, в тот же заголовок и попытаюсь получить к ней доступ в шоу, все равно я получаю сообщение об ошибке. Это странно. 13.06.2020
  • Это потому, что temp не объявлено в internal_memory.h. Вы включаете стандартное C include memory.h, когда вы намерены, вероятно, #include "memory.h". Между <memory.h> и "memory.h" есть небольшая, но очень важная разница в путях поиска. 13.06.2020
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]