質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • C++

    3434questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • C++11

    108questions

    C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

  • C++14

    41questions

C++AMPのHelloWorldのコンパイルが通らない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 169

m_yoko

score 139

 前提・実現したいこと

C++AMPでプログラムを作成するために、まずはHelloWorldをやろうかと取り組んでいます。
MSブログからコードを引用しています。

 発生している問題・エラーメッセージ

コンパイルしようとすると以下のメッセージが出ます。

1>~\msvc\14.14.26428\include\amp.h(2616): error C3861: '_Access': 識別子が見つかりませんでした
1>~\msvc\14.14.26428\include\amp.h(2618): note: クラス テンプレート のメンバー関数 'int &Concurrency::array_view<int,1>::operator ()(const Concurrency::index<1> &) restrict(amp) const' のコンパイル中
1>~\msvc\14.14.26428\include\amp.h(2602): note: コンパイル対象の関数 テンプレート インスタンス化 'int &Concurrency::array_view<int,1>::operator ()(const Concurrency::index<1> &) restrict(amp) const' のリファレンスを確認してください
1>~\sample.cpp(9): note: コンパイル対象の クラス テンプレート インスタンス化 'Concurrency::array_view<int,1>' のリファレンスを確認してください
1>~\msvc\14.14.26428\include\amp.h(2616): error C3588: 'unknown-type' から 'void *' へのキャストは amp 制限コードでサポートされていません

 該当のソースコード

MSブログのコードを引用しています。

#include <iostream> 
#include <amp.h> 
using namespace concurrency;
int main()
{
    int v[11] = { 'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c' };

    array_view<int> av(11, v);
    parallel_for_each(av.extent, [=](index<1> idx) restrict(amp)
    {
        av[idx] += 1;
    });

    for (unsigned int i = 0; i < 11; i++)
        std::cout << static_cast<char>(av[i]);
}

 試したこと

av[idx] += 1;の部分をav[idx]にしてもコンパイルが通らないので、ここでキャスト(なぜキャストしてるのかもよくわからないですが)がうまくいっていないものだと思います。

 補足情報(FW/ツールのバージョンなど)

Visual Studio 2017 ver15.7.5

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

結論から言うと、コンパイラーのバグですね。

私も手元の環境(Visual Studio 2017)で試してみてエラーを確認しました。リンク先のブログの日付が2012年となっていることから、バージョンが関係しているのかと思い、試しにプロジェクトのプロパティの「プラットフォーム ツールセット」を「Visual Studio 2015 (v140)」に変更してみたところ、コンパイルが通り、実行もできました(Hello worldと表示)。

これだけ判りやすい問題ならすでに報告されていると思い、「フィードバックの送信→問題の報告」から「c++amp」で検索してみたら、「C++ AMP does not compile with /permissive-」という見出しですでに報告されていました。「調査中」とのことなので、いずれは解消されるとは思いますが……。


訂正
バグではなくて既定のオプションの変更による影響でした。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/28 13:58

    そうだったのですね。ありがとうございます。
    おかげで今日もぐっすり眠れそうです。

    キャンセル

  • 2018/07/28 14:14

    構成プロパティの準拠モードをいいえにすることで"/permissive-"が無効化されることを確認しました。VisualStudio2015をインストールするのも手間なのでこの副作用がないか確認しながらやってみます。
    ありがとうございます。

    キャンセル

  • 2018/07/28 14:18

    私もそれに気づいて書こうと思っていたところです。前のバージョンではそのオプションが既定で「いいえ」だったのが、15.5から「はい(/permissive-)」に変更されたようです。

    キャンセル

  • 2018/07/28 14:24

    多分ですが内部で使用しているキーワードが無効になっちゃうんですかね。準拠させたらそりゃそうっていったらそうなんですがモヤモヤします。

    キャンセル

  • 2018/07/28 14:32

    おそらくそういうことでしょうね。amp.hの中で何らかの拡張機能を使っていて、それが準拠していないと怒られた、といったところでしょう。必要があって/permissive-を既定で付けたはずですから、本来であればその上でも正しくコンパイルできないと困るのですけどね。明らかにテスト漏れですね。
    まぁ、これは要するに、C++AMPの利用者が少ないことの現れでしょうか(私も使ったことないです……)。

    キャンセル

+1

コマンドラインから、コンパイルしたら、普通にコンパイル/実行できましたが、、、。
(C4530 の警告はありました)

Visual Studioの環境は同じ (Ver.15.7.5)

上記の内容で、Test.cpp ファイルを作成し、Visual Stdio用のコマンドプロンプトから、 > cl test.cpp でコンパイル。
実行すると、 "Hello world" と出力。

あ、良く見るとは、リンカバージョンが、Version 14.14.26433.0 でしょうか。

コンパイルの失敗は、

error C3861: '_Access':  識別子が見つかりませんでした

をまず調べてでしょう。

[追記]
こちらを書いている最中に先行して、回答/解決済みになったようですね。
環境について追記です。
こちらの環境は、今月(7月)の更新済みバージョンとなります。(それで、リンカが違う?)
参考までに。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/28 14:06

    Visual StudioのIDE上ではエラーが出るみたいですね。
    コマンドプロンプト上ではコンパイルが可能で、実行可能なこともこちらで確認いたしました。
    リンカかなんかの設定なんですかね・・・。

    キャンセル

  • 2018/07/28 14:10

    ベストアンサーの回答をもとに調べてる最中ですが"/permissive-"が不具合を起こしているようで、これがIDE上だとデフォルトでコンパイラに渡されるみたいです。
    リンカの問題ではなかったでした。

    キャンセル

  • 2018/07/28 14:40

    こちらも確認しました。
    /permissive- オプションで違ってきますね。
    ついでですが、MSの日本語ページは見事な機械翻訳。
    <https://docs.microsoft.com/ja-jp/cpp/build/reference/permissive-standards-conformance>
    なんとなく意味は分かるのですが、、。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C++

    3434questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • C++11

    108questions

    C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

  • C++14

    41questions