Это часть моего файла заголовка aes_locl.h
:
.
.
# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
# define GETU32(p) SWAP(*((u32 *)(p)))
# define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
.
.
Теперь из файла .cu
я объявил функцию __ global__
и включил файл заголовка следующим образом:
#include "aes_locl.h"
.....
__global__ void cudaEncryptKern(u32* _Te0, u32* _Te1, u32* _Te2, u32* _Te3, unsigned char* in, u32* rdk, unsigned long* length)
{
u32 *rk = rdk;
u32 s0, s1, s2, s3, t0, t1, t2, t3;
s0 = GETU32(in + threadIdx.x*(i) ) ^ rk[0];
}
Это приводит меня к следующему сообщению об ошибке:
ошибка: вызов функции хоста из __ устройства __ / __ global__ функция разрешена только в режиме эмуляции устройства
У меня есть пример кода, где программист вызывает макрос именно таким образом.
Могу ли я назвать это так или это вообще невозможно?Если это не так, я буду признателен за некоторые советы о том, как лучше всего переписать макросы и назначить требуемое значение для S0
.
Заранее большое спасибо !!!