Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

CUDA: Ошибка при компиляции программы

#c #cuda #cpp

                    
Доброго времени суток!
Прошу помочь. Компиляция программы не проходит из-за ошибок типа "identifier is undefined
in device code".  Пояснение по программе: есть реализация AES от Брайена Гладмана (Brian
Gladman, Worcester, UK), которую я хочу использовать в своей cuda-программе.  Ошибка,
мешающая компиляции, возникает при использовании макроса в коде Брайена. Например,
в строчке:
ke8(cx->ks, 0); ke8(cx->ks, 1);

ke8 - это макрос, его код:
#define ke8(k,i) \
{ kef8(k,i); \
    k[8*(i)+12] = ss[4] ^= ls_box(ss[3],0); \
    k[8*(i)+13] = ss[5] ^= ss[4]; \
    k[8*(i)+14] = ss[6] ^= ss[5]; \
    k[8*(i)+15] = ss[7] ^= ss[6]; \
}

Насколько я понял, такая ошибка связана с макросами, и во время компиляции он не
определяется cuda-устройством. Хотя, буквально 2-мя строчками выше "ke8(cx->ks, i);"
работает без нареканий, а ведь там тоже работает тот же самый макрос. Гугль-поиск решения
этой проблемы не дал.
Из-за чего может возникать ошибка "identifier is undefined in device code", и как
её решить?    


Ответы

Ответ 1



Ошибка identifier is undefined in device code возникает в том случае, если идентификатор не определен. Поскольку, глядя на макрос, трудно сказать, во что он раскрывается, рекомендуется посмотреть на файл, полученный из исходника препроцессором. Для этого в C/C++/Preprocessor, выставить Generate Preprocessed File в YES. После компиляции посмотреть на код, оставшийся от макроса, и обратить внимание на те переменные, которые трактуются как необъявленные. Если их реально нет, значит, что-то не подключено (библиотека или заголовок).

Ответ 2



Вам нужно добавить директиву препроцессора GPU, в противном случае фиксированные поисковые таблици не определены в памяти устройства, а в памяти хоста и CUDA не может их найти.

Комментариев нет:

Отправить комментарий