이상한 동작을보고 있으며 Intel Xeon Phi와 관련이 있는지 알고 싶습니다.Intel MIC와의 메모리 전송 오버 헤드
나는 근본적으로 모두가 알고있는 행렬 곱셈 (세 개의 중첩 된 루프)을 가지고 있습니다. 계산을 OpenMP 4.0 target
pragma가있는 Intel MIC로 오프로드하고 map(to:A,B)
map(tofrom:C)
으로 세 행렬을 매핑합니다.
이제 제가 관찰 한 것은 작은 행렬에 대한 것입니다. 1024x1024 메모리 전송이 매우 오래 걸렸습니다. 네이티브 버전 (동일한 코드, 동일한 병렬화 전략, 오프 로딩 없음)과 비교할 때 오프로드 버전은 약 320ms 더 많은 시간을 소비합니다. 초기화 오버 헤드를 제거하기 위해 워밍업 코드를 실행했습니다.
Nvidia Tesla K20과 비교하면 같은 양의 메모리가 복사되지 않고 복사되는 것에 비해이 320ms는 매우 나쁩니다.
메모리 전송 속도를 향상시킬 수있는 환경 설정이 있습니까?
추가 질문 : OFFLOAD_REPORT 환경 변수를 통해 오프로드보고 기능을 활성화했습니다.
[Offload] [HOST] [Tag 5] [CPU Time] 26.995279(seconds)
[Offload] [MIC 0] [Tag 5] [CPU->MIC Data] 3221225480 (bytes)
[Offload] [MIC 0] [Tag 5] [MIC Time] 16.859548(seconds)
[Offload] [MIC 0] [Tag 5] [MIC->CPU Data] 1073741824 (bytes)
MIC 시간 (메모리 전송?) 잘
세 번째 질문에없는 그 십초 무엇 : 보고서에 표시된 두 타이밍 결과의 차이점은 무엇입니까. Intel MIC에서 고정 메모리를 사용할 수 있습니까? 그렇다면 어떻게?
실제로 메모리 할당이 문제입니다. 그들은 메모리 전송에 비해 매우 오래 필요합니다. 이 할당 오버 헤드를 줄이는 방법이 있습니까? Additionaly, 당신은 왜 프리스트 장소에서 발생하는지 설명 할 수 있습니까? –