OpenCL поддельное битовое поле - PullRequest
1 голос
/ 17 января 2011

Это возможно ВСЕ? Я знаю, что OpenCL сейчас не поддерживает нормальные битовые поля.

Может ли быть способ получить определенные 64-битные значения из bool myBool [64] или что-то вроде

union newType{
    double value;
    bool bit[64];
};

или вообще что-нибудь, что может быть полезным? Мне бы хотелось иметь несколько статических битовых комбинаций для сравнения со значением и иметь возможность быстро манипулировать отдельными битами паттернов.

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Спецификация OpenCL гарантирует, что double будет 64-битным, и что вы можете переосмыслить его, используя as_long() или объединение, чтобы получить long, что составляет 64 бита.

Правильно интерпретировать 64-битный скаляр в нечто вроде char[8] или char8 (используя объединение и as_char8() соответственно), но результат определяется реализацией. Могут происходить такие вещи, как преобразование в порядок байтов, поэтому вам, возможно, придется остерегаться, если ваш GPU ведет себя иначе, чем ваш CPU в этом отношении.

Единственный переносимый способ выполнения битовых манипуляций на double состоит в использовании побитовых операторов в 64-битном скалярном целочисленном типе, что означает long или ulong.

1 голос
/ 17 января 2011

Да, это возможно.Используйте бинарные операторы для 64-битного типа int. Не уверен, что 64-битные значения являются действительными, поэтому просто создайте структуру с 2-мя типами и маской и сдвигайте по желанию.

Я предлагаю вам исследовать операторы & | ^ ~

...