Портативный способ доступа к массиву bool (C ++ 11) из Nvidia PTX

Мне нужно делать вычисления GPU на логическом массиве bool[] (обратите внимание, не std::vector<bool>), который был создан в памяти процессора (с кодом C ++ 11) и затем скопирован в GPU через cuMemCpy или похожие.

Первый вопрос:

sizeof(bool) сообщает 1 байт. Это гарантировано стандартом C ++ 11?

Второй вопрос:

Является true (false) всегда представлен как 1 (0) (в unsigned char представление) или у компилятора есть свобода здесь? (При желании можно использовать любое ненулевое целое число меньше 256)

Третий вопрос (специфичный для PTX):

В PTX логические операции or, xorи т. д. работают только для типов больше 8 бит. То есть я могу делать логические операции на unsigned int с or.u32 <out>,<in1>,<in2>, Однако начиная с C ++ 11 bool тип, кажется, 8 бит это значит, я не могу работать с массивом bools который был скопирован непосредственно из процессора в память графического процессора и, следовательно, мне нужно преобразовать массив bools сначала в некоторый тип PTX могут работать логические операции, т.е. u32, u16, так далее.?

5

Решение

Первый ответ:

Нет, это не гарантировано. Увидеть [expr.sizeof]/1и соответствующая сноска:

… sizeof (char), sizeof (подписанный char) и sizeof (unsigned char) равны 1. Результат sizeof, примененного к любому другому фундаментальному типу (3.9.1), определяется реализацией. [Примечание: в частности, sizeof (bool), sizeof (char16_t), sizeof (char32_t) и sizeof (wchar_t) определяются реализацией75. …

75) sizeof (bool) не обязательно должен быть 1.


Второй ответ:

Я уверен, что представление значения для bool Объекты определены реализацией, но я не могу найти ничего, явно заявляющего об этом. Самое близкое, что я могу получить, это [basic.types]/4:

… Для тривиально копируемых типов представление значения — это набор битов в представлении объекта, который определяет значение, которое является одним дискретным элементом набора значений, определенного реализацией.


Третий ответ:

Я не знаю, но из вашего описания, похоже, вам придется изменить типы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]