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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C++11

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

C++

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

Q&A

解決済

2回答

689閲覧

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

m_yoko

総合スコア156

C++11

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

C++

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

0グッド

0クリップ

投稿2018/07/28 04:06

前提・実現したいこと

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ブログのコードを引用しています。

C++

1#include <iostream> 2#include <amp.h> 3using namespace concurrency; 4int main() 5{ 6 int v[11] = { 'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c' }; 7 8 array_view<int> av(11, v); 9 parallel_for_each(av.extent, [=](index<1> idx) restrict(amp) 10 { 11 av[idx] += 1; 12 }); 13 14 for (unsigned int i = 0; i < 11; i++) 15 std::cout << static_cast<char>(av[i]); 16}

試したこと

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

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

Visual Studio 2017 ver15.7.5

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

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

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


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

投稿2018/07/28 04:48

編集2018/07/28 05:21
catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m_yoko

2018/07/28 04:58

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

2018/07/28 05:14

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

2018/07/28 05:18

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

2018/07/28 05:24

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

2018/07/28 05:32

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

0

コマンドラインから、コンパイルしたら、普通にコンパイル/実行できましたが、、、。
(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 05:00

編集2018/07/28 05:07
pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m_yoko

2018/07/28 05:06

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

2018/07/28 05:10

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問