インテル® ソフトウェア・カンファレンス福岡 インテル® コンパイラーを使用する際に直面するよくある問題と課題
|
|
|
- あきとし おとじま
- 7 years ago
- Views:
Transcription
1 コードの現代化 ( 最適化 ) インテル コンパイラーを使用する際に直面するよくある問題と課題 2017 年 7 月 isus 編集長 すがわらきよふみ
2 このセッションの内容 ベクトル化と命令セット ベクトル化を支援するコンパイラーの機能 インテル Advisor を使用した最適化のステップ 複数ソケットシステム (NUMA) 環境での留意点 このセッションで使用する機材 : インテル Core i7-4790k プロセッサー 4.00GHz ( メモリー帯域幅 25.6GB/s) インテル Xeon プロセッサー E v4 2.20GHz 2
3 ベクトル化と命令セット
4 ソフトウェアに対するハードウェアの影響コア数 スレッド数 ベクトル幅 * ark.intel.com で公開されている出荷済の製品仕様 インテル Xeon プロセッサー 64 ビット インテル Xeon プロセッサー 5100 番台 インテル Xeon プロセッサー 5500 番台 インテル Xeon プロセッサー 5600 番台 インテル Xeon プロセッサー開発コード名 Sandy Bridge EP インテル Xeon プロセッサー開発コード名 Ivy Bridge EP インテル Xeon プロセッサー開発コード名 Haswell EP インテル Xeon プロセッサー開発コード名 Broadwell EP インテル Core X プロセッサー開発コード名 Skylake-X インテル Xeon Phi コプロセッサー開発コード名 Knights Corner インテル Xeon Phi プロセッサー & コプロセッサー開発コード Knights Landing コア ~ スレッド ~ SIMD 幅 インテル インテル インテル インテル インテル インテル SSE3 SSE4.1 SSE4.2 AVX AVX2 AVX512 (2004) (2006) (2009) (2010) (2011) (2013) (2014) (2016) (2017) IMIC ハイパフォーマンス ソフトウェアは両方を活用する必要がある : 並列性 ( マルチスレッド マルチプロセス ) とベクトル化 (SIMD) インテル AVX512
5 命令セットが拡張されるときに何が起こるのか? SIMD レジスターの幅が同じ場合 (SSE2 -> SSE4.2) 新しい命令や機能をすぐに利用できます SIMD レジスターの幅が異なる場合 (SSE4.2 -> AVX) コンパイラーやプロセッサーが利用できても OS が新しい命令セットをサポートするのを待つ必要があります ただし SIMD 幅にスケーラブルなコードを作成しておきましょう
6 インテル コンパイラーのベクトル化オプション自動ベクトル化 /Qax<SIMD 命令セット, > (-ax<simd, >) /Qx<SIMD 命令セット > (-x<simd>) /QxHOST (-xhost) SIMD 命令セットに指定可能なキーワード : SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, (128 ビット ) ATOM_SSSE3, ATOM_SSE4.2, (128 ビット ) AVX, CORE-AVX-I, CORE-AVX2, (256 ビット ) MIC-AVX512, CORE-AVX512, COMMON-AVX512 (512 ビット ) /O2 (-O2) 以上が指定されると自動ベクトル化が有効となる : これらのオプションが指定されない場合のデフォルト命令セットは SSE2 6
7 ベクトル化オプションはパフォーマンスに最も影響する /Qx (-x) と /Qax (-ax) すべてのソースファイルに同じオプションを指定することを推奨 しかし困難な場合がある オブジェクト ファイルが提供される 事情によりオプションが制限される main.c func1.c func2.obj ( または特定のオプションが指示される ) > icl main.c func1.c func2.obj /QaxCORE-AVX2 /Fetest_code.exe または > icl func2.c /QxCORE-AVX512 /c > icl main.c fuinc1.c func2.obj /QaxCORE-AVX2 /Fetest_code.exe 実行すると? 7
8 ベクトル化オプションはパフォーマンスに最も影響する (2) /Qx (-x) と /Qax (-ax) 問題となる : ターゲットの実行環境が最新のプロセッサーではない インテル AVX/AVX2 からインテル AVX-512 への移行中のコードが含まれる 必ずしも例外が発生するとは限らない ベクトル化できなければインテル AVX-512 命令は生成されない コンパイラーのレポートやインテル Advisor を使用して ベクトル化されているかどうかを確認 8
9 ベクトル化オプションはパフォーマンスに最も影響する (3) ランタイムチェックの影響 > icl multiply.c /c /QaxCORE-AVX512 /QxCORE-AVX2 > icl driver.c multiply.obj /QaxCORE-AVX2 /Fedriver.exe > icl multiply.c /c /QxCORE-AVX2 > icl driver.c multiply.obj /QaxCORE-AVX2 /Fedriver.exe 処理中に数万回 数十万回呼び出されるような下位の関数では ランタイムチェックを行うべきではない 9
10 ベクトル化オプションはパフォーマンスに最も影響する (4) バイナリーに適用されている命令セットは? ベクトル命令セットにインテル AVX が適用されている サーベイレポートで詳細を確認 10
11 コード中で CPU の命令セットをチェックする #include <immintrin.h> #include <stdio.h> int main(int argc, char *argv[]) { const unsigned long knl_features = (_FEATURE_AVX512F _FEATURE_AVX512ER _FEATURE_AVX512PF _FEATURE_AVX512CD ); if ( _may_i_use_cpu_feature( knl_features ) ) printf("this CPU supports AVX-512F+CD+ER+PF as introduced in Knights Landing n"); else printf("this CPU does not support all Knights Landing AVX-512 features n"); return 1; } インテル コンパイラーは プロセッサーの機能をチェックする _may_i_use_cpu_feature() 組込み関数をサポート
12 ベクトル化を支援するコンパイラーの機能
13 ベクトル化に影響する 6 つの要因 ループ伝搬依存 DO I = 1, N A(I+1) = A(I) + B(I) ENDDO 関数呼び出し for (i = 1; i < nx; i++) { x = x0 + i * h; } sumx = sumx + func(x, y, xp); 不明なループカウント struct _x { int d; int bound; }; void doit(int *a, struct _x *x) { for(int i = 0; i < x->bound; i++) a[i] = 0; } 間接メモリーアクセス for (i=0; i<n; i++) A[B[i]] = C[i]*D[i] ポインター エイリアシング void scale(int *a, int *b){ for (int i = 0; i < 1000; i++) b[i] = z * a[i]; } 外部ループ for(i = 0; i <= MAX; i++) { for(j = 0; j <= MAX; j++) { D[i][j] += 1; } } さらに... 13
14 ベクトル化を支援するコンパイラー オプション /Qipo (-ipo) プロシージャー間の最適化 (IPO) は マルチステップの自動処理で コンパイラーがコードを解析してどの最適化が有効であるかを判断できるようにします double a[512]; main(){ func (&a[0], &a[256], ct); } source1.c func(double *p, double *q int ct){ for(i=0; i<ct; i++) p[i] += q[i] * z; } source2.c インライン展開およびその他の最適化は プロファイル情報によって向上 14
15 IPO による最適化 アドレスの解析配列次元のパディングエイリアス解析配列の自動転置メモリープールの自動生成 C++ クラス階層解析共通ブロック変数の統合共通ブロックの分割定数の伝播不要な呼び出しの検出不要な仮引数の排除不要な関数の排除仮引数のアライメント解析前方代入間接呼び出し変換 インライン展開 mod/ref 解析不要な呼び出しの部分的に排除レジスターに引数を渡して呼び出しとレジスターの使用を最適化ポインター解析ルーチンのキー属性の伝播専用化スタックフレームのアライメント構造体分割とフィールドの並べ替えシンボル テーブル データの促進未参照変数の削除プログラム全体の解析 15
16 ベクトル化を支援するコンパイラーオプション /Qipo (-ipo) 使用時の注意事項 IPO を使用して各ソースファイルがコンパイルされるたびに コンパイラーはソースコードの中間表現 (IR) を擬似オブジェクト ファイルに格納する 擬似オブジェクト ファイルには 通常のオブジェクト ファイルの代わりに IR が含まれる コンパイラーはリンカーの直前に起動され コンパイラーは すべての擬似オブジェクト ファイルを対象に IPO を実行する (.o や.obj にオブジェクトは含まれない ) ipo を適用しないオブジェクトと ipo を適用したオブジェクトをリンクする場合は インテルのリンクツールを使用 ライブラリーを作成する場合やリンク時は lib (ar) や link (ld) の代わりに専用ツール xilib (xiar) と xilink (xild) を使用する 16
17 ipo を適用しないオブジェクトと ipo を適用したオブジェクト コンパイルされていません 17
18 ベクトル化を支援するコンパイラーの機能言語機能 (1) 言語機能 declspec(align(n)) declspec(align(n,off)) assume_aligned(a,n) assume(cond) 説明 変数を n バイト境界にアライメントするようにコンパイラーに指示する 変数のアドレスは address mod n=0 各 n バイト境界内でオフセットだけ離して変数を n バイト境界にアライメントするようにコンパイラーに指示する 変数のアドレスは address mod n=off 配列 a が n バイト境界にアライメントされていると見なすようにコンパイラーに指示する アライメント情報が取得できなかった場合に使用する このキーワードが指定されている場合は cond が true であると仮定するようにコンパイラーに指示する 通常 より効率的なコードを生成するため アライメント情報のような利用可能な特性をコンパイラーに伝える #pragma ivdep #pragma novector ベクトル依存性が存在していると推定されてもそれを無視するようにコンパイラーに指示 ループをベクトル化しないように指定 18
19 ベクトル化を支援するコンパイラーの機能言語機能 (2) ソースコードに複数の関数が含まれている場合 アルゴリズムやメモリー参照の方法により 特定の SIMD 命令セットで最適な性能を発揮するような状況を想定してください func1(){.} func2(){.} func3(){.} source_code.c インテル SSE4.2 で最高の性能を発揮!! > icl source_code.c /QxCORE-AVX-I #pragma [intel] optimization_parameter target_arch=sse4.2 を関数宣言の直前に追加すると 対象の関数だけ命令セットを変更可能 19
20 ベクトル化を支援するコンパイラーの機能 /Qvec- (-no-vec) オプション ベクトル化によりアプリケーションがどれくらい恩恵を得られているか簡単に調査 /Qvec- (-no-vec) オプションが指定されるとコンパイラーは SIMD 命令を使用するが ベクトル化せずにスカラー操作を行うコードを生成 /Qvec- (-no-vec) ありと なしのバイナリーを作成してパフォーマンスを比較 20
21 インテル SSE2 インテル AVX2 デフォルトの状態を検証 21
22 ベクトル化を支援するコンパイラーの機能ベクトル化レポート /Qopt-report (-qopt-report) を指定すると コンパイラーが適用した または適用できなかった最適化に関するレポートを出力 レポート : ループの入れ子 ベクトル 自動並列化の最適化 [loop, vec, par] LOOP BEGIN at C: code matmul multiply.c(13,2) リマーク #15541: 外部 loop は自動ベクトル化されませんでした : SIMD ディレクティブの使用を検討してください LOOP BEGIN at C: code matmul multiply.c(15,3) リマーク #15344: loop はベクトル化されませんでした : ベクトル依存関係がベクトル化を妨げています 最初の依存関係を以下に示します 詳細については レベル 5 のレポートを使用してください リマーク #15346: ベクトル依存関係 : FLOW の依存関係が b[i] (16:4) と b[i] (16:4) の間に仮定されました リマーク #25439: 剰余ありアンロール - 2 LOOP END LOOP BEGIN at C: code matmul multiply.c(15,3) <Remainder> LOOP END LOOP END このレポートは Visual Studio 内で利用可能 22
23 ベクトル化のレポートレベル /Qopt-report:N (-qopt-report=n) N には 取得するレポートの詳細レベルを指定 N が省略された場合は N = 2 がデフォルト レベル 0: ベクトル化レポートなし レベル 1: ベクトル化が行われた場合をレポート レベル 2: レベル 1 に加え ベクトル化されなかった場所と簡単な診断をレポート レベル 3: ループベクトル化の診断を追加 レベル 4: データのアライメントなど詳細情報を追加 レベル 5: 依存性情報を追加 23
24 コンパイラー レポートのオプション /Qopt-report-phase: フェーズ [, フェーズ, ] フェーズ = loop, par, vec, openmp, ipo, pgo, cg, offload, tcollect, all /Qopt-report-file:stdout stderr ファイル名 /Qopt-report-embed /Qopt-report-routine:< 関数名 >[,< 関数名 >] /Qopt-report-filter: ソースファイル名, 行番号 - 行番号 メッセージを英語にする : /Qdiag-message-catalog- (Windows*) export LANG=en_US.UTF-8 (Linux*) 24
25 インテル Advisor を使用した最適化ステップ 現状のコードの状況を知る 最適化の方針を決定する 最適化を適用する 最適化の効果を確認する
26 アプリケーションのパフォーマンスを知る新しい方法 インテル Advisor の Roofline ( ルーフライン ) 解析を使用して デフォルトコードのパフォーマンスを理解する : icl driver.c multiply.c /O2 /Zi キャッシュとメモリーの潜在的なピーク性能 命令セットの潜在的なピーク性能 この段階でアプリケーションは メモリー集約型であり SIMD 命令のロード / ストアデータはキャッシュに収まっていないか 活用していない キャッシュを考慮したルーフライン解析のトレーニング : このセッションで使用する機材 : インテル Core i7-4790k プロセッサー 4.00GHz ( メモリー帯域幅 25.6GB/s) 26
27 サーベイ解析でさらに詳しく調査 ベクトル化されていないスカラーループ 2 回アンロールされている ループ回数は 50 回 処理全体で 回呼び出されている データ型は double 使用されているレジスターは 3 個 27 ボトルネックとなっているループ
28 インテル Advisor による推奨 [Recommendations] タブでインテル Advisor からの最適化の推奨を得られる [Why No Vectorization?] で詳細を得るにはコンパイラーのレポートが必要 28
29 -ipo でデフォルトのベクトル化を適用した結果 >icl driver.c multiply.c /Qipo /Zi /O2 キャッシュとメモリーの潜在的なピーク性能 命令セットの潜在的なピーク性能 この段階でアプリケーションの計算性能はかなり向上 L3 キャッシュを効率良く利用しつつある 29
30 サーベイ解析でさらに詳しく調査 : ipo インテル SSE2 でベクトル化されている セルフ実行時間は 秒から 秒へ短縮 GLOPS ベクトル化効率 91% で ベクトル長 2 であるためスカラーに対し 1.82 倍のゲイン 4 回のアンロールに加え ベクトル化によりループ回数は 12 回に減少 30
31 インテル AVX2 命令セットを適用後 >icl driver.c multiply.c /Qipo /Zi /O2 /QxCORE-AVX2 キャッシュとメモリーの潜在的なピーク性能 命令セットの潜在的なピーク性能 インテル SSE2 でベクトル化されたルーフライン レポートとほとんど変わらない 31
32 サーベイ解析でさらに詳しく調査 : インテル AVX2 インテル AVX でベクトル化されている (FMA) セルフ実行時間は 秒から 秒へ短縮 GLOPS ベクトル化効率 77% で ベクトル長 4 であるためスカラーに対し 3.09 倍のゲイン アンロールは適用されず ベクトル化によりループ回数は 25 回に減少 32
33 OpenMP* による並列化を適用後 >icl driver.c multiply.c /Qipo /Zi /O2 /QxCORE-AVX2 /Qopenmp キャッシュとメモリーの潜在的なピーク性能 命令セットの潜在的なピーク性能 並列化によりキャッシュの利用率は向上し パフォーマンスもかなり高まっている 33
34 サーベイ解析でさらに詳しく調査 : OpenMP* OpenMP* による並列化 スレッド間でループが分割されたことで スレッド内のループ回数は 6 2 または 3 34
35 インテル AVX-512 命令を含むコード >icl driver.c multiply.c /Qipo /Zi /O2 /QaxCORE-AVX512 /QxCORE-AVX2 インテル AVX-512 命令は実行されていない インテル AVX2 とインテル AVX-512 命令で構成される インテル Advisor は実行されないコードパスのパフォーマンスを推測 35
36 複数ソケットシステム (NUMA) 環境での留意点 あなたの開発したコードは サーバー上で実行されているかもしれません
37 NUMA 環境でのメモリーアクセス QPI QPI DRAM CPU0 CPU1 DRAM DRAM CPU0 CPU1 DRAM ローカル メモリー アクセス 1. CPU0 は CPU0 側の DRAM にデータをリクエスト 2. CPU0 はデータが存在するか CPU1 に問い合わせ (snoop) 3. DRAM がデータを返す 4. CPU1 は問い合わせ (snoop) を返す ローカルメモリーの待ち時間は このステップまでにかかる待ち時間 リモート メモリー アクセス 1. CPU0 は CPU1 にデータをリクエスト 2. リクエストに対し QPI を経由して CPU1 へ 3. CPU1 の IMC は (CPU1 側の ) DRAM にリクエスト 4. CPU1 はキャッシュ内に問い合わせ (snoops) 5. データは QPI 経由で CPU0 へ返す リモートメモリーの待ち時間 ( レイテンシー ) は 待ち時間の短いインターコネクト次第 37
38 スレッドのアフィニティー制御と NUMA DRAM CPU0 QPI CPU1 DRAM NUMA 環境ではスレッドのアフィニティー ( 配置 ) がパフォーマンスに影響を及ぼす アフィニティーの制御 : numactl コマンドを使用する KMP_AFFINITY を使用する 2 つのスレッドのアフィニティーを制御する例 スレッド 3 スレッドスレッド 1 2 参考文献 :
39 まとめ 最適化の第一歩は ベクトル化に注目してください 効率良くベクトル化されたコードは 並列化による相乗効果を高めます 効率良くベクトル化および並列化されたコードは 将来のハードウェアへの準備を容易にします 開発ツールも日々進化しています 最適化ツールを活用しましょう 新しい機能を使ってみましょう 39
40 参考資料コンパイラー レポートの例
41 レポートへの対応例 (1) $ icl /c /Qopt-report:4 /Qopt-report-phase:loop,vec /Qopt-report-file:stderr foo.c 41 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN at W: sample code foo.c(4,2) <Multiversioned v1> remark #25228: データの依存関係のループをマルチバージョンにしました remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15399: ベクトル化のサポート : アンロールファクターが 2 に設定されます remark #15417: ベクトル化のサポート : 浮動小数点数をアップコンバートします ( 単精度から倍精度 1) remark #15418: ベクトル化のサポート : 浮動小数点数をダウンコンバートします ( 倍精度から単精度 1) remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 ---. remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =32 LOOP END LOOP BEGIN at W: sample code foo.c(4,2) <Multiversioned v2> remark #15304: ループはベクトル化されませんでした : マルチバージョンのベクトル化できないループ インスタンスです LOOP END #include <math.h> void foo (float * theta, float * sth) { int i; for (i = 0; i < 128; i++) sth[i] = sin(theta[i] ); }
42 レポートへの対応例 (2) $ icl /c /Qopt-report:4 /Qopt-report-phase:loop,vec /Qopt-report-file:stderr /Qalias-args- foo.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN at W: sample code foo.c(4,2) remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15399: ベクトル化のサポート : アンロールファクターが 2 に設定されます remark #15417: ベクトル化のサポート : 浮動小数点数をアップコンバートします ( 単精度から倍精度 1) remark #15418: ベクトル化のサポート : 浮動小数点数をダウンコンバートします ( 倍精度から単精度 1) remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 114 remark #15477: ベクトルループのコスト : remark #15478: スピードアップの期待値 : remark #15479: 低オーバーヘッドのベクトル操作 : 9 remark #15480: 中オーバーヘッドのベクトル操作 : 1 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 remark #15487: 型変換 : 2 remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =32 LOOP END 42 (Linux* では -fargument-noalias) #include <math.h> void foo (float * theta, float * sth) { int i; for (i = 0; i < 128; i++) sth[i] = sin(theta[i] ); }
43 レポートへの対応例 (3) $ icl /c /Qopt-report:4 /Qopt-report-phase:loop,vec /Qopt-report-file:stderr /Qalias-args- foo2.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN W: sample code foo2.c(4,2) remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 111 remark #15477: ベクトルループのコスト : remark #15478: スピードアップの期待値 : remark #15479: 低オーバーヘッドのベクトル操作 : 8 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =32 LOOP END #include <math.h> void foo (float * theta, float * sth) { int i; for (i = 0; i < 128; i++) sth[i] = sinf(theta[i] f); } 43
44 レポートへの対応例 (4) $ icl /c /Qopt-report:4 /Qopt-report-phase:loop,vec /Qopt-report-file:stderr /Qalias-args- /Qxavx foo2.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] 44 LOOP BEGIN at W: sample code foo2.c(4,2) remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 110 remark #15477: ベクトルループのコスト : remark #15478: スピードアップの期待値 : remark #15479: 低オーバーヘッドのベクトル操作 : 8 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =16 LOOP END #include <math.h> void foo (float * theta, float * sth) { int i; for (i = 0; i < 128; i++) sth[i] = sinf(theta[i] f); }
45 レポートへの対応例 (5) $ icl /c /Qopt-report:4 /Qopt-report-phase:loop,vec /Qopt-report-file:stderr /Qalias-args- /Qxavx foo3.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN W: sample code foo3.c(6,2) remark #15388: ベクトル化のサポート : 参照 theta にアラインされたアクセスが含まれています remark #15388: ベクトル化のサポート : 参照 sth にアラインされたアクセスが含まれています remark #15300: ループがベクトル化されました remark #15448: マスクなしアライン ユニット ストライド ロード : 1 remark #15449: マスクなしアライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 110 remark #15477: ベクトルループのコスト : remark #15478: スピードアップの期待値 : remark #15479: 低オーバーヘッドのベクトル操作 : 8 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =16 LOOP END #include <math.h> void foo (float * theta, float * sth) { int i; assume_aligned(theta,32); assume_aligned(sth,32); for (i = 0; i < 128; i++) sth[i] = sinf(theta[i] f); } 45
46 レポートへの対応例 (6) $ icl /c /Qopt-report:4 /Qopt-report-phase:loop,vec /Qopt-report-file:stderr /Qalias-args- /Qxavx foo4.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] 46 LOOP BEGIN W: sample code foo4.c(6,2) remark #15388: ベクトル化のサポート : 参照 theta にアラインされたアクセスが含まれています remark #15388: ベクトル化のサポート : 参照 sth にアラインされたアクセスが含まれています remark #15412: ベクトル化のサポート : sth のストリーミング ストアが生成されました remark #15300: ループがベクトル化されました remark #15448: マスクなしアライン ユニット ストライド ロード : 1 remark #15449: マスクなしアライン ユニット ストライド ストア : 1 remark #15467: マスクなしアライン ストリーミング ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 110 remark #15477: ベクトルループのコスト : remark #15478: スピードアップの期待値 : remark #15479: 低オーバーヘッドのベクトル操作 : 8 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 = LOOP END #include <math.h> void foo (float * theta, float * sth) { int i; assume_aligned(theta,32); assume_aligned(sth,32); for (i = 0; i < ; i++) sth[i] = sinf(theta[i] f); }
47 isus の参考記事 インテルのベクトル化ツール インテル Advisor 2017 ツールによるベクトル化のクイック解析 一般的なベクトル化のヒント インテル AVX-512 で向上したベクトル化のパフォーマンス 自動ベクトル化が失敗した場合の対処 ベクトル化されたリダクション操作を記述できますか? 間接呼び出しと仮想関数の呼び出し : インテル C/C++ コンパイラー 17.0 によるベクトル化 ループをベクトル化するための条件
48
内容 インテル Advisor ベクトル化アドバイザー入門ガイド Version インテル Advisor の利用 ワークフロー... 3 STEP1. 必要条件の設定... 4 STEP2. インテル Advisor の起動... 5 STEP3. プロジェクトの作成
内容 インテル Advisor ベクトル化アドバイザー入門ガイド Version 1.0 1. インテル Advisor の利用... 2 2. ワークフロー... 3 STEP1. 必要条件の設定... 4 STEP2. インテル Advisor の起動... 5 STEP3. プロジェクトの作成と設定... 7 STEP4. ベクトル化に関する情報を取得する... 9 STEP5. ループ処理の詳細を取得する...
インテル(R) C++ Composer XE 2011 Windows版 入門ガイド
C++ Composer XE 2011 Windows* エクセルソフト株式会社 www.xlsoft.com Rev. 1.2 (2011/05/03) Copyright 1998-2011 XLsoft Corporation. All Rights Reserved. 1 / 70 ... 4... 5... 6... 8 /... 8... 10 /... 11... 11 /... 13
インテル(R) Visual Fortran Composer XE
Visual Fortran Composer XE 1. 2. 3. 4. 5. Visual Studio 6. Visual Studio 7. 8. Compaq Visual Fortran 9. Visual Studio 10. 2 https://registrationcenter.intel.com/regcenter/ w_fcompxe_all_jp_2013_sp1.1.139.exe
JavaプログラミングⅠ
Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double
インテル(R) Visual Fortran Composer XE 2013 Windows版 入門ガイド
Visual Fortran Composer XE 2013 Windows* エクセルソフト株式会社 www.xlsoft.com Rev. 1.1 (2012/12/10) Copyright 1998-2013 XLsoft Corporation. All Rights Reserved. 1 / 53 ... 3... 4... 4... 5 Visual Studio... 9...
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
Cコンパイラパッケージお知らせ
201406-2 CubeSuite+ 版 RX ファミリ用 C/C++ コンパイラパッケージ V1 および High-performance Embedded Workshop 版 RX ファミリ用 C/C++ コンパイラパッケージ ご使用上のお願い CubeSuite+ 版 RX ファミリ用 C/C++ コンパイラパッケージ V1 および High-performance Embedded Workshop
2.1 インテル マイクロアーキテクチャー Haswell インテル マイクロアーキテクチャー Haswell は インテル マイクロアーキテクチャー Sandy Bridge とインテル マイクロアーキテクチャー Ivy Bridge の成功を受けて開発された この新しいマイクロアーキテクチャーの
2 章インテル 64 プロセッサー アーキテクチャーと IA-32 プロセッサー アーキテクチャー 本章では 最新世代のインテル 64 プロセッサーと IA-32 プロセッサー ( インテル マイクロアーキテクチャー Haswell インテル マイクロアーキテクチャー Ivy Bridge インテル マイクロアーキテクチャー Sandy Bridge ベースのプロセッサーと インテル Core マイクロアーキテクチャー
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
インテル® VTune™ Amplifier XE を使用したストレージ向けの パフォーマンス最適化
インテル VTune Amplifier XE を使用したストレージ向けのパフォーマンス最適化 2016 年 10 月 12 日 Day2 トラック D-2 (14:55 15:40) すがわらきよふみ isus 編集長 本日の内容 インテル VTune Amplifier XE 2017 概要 ストレージ解析向けのインテル VTune Amplifier XE の新機能 メモリー解析向けのインテル
Introduction to OpenMP* 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessors
OpenMP* 4.0 における SIMD およびアフィニティー機能の導入 法務上の注意書きと最適化に関する注意事項 本資料に掲載されている情報は インテル製品の概要説明を目的としたものです 本資料は 明示されているか否かにかかわらず また禁反言によるとよらずにかかわらず いかなる知的財産権のライセンスを許諾するものではありません 製品に付属の売買契約書 Intel's Terms and Conditions
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
インテル(R) Visual Fortran コンパイラ 10.0
インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行
プログラミング実習I
プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.
v10 IA-32 64¹ IA-64²
v10 IA-32 64¹ IA-64² 1. 2. 3. 4. 5. 6. /Od (-O0) Windows* /O1 /O2 /O3 Linux* Mac OS* -O1 -O2 -O3 /O2 ( O2) /O3 (-O3) IA-64 Core 2 /QxT ( xt) IA-32 64 IA-32 64 Itanium 2 9000 /G2-p9000 ( mtune=itanium2-p9000)
Microsoft PowerPoint - 09.pptx
情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は
C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの
演習1: 演習準備
演習 1: 演習準備 2013 年 8 月 6 日神戸大学大学院システム情報学研究科森下浩二 1 演習 1 の内容 神戸大 X10(π-omputer) について システム概要 ログイン方法 コンパイルとジョブ実行方法 OpenMP の演習 ( 入門編 ) 1. parallel 構文 実行時ライブラリ関数 2. ループ構文 3. shared 節 private 節 4. reduction 節
for (int x = 0; x < X_MAX; x++) { /* これらの 3 つの行は外部ループの自己データと * 合計データの両方にカウントされます */ bar[x * 2] = x * ; bar[(x * 2) - 1] = (x - 1.0) *
コールスタックを利用したルーフライン Alexandra S. (Intel) 2017 年 12 月 1 日公開 この記事は 2017 年 12 月 18 日時点の インテル デベロッパー ゾーンに公開されている Roofline with Callstacks の日本語訳です 注 : この記事の一部のスクリーンショットにはオレンジ色の点が表示されています デフォルト設定では これらの点は赤または黄色になります
Microsoft* Windows* 10 における新しい命令セットの利用
Microsoft* Windows* 10 における新しい命令セットの利用 この記事は インテル デベロッパー ゾーンに公開されている Follow-Up: How does Microsoft Windows 10 Use New Instruction Sets? の日本語参考訳です 以前のブログ ソフトウェアは実際に新しい命令セットを使用しているのか? ( 英語 ) では いくつかの異なる
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
01_OpenMP_osx.indd
OpenMP* / 1 1... 2 2... 3 3... 5 4... 7 5... 9 5.1... 9 5.2 OpenMP* API... 13 6... 17 7... 19 / 4 1 2 C/C++ OpenMP* 3 Fortran OpenMP* 4 PC 1 1 9.0 Linux* Windows* Xeon Itanium OS 1 2 2 WEB OS OS OS 1 OS
Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78
Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 788) 抽出できない依存関係 Understand の C 言語の解析 (Fuzzy/Strict) で
数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留
第 10 章分割コンパイル 1 ソースを分割する今まで出てきたソースは全て一つのソースファイルにソースを記述してきました しかし ソースが長くなっていくと全てを一つのファイルに書くと読みづらくなります そこで ソースを複数のファイルに分割してコンパイルを行う分割コンパイルをします 今章は章名にもなっている 分割コンパイルの方法についてやります 分割コンパイルする時は大抵 関連性のある機能ごとにファイルにまとめます
RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド
RH850の割り込み / 例外実現方法 CC-RH アプリケーションガイド R20UT3546JJ0101 2018.10.12 ソフトウェア開発統括部 ソフトウェア技術部ルネサスエレクトロニクス株式会社 アジェンダ 概要ページ 03 割り込み / 例外発生時に実行する関数の定義ページ 10 直接ベクタ方式のベクタの定義ページ 17 テーブル参照方式のベクタの定義ページ 25 その他 割り込み制御ページ
Intel® Compilers Professional Editions
2007 6 10.0 * 10.0 6 5 Software &Solutions group 10.0 (SV) C++ Fortran OpenMP* OpenMP API / : 200 C/C++ Fortran : OpenMP : : : $ cat -n main.cpp 1 #include 2 int foo(const char *); 3 int main()
Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a
MATLAB コードを使用した C コードの生成クイックスタートガイド (R2016a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには [ ビルド ] を [ ソースコード ] [ スタティックライブラリ ] [ ダイナミックライブラリ ] または [ 実行ファイル ] のいずれかに切り替えます MATLAB Coder を使用することで MATLAB コードから
プログラミング基礎I(再)
山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全
議題 プロセッサーの動向とコード モダナイゼーション インテル アドバンスト ベクトル エクステンション 512 ( インテル AVX-512) 命令と演算性能 ベクトル化を支援するインテル Advisor ループの性能を可視化するルーフライン表示 姫野ベンチマークを用いたインテル Xeon Phi
最新のインテル Parallel Studio XE を用いた迅速なベクトル化と並列化手法 インテル株式会社 技術本部ソフトウェア技術統括部 シニア スタッフ エンジニア 池井 満 議題 プロセッサーの動向とコード モダナイゼーション インテル アドバンスト ベクトル エクステンション 512 ( インテル AVX-512) 命令と演算性能 ベクトル化を支援するインテル Advisor ループの性能を可視化するルーフライン表示
修士論文
AVX を用いた倍々精度疎行列ベクトル積の高速化 菱沼利彰 1 藤井昭宏 1 田中輝雄 1 長谷川秀彦 2 1 工学院大学 2 筑波大学 1 目次 1. 研究背景 目的 2. 実装, 実験環境 3. 実験 - 倍々精度ベクトル演算 - 4. 実験 - 倍々精度疎行列ベクトル積 - 5. まとめ 多倍長精度計算フォーラム 2 目次 1. 研究背景 目的 2. 実装, 実験環境 3. 実験 - 倍々精度ベクトル演算
ex01.dvi
,. 0. 0.0. C () /******************************* * $Id: ex_0_0.c,v.2 2006-04-0 3:37:00+09 naito Exp $ * * 0. 0.0 *******************************/ #include int main(int argc, char **argv) double
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char
PGRelief C/C++ 強化ポイント説明書
PGRelief C/C++ 強化ポイント説明書 1. 最新バージョンの強化ポイント (2017autumn 2018) 1) CERT Cコーディングスタンダードの適合性チェックを追加 CERTオプションの購入が必要 2) 指摘メッセージを16 個追加 ( うち15 個はCERTオプション用 ) 3) Visual C++ 2015 の資産に対応 2. 過去バージョンの強化ポイント 2.1. 強化ポイント
Source Insight
ソースインサイト プログラムエディタ Source Insight のご紹介 ソースを理解しながら 効率の良いコーディング エクセルソフト株式会社営業部 エクセルソフト株式会社 Copyright 2008 XLsoft K.K. All Rights Reserved. - 1 - 目次 プログラムエディタ Source Insight のご紹介 ソースを理解しながら 効率の良いコーディング 目次
第1回 プログラミング演習3 センサーアプリケーション
C プログラミング - ポインタなんて恐くない! - 藤田悟 [email protected] 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir
Microsoft PowerPoint - kougi2.ppt
C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し
インテル® VTune™ Amplifier : Windows 環境向けスタートガイド
インテル VTune Amplifier Windows 環境向けスタートガイド エクセルソフト株式会社 Version 1.0.0-20180829 目次 1. インテル VTune Amplifier の使用.......................................................... 1 2. インテル VTune Amplifier の基本..........................................................
kiso2-03.key
座席指定はありません Linux を起動して下さい 第3回 計算機基礎実習II 2018 のウェブページか ら 以下の課題に自力で取り組んで下さい 計算機基礎実習II 第2回の復習課題(rev02) 第3回の基本課題(base03) 第2回課題の回答例 ex02-2.c include int main { int l int v, s; /* 一辺の長さ */ /* 体積 v
Microsoft Word - Cプログラミング演習(12)
第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1
型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 第 1 章製品概要本開発キットは RF007 ラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです
PowerPoint プレゼンテーション
講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる
Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc
2.3. アプリ性能 2.3.1. Intel クアッドコア CPU でのベンチマーク 東京海洋大学吉岡諭 1. はじめにこの数年でマルチコア CPU の普及が進んできた x86 系の CPU でも Intel と AD がデュアルコア クアッドコアの CPU を次々と市場に送り出していて それらが PC クラスタの CPU として採用され HPC に活用されている ここでは Intel クアッドコア
インテル® Parallel Studio XE 2019 Composer Edition for Windows: インテル® Fortran コンパイラー 入門ガイド
インテル Parallel Studio XE 2019 Composer Edition for Windows インテル Fortran コンパイラー入門ガイド エクセルソフト株式会社 バージョン 1.00, 2019 年 1 月 30 日 目次 1. はじめに....................................................................................
Cプログラミング1(再) 第2回
C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において
テキストファイルの入出力1
テキストファイルの入出力 1 0. 今回の目的前回までは 2 回にわたって繰り返しについて学んできました 今回からテキストファイルの入出力について学ぶことにします 1. テキストファイルへの出力 1.1 テキストファイルについてテキストファイルとは コンピュータで扱うことが出来るファイルの中で最も基本的なファイルであり どの様な OS でもサポートされているファイル形式です Windows においては
目次 1 はじめに 製品に含まれるコンポーネント 動作環境... 4 オペレーティング システム... 4 Microsoft Visual Studio* 製品 製品のダウンロード 製品版をインストールする場合 評価版を
インテル Parallel Studio XE 2018 Composer Edition for Fortran Windows* インストール ガイド Rev. 2. 0 (2017/11/22) エクセルソフト株式会社 www.xlsoft.com 目次 1 はじめに... 3 2 製品に含まれるコンポーネント... 3 3 動作環境... 4 オペレーティング システム... 4 Microsoft
RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)
RL78 開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行 ( 統合開発環境編 ) (High-performance Embedded Workshop CS+) 2017/4/7 R20UT2087JJ0103 ソフトウェア事業部ソフトウエア技術部ルネサスシステムデザイン株式会社 はじめに 本資料は 統合開発環境 High-performance Embedded Workshop
ex01.dvi
,. 0. 0.0. C () /******************************* * $Id: ex_0_0.c,v.2 2006-04-0 3:37:00+09 naito Exp $ * * 0. 0.0 *******************************/ #include int main(int argc, char **argv) { double
ex05_2012.pptx
2012 年度計算機システム演習第 5 回 2012.05.25 高水準言語 (C 言語 ) アセンブリ言語 (MIPS) 機械語 (MIPS) コンパイラ アセンブラ 今日の内容 サブルーチンの実装 Outline } ジャンプ 分岐命令 } j, jr, jal } レジスタ衝突 回避 } caller-save } callee-save 分岐命令 ( 復習 ) } j label } Jump
Using VectorCAST/C++ with Test Driven Development
ホワイトペーパー V2.0 2018-01 目次 1 はじめに...3 2 従来型のソフトウェア開発...3 3 テスト主導型開発...4 4...5 5 TDD を可能にするテストオートメーションツールの主要機能...5 5.1 テストケースとソースコード間のトレーサビリティー...5 5.2 テストケースと要件間のトレーサビリティー...6 6 テスト主導型開発の例...7 2 1 はじめに 本書では
画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう
第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 ) 画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 )
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
