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 アプリケーション・プログラミング・リファレンスを参照してください。