2014-06-14 2 views
3

페이지 경계에 num32의 데이터 섹션 (즉, 데이터)을 할당하는 방법이 있습니까?페이지 정렬 메모리를 numpy로 가져 오기

Intel 장치에서 PyOpenCL을 사용하고 있는데 CL_MEM_USE_HOST_PTR, they recommend을 사용하여 버퍼를 만들고 싶습니다. 데이터는 1) 페이지 정렬 및 2) 캐시 라인의 배수 크기 조정입니다. aligned malloc() in GCC?

+0

아니, NumPy와 순간에 할 수 없어,하지만 당신은 다른 곳에서 메모리를 할당 할 경우, 당신은 쉽게 NumPy와 배열에 그것을 포장 할 수있다. 아니면 allococate ... – seberg

+0

오버 할당 어떻게 캐시 라인 요구 사항의 여러을 충족시키는 방법을 참조하십시오,하지만 어떻게 정렬을 해결합니까? –

+0

@AlexRothberg with Cython을 사용하면 C에서하는 방법을 사용하여 충분히 할 수 있습니까? –

답변

1

내가 NumPy와이 시간에 메모리를 정렬하기 위해 명시 적 호출이 있는지 잘 모르는 것 같아요 :

은 할당 페이지 정렬 된 메모리의 C에서 다양한 방법, 예를 들어 볼 수있다. @Saulio Castro가 제안한 것처럼 Cython이 부족한이 일을 생각할 수있는 유일한 방법은 numpy 할당 또는 PyOpenCL API를 사용하여 "패딩"과 함께 적절한 메모리 할당을하는 것입니다.

64K 바이트의 배수로 정렬하려면 "패딩 된"버퍼를 만들어야합니다. 또한 배열에 할당 한 개별 데이터 구조 요소를 "pad"하여 4k 바이트 경계에 정렬되도록해야합니다. 이것은 numpy 데이터 유형으로 작성되었는지 여부 또는 numpy dtype을 사용하여 작성된 구조 여부와 상관없이 요소의 모양에 따라 다릅니다. dtype에 대한 API에는 "align"키워드가 있지만 this link의 토론을 토대로이 항목에주의해야합니다.

구조를 정렬하는 오래된 학교 트릭은 가장 큰 요소부터 시작하여 길 아래로 작업 한 다음 uint8을 "pad"하여 하나 또는 N 구조체가 정렬 경계를 채 웁니다. 너무 막연한 아니다

희망 ...