2016-11-05 8 views
1

vector[index]에 특정 인덱스에 대한 128 비트 메모리 정렬이 있다는 것을 컴파일러에 알릴 수 있습니까?인덱스에서 배열의 메모리 정렬

또는 색인으로 처리 할 수 ​​없으며 포인터로 처리해야합니까?

+0

내가 컴파일러는 것을 알 것이라고 생각 AVX 2K에 대한 희망을 표시하는 것 자체 배열의 데이터 형식을보고 –

+0

기본 정렬보다 정렬 (즉,'alignof (std :: max_align_t)'는 항상 구현에 달려 있습니다.) 즉, C++ 17은 더 나은 지원을 추가합니다 확장 정렬을 위해 * type *을 정렬하는 한 요소도 마찬가지입니다. 반면에 유형이 작고 일부 * 요소가 정렬되기를 원한다면 a) 타입 시스템을 이용하기 위해 코드를 재 설계해야하며, b) 아마도 수동 코드를 작성해야 할 것입니다. –

+0

@ Naana Osaberima : 128 비트 요소의 벡터를 사용한다는 것을 의미합니까? 그런 다음, 컴파일러에게 0 번째 요소가 정렬되었다고 "알릴 수있는"경우 컴파일러는 모든 요소가 정렬되었음을 알 수 있습니까? 흠. 그렇게하는 방법? –

답변

1

나는 희귀 한 질문에 대답 할 수 있습니다. 그러나 혼합 된 언어가 도움이됩니다.

생각 (들) ICC 같은 것이있는 경우가

!DIR$ ASSUME_ALIGNED :64 :: A 

또한 컴파일러되어있다 ifort 그/그런

#pragma assume aligned : 64 ::A 

, 또는 뭔가 ...에 요구하고있다 배열 정렬을위한 스위치이며, 모두 메모리 전송을 돕는 것입니다. Ifind는 좋은 습관입니다.

https://software.intel.com/en-us/node/522571

그대는 제온 피와 AXV-512의 인텔 웹 세미나에서이 잔뜩입니다, 그래서 gcc가 상당이 있다고 가정합니다. 그냥 128를 건너 뛰고 당신은 AVX 512 준비 후 512 (64 바이트)로 이동)

하나가 256에 갈 수 있다는 사실은

+0

나는 Mrs 신발을 벽장의 한쪽에서 다른쪽으로 옮기는 비유를 원합니다. 왼손잡이 (또는 왼발) 신발 A가 상자 1에 있고 오른쪽 ShoeA가 왼손 신발 B가있는 box2 인 경우, 결국 신발을 좌우로 움직일 때 각 신발의 왼쪽과 오른쪽을 포함하는 상자로 신발을 가져와야합니다 벽장. 편집 및 실행/설정 중에 상자와 정렬하면 훨씬 쉽습니다. 하나의 신발 만 가지고 있다면 Ms Marcos 크기의 컬렉션만큼 걱정할 필요가 없습니다. 대용량 SIMD의 경우 약간의 차이가 있습니다. – Holmz