1

AT ALL이 가능합니까? OpenCL은 정상적인 비트 필드를 지원하지 않는다는 것을 알고 있습니다.OpenCL 가짜 비트 필드

는 부울 myBool에서 확실한 64 비트를 얻을 수있는 방법이있을 수 있습니다 [64] 또는 뭔가

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

또는 아무것도

처럼 모든 원격으로 도움이 될 수 관련? 가치와 비교하고 패턴의 단일 비트를 신속하게 조작 할 수있는 정적 비트 패턴을 갖고 싶습니다.

답변

2

double 64 비트 될 것이라고 및 64 비트 인 long를 얻을 수 as_long() 또는 조합을 사용하여 재 해석 할 수 있다는 OpenCL을 사양 보장을 조사 좋습니다.

char[8] 같은 것으로 64 비트 라 재 해석 또는 char8가 법적 (a 연합 as_char8() 각각 사용), 그러나 그 결과는 구현 정의된다. 엔디안 변환과 같은 일이 발생할 수 있으므로 GPU가 CPU와 다른 점이 있는지 조심해야합니다.

double에서 비트 조작을 수행하는 유일한 이식성있는 방법은 long 또는 ulong을 사용하여 64 비트 스칼라 정수 유형에서 비트 연산자를 사용하는 것입니다.

+0

이식성 ++ 많은 감사 =) –

1

예 가능합니다. 64 비트 int에 이진 연산자를 사용하십시오. 64 비트 int가 유효한지 확실하지 않으므로 2 int와 마스크로 구조체를 만들고 원하는대로 이동하십시오.

나는 당신이 운영자 &|^~

+0

감사합니다. will a 구조체 myStruct { char [8]; } 잘 작동합니까? –

+1

그래,하지만 endness 문제와 @ user57368 그/그녀의 대답 – EnabrenTane

+0

상태 어쩌면 내가 리틀 엔디안 커널과 빅 엔디안 커널 버전 응용 프로그램의 초기화 단계 또는 뭔가를 기반으로 할 수있어, 조심! –