問題タブ [icc]
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.
build - 構成オプションを介してiccでCMakeを使用する推奨方法は?
Intel コンパイラ icc (または icpc) を CMake ベースのプロジェクトで使用したいと考えています (Linux 上での価値があります)。もちろん、cmakeを呼び出すときにCXX変数をエクスポートできます。
これはうまくいきます。ただし、カスタムオプションを介してこの選択を利用できるようにしたいと思います。このために、カスタムオプションを解析します。
なので
CMAKE_CXX_COMPILER
いくつかのコンパイラフラグと一緒に設定します。これも機能しますが、重要な「しかし」があります。
また、icc でコンパイルするときにコードにオプション-ipo
(手続き間の最適化) を使用したいと思います。また、ビルド プロセス内で静的ライブラリをコンパイルする必要があります。これが機能するには、Intel のものを使用する必要がありますxiar
(また、xilink
私も推測します)。
cmake は実際にこのための特別なプロパティを提供しています
ただし、これは、コンパイラが環境変数を介して設定されている場合にのみ適切に機能するようです (その後、xiar が使用されます)。このプロパティを介してコンパイラを設定すると、CMAKE_CXX_COMPILER
無視されます。
これを行う別の方法はありますか?おすすめの方法は?または、少なくとも回避策ですか?
linux - AVX に最適化されたコードが Linux Redhat 5.6 で実行されない
Linux Redhat 5.6でicc v12.1を使用するためにAVXに最適化されたコードを生成しようとしているいくつかの簡単なテストコードがあります。コードは次のようになります。
そして、それを次のようにコンパイルします (ベクトル レポートには、ループがベクトル化されたことが示されています)。
コードを実行すると、次のエラーが表示されます。
プロセッサが AVX 対応であることは確かですが、Redhat 5.6 で AVX に問題がある人はいますか?
caching - 自動ベクトル化と sse を使用したデータ サイズ依存の高速化
Intel Compiler の自動ベクトル化と sse を使用して、一部のコードを高速化しようとしています。すべての計算は、一部の構造体 node_t を別の構造体 w_t (関数 tr() および gen_tr()) に変換することです。関数 gen_tr() をベクトル化しようとしても、何の効果もありません。
データ格納形式を変更する場合、各構造体コンポーネントが異なる浮動小数点数の配列に格納されている場合、自動ベクトル化はうまく機能します。関数 genv_tr() を参照してください。
ssev_tr と呼ばれる sse を使用する関数 (N は 4 で均等に分割する必要があります)。
変換.c:
コンパイル オプション: icc -O3 -Wall -W -vec-report6 transform.c -o transform
icc のバージョン - 12.1.2、OS - Fedora 16 x86_64、CPU - Intel Core2 Quad CPU Q8200。
次に、ステップ 64 で 16 から 3000 までのさまざまなサイズで実行します。スクリプトは次のとおりです。
ここでは、このスクリプト (size、gen_tr、genv_tr、ssev_tr) の作業結果の一部を、すべて 1 つの配列要素ごとに示しています。
ベクトル化されたバージョンの関数を使用すると、サイズが 1000 ほど大きく変化するのはなぜですか? キャッシュミスのせい?すべてのデータ範囲で同じ速度を保存することは可能ですか?
c - idbが関数を見つけることができません—ヒントはありますか?
idbが私の関数の1つにステップインできないことがわかりました。
cプログラム(main.c)を、別のモジュール(mod2)の別の関数(func2)にリンクするモジュール(mod1)に属するfortran90関数(func1)にリンクしています。構造はそのようなものです
main.c(c)---> func1からlib1.a(fortran)のmod1へ---> func2からlib2.a(fortran)のmod2へ
*問題は次のとおりです。idbを使用してfunc2にステップインできません。func1からfunc2にステップインしようとすると、デバッガーはfunc1の次の行に移動します。fortranモジュールにステップインできないことがわかっているので、gdbを使用しませんでしたか?
次のフラグを使用してIntel11.1でコンパイルしています。
どうしたらいいかわからない、ヒントをいただければ幸いです
Edit:IIは、lib1.aを使用せずにlib2.aを直接呼び出す単純なFortran90プログラムを作成しました。idbもlib2.aにステップインできないことがわかりました。
私は次のようにライブラリをコンパイルします
何が問題になっているのかわかりません。通常、そのようなライブラリをコンパイルすると、デバッガーが機能します。
何か案が?
c++ - gcc stdlib を使用した icpc C++11
私は icpc (非オプション) を使用しており、-std=c++0x でコンパイルしているので、ランバを使用できます。
ただし、そうすると、一方がサポートしていて他方がサポートしていない機能を備えた gcc stdlib で havok が作成されます。
定義してみました
しかし、それは役に立ちませんでした。
したがって、理想的には、C++03 stdlib で c++0x 言語機能を使用できるようにすることを求めています。
gcc 4.6
ICC 12.1]
エラーの編集例:
gcc - iccでgccインラインアセンブリを使用するには?
gccインラインアセンブリスタイルのインラインアセンブリを使用した次のCコードがあります
icc でコンパイルしたいのですが、コンパイル時にエラーが発生します。
問題を解決するには?ありがとうございました。
c - コンパイラによって定義されたプリプロセッサ マクロのリストを生成します
gcc と gfortran を使用すると、コンパイラによって定義されたプリプロセッサ マクロのリストを生成できます (ouah の回答を反映するように編集されています)。
と
それぞれ (少なくとも Linux では)。
Intel コンパイラの icc と ifort で同じことを行うにはどうすればよいですか? ifort の場合、これらのマクロがここで定義されていることは知っていますが、使用中の正確なマクロとその値は使用するコンパイラ オプションに依存するため、このリストを自分で生成できるようにしたいと考えています。また、 predefプロジェクトについても認識しています。
c++ - 次のコードの ISO C++ 標準準拠の結果
上記のコードの正しい答えを得るために必要なルール (テンプレートに関連するオーバーロードとオーバーライド、インテグラル プロモーションなど) について説明していただけますか? 有効ですか?ルールが長すぎる場合は、参考文献を提供してください。最新のコンパイラは、正しい結果について意見が分かれています。gcc-4.6 と icpc-12.1.0 は「11」が正解だと主張していますが、VS2010 はd << c;
あいまいさのためにコンパイルを拒否しますが、 d.operator<<( c );
. 後者は1
iircを出力します。では、誰が正しくて誰が間違っているのでしょうか?
c - main.c が pthread を使用していないのに、main.c コンパイルで明示的に pthread にリンクする必要があるのはなぜですか?
Linux には、pthreads を使用する共有ライブラリと、それを使用しない main.c があります。
libpthread.so は共有ライブラリの ldd に表示されますが、これは正しいです。
しかし、pthreads を使用しない main.c をコンパイルして、使用する共有ライブラリにリンクすると、次のように表示されます。
-lpthread をコンパイル コマンドに追加します。つまり、
未定義の参照を解決します。
main.c で libpthread が使用されておらず、共有ライブラリにすでに libpthread がリンクされている場合、明示的に libpthread にリンクする必要があるのはなぜですか?