JCublas2.cublasSdot のソース コードのコメントでは、'result' パラメーターが 'ホストまたはデバイス ポインター' になる可能性があるとコメントされています。
public static int cublasSdot(
cublasHandle handle,
int n,
Pointer x,
int incx,
Pointer y,
int incy,
Pointer result)/** host or device pointer */
{
return checkResult(cublasSdotNative(handle, n, x, incx, y, incy, result));
}
ただし、float[] fs ={0} を指定した Pointer.to(fs) のようなホスト ポインターしか使用できません。「CUdeviceptr devicePtr = new CUdeviceptr();」のようなデバイス ポインタを使用すると、JCudaDriver.cuMemAlloc(devicePtr, 100 * Sizeof.FLOAT);'、プログラムは次のようなコンソール メッセージでクラッシュします。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000007fed93af2a3, pid=9376, tid=0x0000000000003a7c
# .....
ホストとデバイス間のデータ転送を最小限に抑えることで、時間を節約できます。このメソッドの「結果」引数としてデバイス ポインタを使用する方法、および /** ホストまたはデバイス ポインタ **/ でコメントされた結果ポインタを持つ他の JCuda メソッドを使用する方法は?