2013-03-31 4 views
2

저는 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); 

:

+1

흠,'-offload-attribute-target = mic' 플래그가 해결책의 일부일 수도 있습니다. – solvingPuzzles

답변

3

당신은 뭔가를해야합니다. 이것은 오프로드 영역에서 호출 될 수 있도록 사물의 MIC 측에서 기능을 정의합니다.

+1

왜 그런지 설명해 주시겠습니까? –

+0

이 기능은 사물의 마이크쪽에 정의됩니다. 이 함수가 없으면 정의되지 않은 함수를 호출 할 수 있습니다. – sssylvester

+0

멋지다. 답안의 일부가되어야한다. –