問題タブ [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.
makefile - Intel Compiler で VLC2.0 をコンパイルする - __builtin_va_arg_pack の無効な使用
Ubuntu 11.10 で VLC2.0 をコンパイルしようとしていますが、このエラーに悩まされています。Intel の最新のコンパイラ スイートを使用して、contrib/ 内のすべての依存関係を既に正常にコンパイルしています。ただし、posix/filesystem.c をコンパイルするとエラーが発生します。
VLC の構成:-
makefile のいくつかのフラグを編集しました。関連するフラグは次のとおりです。
make 段階で、次のエラーが発生します。
オンラインで調べたところ、gcc でこのエラーを引き起こす最適化フラグ、特にインライン化に関連するフラグについて言及しているメーリング リストがいくつか見られました。その-ipo -finline -finline-limit=1000
ため、CFLAGS に追加しました。しかし、これは問題を解決していないようです。
誰でもこの問題を解決するのを手伝ってもらえますか?? filesystem.lo を手動でコンパイルするために、使用された正確なコンパイル コマンドを見つけようとしましたが、make
使用された正確なコマンドを出力する方法が見つかりませんmake -d
。私はなんとかfilesystem.cをコンパイルしましたが、libtoolオブジェクトファイルではなく、ELF 64ビット実行可能ファイルを作成しました...
どんな助けでも大歓迎です!
ps。VLC2 を icc でコンパイルしたいという理由で他の誰かがここにいる場合、私は musepack と libvpx に問題がありましたが、いくつかの Makefile の修正でそれが解決されました。リクエストに応じて、私の変更を喜んで共有します。
c - 特定の関数がインライン化されているかどうかを確認する - Intel コンパイラ
C/C++ バイナリ ライブラリ (*.dll、*.sys)、それらを構成する obj ファイル、およびそれらのシンボル (pdb) がありますが、ソース コードやマップ ファイルはありません。
シンボルによると、それらは Intel コンパイラ (Windows 用) によってビルドされました。
特定の関数がインライン化されているかどうかを確認する方法はありますか?
前もって感謝します。
c++ - GCC/G++ は成功するが、ポインターを制限する OpenMP は ICC で失敗する
乗算ループで暗黙的な openMP ディレクティブを使用して、 CRSでスパース行列の単純な行列ベクトル乗算を実装しました。
完全なコードは GitHub にあります: https://github.com/torbjoernk/openMP-Examples/blob/icc_gcc_problem/matxvec_sparse/matxvec_sparse.cpp
注: 醜いです ;-)
プライベート メモリと共有メモリを制御するために、restrict ポインターを使用しています。64 ビット Linux で GCC 4.6.3 を使用してコンパイルすると、正常に動作します (コマンド内の%u
とに関する 2 つの警告を除いて、それは問題ではありません)。unsigned int
printf
ただし、64 ビット Linux で ICC 12.1.0 を使用してコンパイルすると、次のエラーで失敗します。
問題の変数とポインタの定義で
そして、次のように定義された openMP ディレクティブ
g++ でコンパイル:
Icc でコンパイル:
- GCC/ICCの使い方の誤りでしょうか?
- これは私のコードの設計上の問題であり、未定義の動作を引き起こしていますか?
もしそうなら、どの行がそれを引き起こしていますか? - ICCとGCCの不一致ですか?
もしそうなら、コンパイラの独立性と互換性を達成するための良い方法は何でしょうか?
c - 数千のグループ化形式(アポストロフィ)でICCとprintfを使用した警告
数千のグループでいくつかの数値を表示する必要があります(この場合、区切り文字としてピリオドを使用します)。だから、私はその'
ようなことを達成するためにprintfフラグを使用しています。
gcc
すべてがうまくいきますが、を使用するとicc
、次の警告が表示されます。
警告#269:無効なフォーマット文字列変換
番号が実際に希望の形式で印刷されているという事実にもかかわらず。
たとえば、この単純なプログラムをコンパイルすると、次のようになります。
次に、この警告が表示されます。
すべてが期待どおりに機能するという事実にもかかわらず:
だから私の質問は:
- この警告をどのように抑制できますか?
- コンパイラを使用
'
して、printfやその仲間と一緒にフラグとして使用しても安全ですか?icc
更新:
269
警告を抑制するための奇妙なトリックは、フォーマットを使用して変数を定義し、その変数をprintf
:に渡すことであることに気づきました。
更新:
でアポストロフィを使用するprintf
のはXSI拡張機能であるため(@Daveで述べられているように)、コードの移植性を高めるには、C-FAQの質問12.11の推奨事項に従い、の実装を使用する方が便利な場合がありcommaprint
ます。
c++ - テンプレートを介して継承されたクラスから typedef された情報を抽出するにはどうすればよいですか?
テンプレートを介して継承されたクラスから typedef された情報を抽出することについて質問があります。私の質問を説明するために、次の簡単な例を考えてみましょう。
クラス C は、クラス (B1 または B2) をテンプレート パラメーターとして受け取ります。B1 と B2 の両方に、A と呼ばれるタイプ定義があります (それぞれクラス A1 と A2 です)。コンパイル時に、クラス C は、2 つの「A」クラスのどちらが「B」クラスによって使用されているかを把握できる必要があります。g++ でコンパイルすると、上記のコードは完全に機能します。ただし、Intel の icpc でコンパイルすると、次のエラーが発生します。
同様の効果を達成する別の方法はありますか?もちろん、私の実際のコードはもっと複雑で、クラスをこのように構成したい理由があります。g++ ではなく icpc でコンパイルしたい理由もあります。
前もって感謝します。カール
c++ - 三角行列変換と自動並列化
私はICC(11.1;古いですが、それについては何もできません)で自動並列化を少し試していますが、単純なガウス除去のためにコンパイラが内部ループを並列化できないのはなぜだろうかと思っています:
プライベート行 (および列) 変数に依存する配列にのみ書き込みを行っており、行はピボットよりも大きいことが保証されているため、何も上書きしていないことはコンパイラーにとって明らかなはずです。
私はコンパイルしていて-O3 -fno-alias -parallel -par-report3
、多くの依存関係を取得しています ala:assumed FLOW dependence between matrix line 75 and matrix line 73.
またはassumed ANTI dependence between matrix line 73 and matrix line 75.
、75行目だけでも同じです。コンパイラにはどのような問題がありますか? 明らかに、いくつかのプラグマで何をすべきかを正確に伝えることができますが、コンパイラが単独で何を得ることができるかを理解したいと思います。
dynamic-linking - Linux Intel コンパイラ (icc) で mkl とのリンクの問題に直面する
Linuxのコマンドラインは次のとおりです。
このコマンドを実行した後: I got a long line of undefined reference errors . 私はEclipseでも試しましたが、そこでもリンクの問題を解決できませんでした。誰かが次のような小さなコードを実行するのを手伝ってくれたらうれしいです:
私のサーバー
ICC 64bitを搭載。
前もって感謝します。
c++ - 最も単純な TBB の例
誰かがTBBの例を教えてくれますか?
- アクティブなスレッドの最大数を設定します。
- 互いに独立し、静的関数ではなくクラスの形式で提示されるタスクを実行します。
linker - icc で gsl にリンクするときの intel_sse2 の問題
私のプログラムは PETSc と gsl の両方にリンクしており、両方のライブラリは icc でコンパイルされています。リンクコマンドは次のとおりです。
MPICH_CC
は icc に設定されているためmpicc
、Intel コンパイラを呼び出します。
gsl.so
ファイルにリンクしようとすると、次のエラーが表示されます。
このエラーの原因は何ですか? gsl は Intel コンパイラと互換性がありませんか?
c - メモリーにバインドされたデータに対するループ展開の影響
私は集中的にメモリにバインドされているコードを扱ってきました。キャッシュ ブロック、sw プリフェッチ、ループ展開などを手動で実装することにより、シングル コア内で最適化しようとしています。キャッシュ ブロックによってパフォーマンスが大幅に向上しますが。ただし、ループ展開を導入すると、パフォーマンスが大幅に低下します。
すべてのテスト ケースで、コンパイラ フラグ -O2 および -ipo を使用して Intel icc でコンパイルしています。
私のコードはこれに似ています(3D 25ポイントステンシル):
最も内側のループ (次元 i) でループ展開を行い、x、y、z 方向にそれぞれ展開係数 2、4、8 で展開すると、9 つのケースすべてでパフォーマンスが低下します。つまり、方向 x で 2 ずつ展開し、展開します。 y 方向に 2 ずつ展開、z 方向に 2 展開、x 方向に 4 展開 ... など。キャッシュのブロックよりも優れた v.good パフォーマンスの向上を実現します。
Intel Vtune を使用してコードのプロファイリングも試みました。リモート DRAM によってサービスされる 1.LLC ミスと 2.LLC ロード ミスが主な原因のボトルネックのように見えました。
最も内側の最速のループを展開するとパフォーマンスが低下するのに、最も外側の最も遅い次元を展開するとパフォーマンスが向上する理由を理解できません。ただし、後者の場合のこの改善は、icc でコンパイルするときに -O2 と -ipo を使用した場合です。
これらの統計の解釈方法がわかりません。誰かがこれに光を当てるのを助けることができますか.