#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 не может их найти.
Комментариев нет:
Отправить комментарий