簡約,つまり
FoldListは,

で開始値が
x である場合に,

の数列の最後の値を計算する:
簡約コードを
Mathematica にロードする.性能を高めるため,ブロック次元

が指定されている.入力は2のベキなので,

の定義を
Trueに設定する:
入力を指定し,出力にメモリを割り当てる:
outを使ってさらに簡約するために,もう一度

を呼び出すことができるが,出力の長さは128であるので,
Mathematica の
Total関数を呼び出すだけの場合と比べて,性能的にこれを行う利点はない:
65536個の1の定数ベクトルを加えた場合の結果は,
Mathematica の
Total関数の結果と一致する:
ソースコードは変更して,総和以外の操作を実装することもできる.以下では,リスト中に数字5が現れる回数を数える:
OpenCLFunctionは上と同じようにロードされるが,ブロックの大きさは512である:
ランダムな整数を入力として使う:
関数を呼び出す.ここでも Mathematica を使って残りの1024個の数を合計する:
起動にかかる時間を計る:
性能は7倍である:
入力がすでにCPUにある場合には,性能は52倍向上する:
入力は画像でもよい.画像間の線形補間を行うコードを書く(これは
ImageComposeを使って行うこともできる):
上のソースコードから
OpenCLFunctionをロードする:

のスレッドで関数を呼び出す:
メモリを得て,画像としてこれを表示する:
上を使って,関数

を作成することができる:
Manipulateを使って補間係数を操作することができる:
効果が作成できる.以下では滑らかなアニメーションを見ることができる:
一様な乱数生成器は,多くのアプリケーションにおいてよく見られるシード問題である.OpenCLに一様な乱数生成器を実装する:
ソースを
OpenCLFunctionとしてロードする.このアルゴリズムは画像を使って乱数の上限を提供する:
OpenCLFunctionを呼び出す.画像は,指定された適切な型を使って解釈することができる限り,
OpenCLFunctionに直接渡すことができる:
以下は通常のLenaの画像とは異なっている.これはアルファチャンネルが1に(
SetAlphaChannelを使って)設定された4チャンネル画像である:
ランダムな出力を使って画像の重要なエッジを検出する:
メルセンヌ(Mersenne)ツイスタは,もう一つの一様な乱数生成器アルゴリズムである(上のアルゴリズムよりもこちらの方が高度である).実装は以下の場所にある:
OpenCLFunctionをロード,つまり型

を指定する.これは,

の型はCPUの機能(これが倍数精度をサポートするかどうか)に依存することを意味する:
メルセンヌツイスタの入出力パラメータを設定する(詳細についてはアルゴリズムのページを参照のこと):
出力の結果をプロットする:
出力にかかる時間を計る:
ほぼ11倍の速さになったことが分かる:
スキャン,つまり接頭辞の総和のアルゴリズムは,
FoldListに似ており,さまざまな場合に使えて大変便利なプリミティブアルゴリズムである.OpenCLの実装は以下の場所にある:
計算に使われる3つのカーネルをロードする:
ランダムな入力データを生成する:
出力バッファを割り当てる:
ブロックとグリッドの次元を計算する:
計算に一時的なバッファが必要である:
スキャン操作を行う:
出力バッファを取り出す:
ソーベル(Sobel)フィルタ(ここでは水平フィルタだけを考慮する)はカーネル

でたたみ込まれる.これを

カーネルと呼ぶ.この場合にローカルメモリを使うと,性能が向上する.(より速い実装については,キャニーエッジ検出の例を参照のこと.)OpenCLの普通の実装は以下の場所にある:
ソーベルフィルタの特性の1つに,分離可能であることがある.つまり,上の

カーネルは,まず

で,次に

でたたみ込むことによって表すことができる.これらはそれぞれ

,

と呼ばれる.同じファイルから関数をロードする:
たたみ込みカーネルが分離可能である場合には,分離可能なフィルタを作成する方が,必要なメモリのコピー量を減らすことができるため,完全なたたみ込みを行うよりも効率的である.
行列転置は,多くのアプリケーションにおける基本的なアルゴリズムである.入力を指定する:
結果は Mathematica の結果と同じである:
行列操作を以下で行う:
ブロックの大きさを定義する:
OpenCLFunctionをロードする.入力が階数2でなければならないことが指定されている:
ランダムな入力を作成し,出力を割り当てる:
上の出力は Mathematica の出力と同じである:
一次元の離散高速フーリエ(Fourier)変換は,OpenCLLink を使って実装することができる.この実装は,入力が2のベキであると仮定する:
入出力リストを作成する:
出力メモリを呼び出して複雑なリストを作成し,最初の50個の要素だけを表示する:
上の結果は,
Fourierを使った場合と同じである:
ブラック・ショールズ(Black-Scholes)は,金融派生商品の投資をモデル化するもので,これはOpenCLに実装されている:
入力パラメータを割り当てる:
呼出しの値を得る:
所要時間を見るために,評価されるオプションの数を増やす:
C2050では,2048個のオプションを評価するのに1/100秒かかる:
Core i7 950では,,
FinancialDerivative は1.13秒かかる.上は280倍の速さである.オプションの数を増やすと,速さの違いがより大きくなる:
再帰的なガウス行列がガウシアンフィルタを近似するのに使われる.アルゴリズムは,ガウス行列が分離可能であるという事実に依存している:
一次ガウス行列の外積として書くことができる:
再帰的なガウス行列は以下の場所に実装されている:

の値を指定する.ガウス行列は

である:

を5.0に設定して正規分布を計算する:
Mathematica で分布をプロットすることができる:
再帰的なガウス行列のパラメータを計算する:
一時的な入力メモリ,および出力メモリが
OpenCLMemoryとしてロードされる:
関数を呼び出す.まず水平にガウス行列を行ってから転置し,次にガウス行列を垂直に行ってから転置し,完全なガウス行列を得る:
出力画像を得る:
もう一度所要時間を比べる:
10倍の速さで行われたことが分かる:
バイトニックソートは,整数の任意集合をソートする.これは原則としてマージソートに似ている.OpenCLの実装は,2のベキの長さのリストのみに使えるもので,以下の場所にある:
入力の長さを設定し,これをロードする.方向は,最高から最低へ,あるいは最低から最高へソートするかを示す.この場合は最低から最高へソートする:
入力リストを得る:
マージソートに似たバイトニックソートを呼び出す.完全ソートを行うためには,複数回呼出しを行う必要がある:
出力リストはソートされた形で取り込まれる: