問題タブ [restrict-qualifier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 「restrict」が許可されていないというエラー メッセージが表示されるのはなぜですか?
私は CUDA カーネルを作成していて、__restrict__
いくつかのパラメーターを使用したいと考えています。エラーメッセージが表示されます:
"restrict" is not allowed
一部の変数タイプでは許可されていませんか? パラメータのいくつかの組み合わせについては?いくつかのコンパイラフラグが原因ですか? 私がイタズラしたから?
簡略化されたカーネル署名:
c - 「const restrict」ポインター引数をエイリアスすることは合法ですか?
dot_product
として宣言されている場合
でそれを呼び出すだろう
C99標準に従って、「未定義」になりますか?
編集
x
sizeof(float) * x_len
もちろん、メモリのバイトを指すポインターx_len
ですunsigned
。この質問はエイリアシングに関するものです。
c++ - restrict キーワードが C++ の一部ではないのはなぜですか?
タイトルがすべてを物語っています。restrict キーワードが C++ の一部ではないのはなぜですか? 私は C++ についてあまり知りませんが、これをブロックする理由をオンラインで見つけることができません。C++ 標準がこのキーワードを C と同じように使用すると、どんな恐ろしいことが起こるか知っている人はいますか? まったく必要ないだけですか?
詳細説明: それを使用することではありません。おそらく、このキーワードから一生何の利益も得られないでしょう。この質問は単なる好奇心に関するものです。restrict は C99 以降、つまり 15 年で C の一部になっているためです。
これも読んでください: 私は技術的な理由に興味があります。
c++ - restrict キーワードを使用して、関数の「型修飾子」警告を取り除きます
次の形式の Blitz++ をコンパイルするときに表示される警告をクリーンアップしようとしています。
TinyVector
このような(クラスの)メンバー関数から
私が知る限り、restrict
キーワードが原因で警告が表示されます。注:restrict
を__restrict__
(g++ が理解する) に置き換えるマクロがあります。
キーワードを削除することで、警告を取り除くことができます。ただし、これは高性能の数値ライブラリであると想定されているため、restrict
キーワードが許可するコンパイラの最適化を失いたくありません。
restrict
を完全に削除せずにこれらの警告を抑制するにはどうすればよい-Wall
ですか?
c++ - 戻り値に適用された制限修飾子が効果を発揮するのはどのような場合ですか?
次のように宣言されたメンバー関数がある場合:
restrict キーワードで何かできますか?
どうやら、g++ (x86 アーキテクチャ) ではできませんが、このタイプの構築が理にかなっていて、最適化されたマシンコード生成を可能にする他のコンパイラ/アーキテクチャはありますか?
Blitz ライブラリ (Blitz++) にはこのように宣言された多数の関数があり、実際に何かを行わない限り、誰かが入って restrict キーワードを追加しても意味がないので、私が質問しています。したがって、restrict
(コンパイラの警告を取り除くために) を削除する前に、コードをどのように悪用しているかを知りたいと思います。
c++ - 配列構文を使用した g++ および MSVC の __restrict
私はrestrict
、キーワード を使用して g++ および MSVC によって C++11 に実装されているように、使用するパフォーマンス クリティカルなライブラリを更新中です__restrict
。
次のような多くのルーチンと関数があります。
上記の例でf
は、引数を制限する必要があるルーチンです。残念ながら、私が知る限り、その構文を維持しながらこれを行うことは不可能です。さて、明らかにこれはポインターを使用して次のように書き直すことができます。
ここで失われたのは、a
とb
が配列であるというセマンティックな事実です (私は、単一値ポインターにはポインター表記を使用し、配列ポインターには配列表記を使用することを好みます)。説明的な引数名 (上では省略) は役に立ちますが、それだけです。
配列構文を使用して制限された変数を宣言することは、現時点ではこれらのコンパイラでは不可能であることを確認したいと思います。