com.ibm.gpu アプリケーション・プログラミング・インターフェース (Linux®、Windows のみ)
com.ibm.gpu プログラミング・インターフェース (API) を使用して、GPU 上でプリミティブ型 (int、long、float、double) の配列をソートするアプリケーションを開発できます。
データの移動にかかるオーバーヘッドに見合うだけの十分な大きさがデータ配列にあれば、データ配列で sort 操作を並列処理したときのパフォーマンスを向上させることができます。 sort 操作を GPU にオフロードすることを決める前に、オフロードすることでパフォーマンス上のメリットがあることを確認する必要があります。 テスト結果からは、データを CPU から GPU に移動すると 20,000 個のエントリーでコストがつり合うのに対して、より大きな配列では、CPU ではなく GPU を使用するとソート時間が減ることが分かります。
任意の GPU デバイスでの sort 操作のコーディング
以下のコード・サンプルでは、単純配列の sort 操作を GPU にオフロードするコードの、あるセクションを示しています。
import com.ibm.gpu.GPUConfigurationException;
import com.ibm.gpu.GPUSortException;
import com.ibm.gpu.Maths;
public class Sample3 {
public static void main(String[] args) {
int[] toSort = { 5, 17, 12, 32, 2, 6, 3, 20 };
try {
Maths.sortArray(toSort);
} catch (GPUSortException e) {
e.printStackTrace();
} catch (GPUConfigurationException e) {
e.printStackTrace();
}
}
}
任意の GPU デバイスで詳細出力を使用可能にした sort 操作のコーディング
以下のコード・サンプルでは、同じ sort 操作を示していますが、STDOUT への詳細出力を使用可能にしています。 詳細出力の使用可能化は、システム・プロパティーを使用してコマンド行で指定することもできます。 詳しくは、 -Dcom.ibm.gpu.verbose (Linux、Windows のみ)を参照してください。
import com.ibm.gpu.GPUConfigurationException;
import com.ibm.gpu.GPUSortException;
import com.ibm.gpu.CUDAManager;
import com.ibm.gpu.Maths;
public class Sample2 {
public static void main(String[] args) {
try {
CUDAManager.getInstance().setVerboseGPU(true);
} catch (GPUConfigurationException e1) {
e1.printStackTrace();
}
int[] toSort = { 5, 17, 12, 32, 2, 6, 3, 20 };
try {
Maths.sortArray(toSort);
} catch (GPUSortException e) {
e.printStackTrace();
} catch (GPUConfigurationException e) {
e.printStackTrace();
}
}
}
特定の GPU デバイスでの sort 操作のコーディング
以下のコード・サンプルでは、sort 操作はデバイス ID 0
にオフロードされます。この ID は、システム内の最初の GPU デバイスであることを示しています。 デバイス ID は、 getDeviceID()を使用するか、Java™ アプリケーションを実行するシステムのコマンド行で nvidia-smi を指定することによって、プログラマチックに判別できます。
import com.ibm.gpu.*;
public class Sample1 {
public static void main(String[] args) {
int[] toSort = { 5, 17, 12, 32, 2, 6, 3, 20 };
try {
Maths.sortArray(0, toSort);
} catch (GPUSortException e) {
e.printStackTrace();
} catch (GPUConfigurationException e) {
e.printStackTrace(); }
}
}
詳しくは、 com.ibm.gpu アプリケーション・プログラミング・リファレンスを参照してください。