是否可以在OpenACC區域中使用bitset的功能? 一個例子的代碼:我可以在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) {...}
如果我編譯上面pgc++ -fast -acc -Minfo=accel -ta=nvidia:managed -DNDEBUG -pgc++libs -g
和同類者(LD_LIBRARY_PATH = /選擇/ PGI/linux86-64/lib中)的代碼,我得到以下錯誤: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.
我使用mystrcmp,因爲內置strcmp需要routine seq
,但根據我所知,這是不可能解決的。
但是,如果vv.count()
被註釋掉,那麼編譯就是成功。
我讀了很多關於OpenACC和OpenACC的問題,但我沒有找到相應的迴應。
我該怎麼辦?
感謝您的回覆。我也想問一下,pgC++編譯器是否支持<<運算符來使用並行區域?因爲我不認爲。 – fokhagyma
二進制移位運算符應該正常工作。你有看到問題的例子嗎? –
好的。我問了一個錯誤的問題。 <<像我認爲的重載操作符。例如:std :: string str =「something」; #pragma acc kernels for(unsigned short int count = 1; count <= size; count ++){std :: cout << str;然後編譯器需要例程信息。 – fokhagyma