간단한 MWE :유효하지 않은 주소를 프리 페치하면 어떻게됩니까?
int* ptr = (int*)malloc(64 * sizeof(int));
_mm_prefetch((const char*)(ptr + 64), _MM_HINT_0);
- 이 정의되거나 정의되지 않은 동작이 있습니까?
- 신호를 발생시키고 프로그램 실행을 중단 할 수 있습니까?
rbx
에 저장) 주소를 확인하지 않고 수행 컴파일러 생성 된 코드, 이러한 프리 페치를 볼 수 있기 때문에 내가 부탁 해요
: 모든
400e73: 49 83 c5 40 add r13,0x40
400e77: 62 f1 f9 08 28 03 vmovapd zmm0,ZMMWORD PTR [rbx]
400e7d: 4d 3b ec cmp r13,r12
400e80: 62 d1 f9 08 eb 4d ff vporq zmm1,zmm0,ZMMWORD PTR [r13-0x40]
400e87: 90 nop
400e88: 62 d1 78 08 29 4d ff vmovaps ZMMWORD PTR [r13-0x40],zmm1
400e8f: 72 03 jb 400e94 <main+0x244>
400e91: 49 89 c5 mov r13,rax
400e94: 62 f1 78 08 18 53 1d vprefetch1 [rbx+0x740]
400e9b: ff c1 inc ecx
400e9d: 62 f1 78 08 18 4b 02 vprefetch0 [rbx+0x80]
400ea4: 48 83 c3 40 add rbx,0x40
400ea8: 81 f9 00 00 10 00 cmp ecx,0x100000
400eae: 72 c3 jb 400e73 <main+0x223>
설명서를 보셨습니까? – fuz
Intel Intrinsic Guide는 그것에 대해 아무 말도하지 않습니다. Intel Intrinsics Refernce도 아닙니다. Intel Xeon Phi 명령어 세트 참조 (분해 된 코드는 KNC 용으로 컴파일되었습니다). 내가 아는 한. 모든 프로그래머가 메모리에 대해 알아야 할 사항에 대해서만 설명했습니다. _ 프로그램은 _mm_prefetch 내장 함수를 프로그램의 모든 포인터에 사용할 수 있습니다. 대부분의 프로세서 (물론 모든 x86 및 x86-64 프로세서)는 유효하지 않은 포인터로 인한 오류를 무시하므로 프로그래머의 삶이 훨씬 쉬워집니다 ._ –
좋은 점. 이 질문을하기 전에 확인해 주셔서 감사합니다. 그러한 중요한 세부 사항이 문서화되지 않은 채 남아 있다는 것에 흥미 롭습니다! – fuz