Могу ли я использовать функции std::bitset с OpenACC?

Можно ли использовать функции bitset в регионе OpenACC? Пример кода:

#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=/opt/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, но я не нашел соответствующего ответа на эту проблему.
Что я должен делать?

1 ответ

Решение

Нет, извините, но мы (PGI) не добавили поддержку времени выполнения для процедур "std::bitset". Поскольку это первый запрос, который я увидел для этой функции, я отправил новый RFE (TPR#23746) и отправил его нашим инженерам по компиляции, чтобы посмотреть, что мы можем сделать.

Другие вопросы по тегам