В моем коде я использую структуры, чтобы облегчить передачу аргументов функциям (я не использую массивы структур, а вместо них структуры массивов вообще). Когда я нахожусь в cuda-gdb, и я исследую точку в ядре, где я даю значения простой структуре, например
struct pt{
int i;
int j;
int k;
}
хотя я не делаю ничего сложного и очевидно, что члены должны иметь назначенные значения, я получаю...
Отвечая на вопрос о позиции 0 стека, в стеке есть только 0 элементов.
Итак, я думаю, что хотя это не массив, возможно, есть проблема с выравниванием памяти в этой точке. Поэтому я изменяю определение в файле заголовка на
struct __align__(16) pt{
int i;
int j;
int k;
}
но затем, когда компилятор пытается скомпилировать файлы хост-кода, которые используют одни и те же определения, появляется следующая ошибка:
error: ожидаемый неквалифицированный идентификатор перед числовой постоянной ошибкой: ожидается ') До числовой постоянной ошибки: ожидаемый конструктор, деструктор, или преобразование типа до '; Маркер
Итак, я должен иметь два разных определения для структур хоста и устройства???
Далее я хотел бы спросить, как обобщить логику выравнивания. Я не компьютерный ученый, поэтому два примера в руководстве по программированию не помогают мне получить большую картину.
Например, как должны быть выровнены следующие два? или, как должна быть выровнена структура с 6 поплавками? или 4 целых числа? опять же, я не использую массивы тех, но все же я определяю множество переменных с этими структурами в ядрах или _ функции _ _.
struct {
int a;
int b;
int c;
int d;
float* el;
} ;
struct {
int a;
int b
int c
int d
float* i;
float* j;
float* k;
} ;
Заранее благодарю за любые советы и подсказки