2017-12-07 22 views
0

CUDA는 정렬되지 않은로드 및 저장을 지원합니까? addr % k! = 0과 같이 주소 addr에서 크기 k 바이트의 (단일) 값을 순진하게 읽을 수 있습니까?CUDA에서 정렬되지 않은로드 및 저장소를 만들 수 있습니까?

unsigned* p = (unsigned*) ((char *) my_aligned_ptr + 1); *p = 0xAABBCCDD; 

또는

unsigned* q = (unsigned*) ((char *) my_aligned_ptr + 11); unsigned x = *q; 

이 예상 효과를 : 같은

보다 구체적으로, 액세스 것인가?

+3

지금 삭제 된 답변에 링크 된 문서가이 질문에 이미 대답했습니다. 그것은 할 수 없습니다. 단순히 코드를 시도했다면'cuda-memcheck'가 잘못 정렬 된 오류를보고합니다. 그래서 그것은 당신이 어떻게 읽었는지 또는 당신이 문서를 읽었는지에 관계없이 그것이 작동하지 않는다는 더 많은 증거입니다. 내 대답은 아니오 야. 포인터의 역 참조는 포인터에 대해 자연스럽게 정렬 된 경계에서 발생하는 것으로 예상되며, 프로그래머는이를 방지하기 위해 책임을집니다. 그리고 두 번째 예에서는'unsigned x = * q; '라고 가정합니다. –

+3

누군가이 제한 사항을 해결해야하는 경우에 [예제 코드] (https://stackoverflow.com/a/40198552)를주었습니다./1662425) 비슷한 질문. – tera

답변

1

CUDA 프로그래밍 가이드의 Size and Alignment Requirement subsection이 약간 모호하지만 답변은 입니다. 정렬되지 않은 액세스는 기간을 지원하지 않습니다. 코드가 컴파일되지만 인접 정렬 주소가 사용 된 것처럼 결과가 표시됩니다. 그렇지 않으면 정의되지 않음.

@tera는 this answer에 코드를 가지고 있습니다.