2017-02-05 1 views
3

OpenACC 영역에서 비트 세트의 기능을 사용할 수 있습니까? 예제 코드 : 나는 pgc++ -fast -acc -Minfo=accel -ta=nvidia:managed -DNDEBUG -pgc++libs -g 및 Similars 참조 (LD_LIBRARY_PATH =/옵션/PGI/linux86-64/lib 디렉토리)와 위의 코드를 컴파일 할 경우OpenACC에서 std :: bitset 함수를 사용할 수 있습니까?

#include <string.h> 
#include <bitset> 

#pragma acc routine seq 
int mystrcmp (const char *, const char *); 
int main(int argc, char** argv) 
{ 
    long sum = 3, i; 
    std::bitset<11> vv; 
    char *str; 
    char *str2; 

    #pragma acc parallel loop reduction(+:sum) 
    for(i = 0; i<5000000000; ++i) 
    { 
     sum +=i%2; 
     if(i == 1){ 
      mystrcmp(str, str2); 
      vv.count(); 
     } 
    } 
    return 0; 
} 
int mystrcmp (const char *s1, const char *s2) {...} 

, 나는 다음과 같은 오류 얻을 : PGCC-S-0155-PGI support procedure called within a compute region: __blt_pgi_popcountl (proba2.cpp: 1288) PGCC-S-0155-Accelerator region ignored; see -Minfo messages (proba2.cpp: 28) main: 28, Accelerator region ignored 1288, Accelerator restriction: unsupported call to support routine '__blt_pgi_popcountl' PGCC/x86 Linux 16.10-0: compilation completed with severe errors하지만 코드가 구성 1288보다 훨씬 적은 수의 줄이 있습니다.
내장 된 strcmp에 routine seq이 필요하기 때문에 mystrcmp를 사용합니다. 그러나 내 지식에 따르면 해결이 불가능합니다.
그러나 vv.count()이 주석 처리 된 경우 컴파일이 성공합니다.
OpenACC 및 OpenACC 문제를 많이 읽고 검색했지만이 문제에 대한 대응 방법을 찾지 못했습니다.
어떻게해야합니까?

답변

2

아니요, 죄송 합니다만, 우리는 (PGI) "std :: bitset"루틴에 대한 런타임 지원을 추가하지 않았습니다. 이것이이 기능에 대한 첫 번째 요청이기 때문에 새 RFE (TPR # 23746)를 제출하고 컴파일러 엔지니어에게 보내서 우리가 할 수있는 것을 확인했습니다.

+0

답장을 보내 주셔서 감사합니다. 또한 pgC++ 컴파일러가 << 연산자를 사용하여 병렬 영역을 사용할 수 있는지 묻고 싶습니다. 왜냐하면 나는 생각하지 않기 때문이다. – fokhagyma

+0

2 진 시프트 연산자가 올바르게 작동해야합니다. 보고있는 문제의 예가 있습니까? –

+0

오케이. 나는 틀린 질문을했다. << 오버로드 된 연산자처럼. 예 : std :: string str = "something"; #pragma acc kernels for (부호없는 짧은 int count = 1; count <= size; count ++) {std :: cout << str; } 그런 다음 컴파일러는 일상적인 정보가 필요합니다. – fokhagyma

관련 문제