正しい出力結果を確認するには、Life.vb で次の点を確認してください。
行 48 あたりの IPPTBBLife 関数はコメントが外されています。
関数 IPPCilkLife と SerialLife はコメントアウトされています。
関数 PictureBox1.Refresh() はコメントが外されています。
ライフゲームのアルゴリズムは、生きているセルが生き続けるには、周りに 2 つまたは 3 つのセルがなければならないというものです。インテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP) 関数 ippiCompareC_8u_C1R は、一度に 1 つのセルではなく、セルデータのバッファーでこのテストを実行します。 インテル® IPP は可能な場合、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) を活用し、演算をベクトル化して高速化します。
関数 ippiCompareC_8u_C1R は 8 ビットの符号なしイメージデータのバッファーをとり、ソースイメージ ROI のピクセルを、指定された値と比較し、結果を Ipp8u データの 1 チャネル・イメージに書き出します。 値 (この場合は、2) が等しい場合、それに対する出力ピクセルが IPP_MAX_8U に設定され、そうでない場合は 0 に設定されます。 イメージ ROI はバッファー全体に設定されます。 このバッファーは 2 つの隣接セルを持つセルを格納します。
IPPTBBLife.cpp ファイルで、行 62 あたりにある 2 つめの関数 ippiCompareC_8u_C1R をコメントアウトして、プログラムを実行してください。セルの活動が大幅に減ったことに気付くでしょう。
後でインテル® IPP 関数 ippiAnd_8u_C1IR を使用し、現在生きているセルに 2 つまたは 3 つの隣接セルがあるかどうか検証します。
ippiAnd_8u_C1IR 関数は、2 つのソースイメージ ROI の対応するピクセル値の間でビット単位の AND 演算を実行し、その結果をデスティネーション・イメージ ROI に書き込みます。 この関数は、生存していて、2 つまたは 3 つの隣接セルを持っていたピクセルを生存させたまま (1 に設定) にするために使用されます。再度、イメージ ROI はバッファー全体に設定されます。インテル® IPP は可能な場合、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) を使用し、演算をベクトル化して高速化します。
IPPTBBLife.cpp ファイルで、行 69 あたりにある ippiAnd_8u_C1IR 関数をコメントアウトして、プログラムを実行してください。 セルの活動が向上していないことに気付くでしょう。
ippiDup_8u_C1C3R 関数は、1 チャネル (グレースケール) イメージを 3 チャネル (カラー) イメージの各チャネルにコピーします。 この場合、この関数は新しいライフセルの状態を出力バッファーにコピーするので、表示可能です。
IPPTBBLife.cpp ファイルで、行 76 あたりにある ippiDup_8u_C1C3R 関数をコメントアウトして、プログラムを実行してください。 出力ウィンドウがブランクであることに気付くでしょう。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。