1

コードをグラフィカルに高速化するために、PGC++ でコードを開発しています。

  • Eigen に依存する OpenBabel を使用しています。
  • #pragma acc kernel を使ってみた
  • #pragma acc ルーチンを使用してみました
  • 私のコンパイル コマンドは次のとおりです。 pranav/new_installed/lib/openbabel/main.cpp/home/pranav/new_installed/lib/libopenbabel.so"

次のエラーが表示されます

PGCC-S-0155 - 計算領域で呼び出されるプロシージャには、acc ルーチン情報が必要です: OpenBabel::OBMol::SetTorsion(OpenBabel::OBAtom *, OpenBabel::OBAtom *, OpenBabel::OBAtom *, OpenBabel::OBAtom *, double) (main.cpp: 66)
PGCC-S-0155 - アクセラレータ領域が無視されました。-Minfo メッセージ (main.cpp) を参照してください。
bondRot::two(std::vector>, OpenBabel::OBMol, int, OpenBabel::OBMol):
     11、「bondRot.h」を含める
           0、アクセラレータ領域は無視されます
          66、アクセラレータの制限: acc ルーチン情報なしで 'OpenBabel::OBMol::SetTorsion(OpenBabel::OBAtom *, OpenBabel::OBAtom *, OpenBabel::OBAtom *, OpenBabel::OBAtom *, double)' を呼び出す
PGCC/x86 Linux 15.10-0: コンパイルが重大なエラーで完了しました

注: 66 行目は「mol.SetTorsion(a[0],a[1],a[2],a[3],i*(3.14159265358979323846/180));」です。以下の貼り付けられたボードで。

このエラーを表示している私のコードは次のとおりです。

#pragma acc routine
public:bool two(vector<OBAtom *> a)
{
std::ostringstream bestanglei,bestanglej;
for(unsigned int i=0;i<=360;i=i+res)
{
    for(unsigned int j=0;j<=360;j=j+res)
    {
        mol.SetTorsion(a[0],a[1],a[2],a[3],i*(3.14159265358979323846/180));

        //cout<<i<<"\n";
    }
}
return true;
}

Googleでの一次検索から、これはmol(OBMolオブジェクト)の「後方依存」のために発生しているエラーであることがわかりました。誰かがそれに対する解決策を知っているなら、私を助けてください。

4

1 に答える 1