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 문제를 많이 읽고 검색했지만이 문제에 대한 대응 방법을 찾지 못했습니다.
어떻게해야합니까?
답장을 보내 주셔서 감사합니다. 또한 pgC++ 컴파일러가 << 연산자를 사용하여 병렬 영역을 사용할 수 있는지 묻고 싶습니다. 왜냐하면 나는 생각하지 않기 때문이다. – fokhagyma
2 진 시프트 연산자가 올바르게 작동해야합니다. 보고있는 문제의 예가 있습니까? –
오케이. 나는 틀린 질문을했다. << 오버로드 된 연산자처럼. 예 : std :: string str = "something"; #pragma acc kernels for (부호없는 짧은 int count = 1; count <= size; count ++) {std :: cout << str; } 그런 다음 컴파일러는 일상적인 정보가 필요합니다. – fokhagyma