저는 C++/OpenMP 코드로 구현 된 system을 사용하고 있으며, STL과 Eigen의 데이터 구조를 사용합니다. 알고리즘 적으로이 코드는 새로운 Intel MIC (Xeon Phi) 카드를 사용하여 가속화 할 수있는 훌륭한 후보자처럼 보입니다.인텔 MIC 오프로드 - STL과 어떻게 작동합니까?
코드의 전형적인 병렬 루프는 다음과 같습니다
#pragma omp parallel for private(i)
for (i = 0; i < n; ++i) {
computeIntensiveFunction(some_STL_or_eigen_container[i]);
위의 의사 코드는 합리적인 성능으로 실행하지만, 제온 파이 카드로의 일부를 오프로드하는 것이 좋을 것입니다. error: function "computeIntensiveFunction" called in offload region must have been declared with compatible "target" attribute.
이 같은 불만 STL 또는 Eigen을 포함 기능과 데이터 구조 나타나는 것 같다
#pragma offload target (mic) // <---- NEW
#pragma omp parallel for private(i)
for (i = 0; i < n; ++i) {
computeIntensiveFunction(some_STL_or_eigen_container[i]);
그러나, 인텔 ICC/ICPC 컴파일러는이 같은 오류를 뱉어 : 다음은이 일에 내 시도이다.
이 문제를 해결하는 방법에 대한 의견이 있으십니까?
Xeon Phi (CUDA 프로그래머 복구)를 처음 사용하기 때문에 "무엇이 오프로드 될 수 있습니까?"라는 경계를 완전히 이해하지 못했습니다. 소스에 정의 된
void __attribute__((target(mic))) computeIntensiveFunction(std::vector<sometype> myvar);
:
흠,'-offload-attribute-target = mic' 플래그가 해결책의 일부일 수도 있습니다. – solvingPuzzles