버텍스 데이터를 32 바이트로 정렬하면 일부 그래픽 카드의 이점이 있다는 것을 읽었습니다.OpenGL - 버텍스 구조체를 32 바이트로 정렬합니까?
이 일반적으로 추가하는 작업 패딩 :
typedef struct {
float x, y, z;
int padding[5];
} Vertex;
하지만 궁금했다, 이것은 당신이 32 바이트 (malloc에 1 바이트로 정렬)으로 정렬 할 데이터를 할당해야 의미도합니까? 데이터를 가리키는 포인터가 32로 균등하게 나뉘는 것을 의미합니까? 그게 그렇게 중요한 건가? 소스 메모리가 정렬되어있는 경우
나는 plaftorm의 차이점을 벤치 마크해야한다고 덧붙이고 싶습니다. 버텍스 당 16 바이트는 아마도 정점 전용 버텍스에 좋은 선택 일 수 있지만, 패딩되지 않은 데이터 (2 개의 캐시 라인에 3 개의 꼭지점이 들어가는)가 더 빠르며 최소한의 메모리가 필요할 수도 있습니다. – rotoglup
@rotoglup : 아무 것도 측정을 뛰지 못합니다. 그러나 중간에 정점이 _2_ 캐시 라인에 대한 액세스를 필요로하기 때문에 3 verts/2 캐시 라인이 느린 구현을 보았습니다. – Bahbar
필자도 분명히 모든 것이 꼭지점의 액세스 패턴에 달려 있다고 가정합니다. 상대적 선형 순서로 액세스하는 경우 성능에 미치는 영향은 무시할 수 있습니다. 이 모든 경우에도 성능 병목 현상이 정점 액세스에 있어야합니다. P – rotoglup