OpenCL에 버퍼로 복잡한 데이터 형식을 전달해야하며 (가능한 경우) 버퍼 정렬을 피하려고합니다.OpenCL에서 데이터 정렬 피하기
typedef struct
{
char a;
float2 position;
} s1;
typedef struct
{
char a;
float2 position;
char b;
} s2;
내가 이런 식으로 커널을 정의 : 오픈 CL에서
나는 그들에게 버퍼 캐스팅에 전달 된 데이터를 구별하기 위해이 개 구조를 사용할 필요가__kernel void
Foo(
__global const void* bufferData,
const int amountElements // in the buffer
)
{
// Now I cast to one of the structs depending on an extra value
__global s1* x = (__global s1*)bufferData;
}
을 그리고 그것은 잘 작동 버퍼에 전달 된 데이터를 정렬 할 때만.
질문 : 사용하는 방법이 있는가 _ 전달 데이터 속성 _ ((효율)) 또는 _ 속성 _ ((배열 1)) 피하기 위해 정렬 버퍼?
안녕하세요 @ mfa, 패딩을 사용할 수 없습니까? 버퍼에서 실제로 전달해야하는 것은 두 가지 유형의 노드가있는 트리이므로 작업이 조금 어려울 것입니다. 각 노드에 어떤 유형의 노드인지 나타내는 1 바이트를 전달합니다. – Michelle
정확히 무엇을하려고합니까? 나는 다른 제안으로 위의 업데이트를 만들었습니다. – mfa
GPU 메모리에 트리를 보내려고하지만 OpenCL에서 버퍼 및 프로그램 디자인에 많은주의를 기울여야하므로 패딩을 피하려고합니다.하지만 패딩이 그때 나는 그것을해야만한다. 패딩 작업을 수행하는 알고리즘을 만들려고했습니다. ** float3 **를 전달해야합니다. ** float2 **로 전달하면 OpenCL의 코드가 명확하지 않으므로 패딩을 수행하고 명확한 OpenCL의 코드를 선호합니다. 도움 주셔서 감사합니다. – Michelle