秋はうまいもん喰うだ!
こんにちわ、こんばんわ。かえるのクーだ!の助手の「井戸中 聖」(いとなか セイ)でございます。

さてこのページは脱力系Java+CUDAシリーズのつづきです。
前回まで、インストール&ビルドが正常終了したので、本当にJavaからCUDAが呼べるのか確かめます。(といってもsample/tutorialの実行ですが)
まずはsampleをclone
sampleをGitHubからCloneしてきます。
JCuda本家のsampleがありますのでそこから取得します。
git clone https://github.com/jcuda/jcuda-samples.git
チュートリアルはこちら
取得できたら、Eclipseでmavenプロジェクトとしてimportしましょう
ほかのJCudaソースごとimportしてみます。(../jcudaは存在していない状態で実行)

MavenプロジェクトとしてImportします
プロジェクトのインポート/Maven/既存 Maven プロジェクト / ルートディレクトリ(フォルダ参照選択)/プロジェクト(選択)/完了 します。

jcuda-samples が取り込まれているか確認します。

jcuda-samplesはjcudaのバージョンがあっていないことがあるので、pom.xmlを修正します。バージョンを今回のバージョンにあわせます。11.2.0⇒12.0.0して「保存」!

Mavenの更新を反映させます
パッケージ・エクスプローラのjcuda-samplesフォルダで右ボタンメニューを出し、Maven/プロジェクトの更新 を選択します。

使用可能なMavenコードベースの一覧が表示されるので、すべて選択し、[OK]をクリックします。(Mavenプロジェクトがネットワークを参照して更新されます)
sampleを実行してみます
jcuda/samples/JCudaAllocationKernel.java 上で右ボタンメニューを出し実行/2Javaアプリケーションを選択します。

所定のCUDAカーネル(拡張子 .cu)をnvcc(NVidiaのカーネルコンパイラ)が実行され、つづけてJavaのmain()が実行されます。Deviceにカーネルが載せられ、スレッドがAllocateされると正常にCUDA機能を呼べています。
BLASのsample(jcuda/jcublas/samples/JCublas2MatrixInvert.javaも同様に実行してみましょう。配列内容が表示されていれば、CUDAのcuBlasが動作しています!

では実際にいろいろ実行してみてください。
なお、cuDNN系のサンプルは現状ではエラーがでます。諦めてください。
疑問:もしかしてMavenでこのように定義しているなら、ビルドしなくても、sampleのpom.xmlを編集してmavenのclean installすれば(バイナリをネットから取得して)動くのかなぁぁ??。
cuPyのElementwiseKernelみたいなこととができるのかなと思って、
JCudaDriverBasicGraphExampleを動かしてみました。(すこしだけソース修正が必要でした)
単純にカーネル部*.cu ファイルをstringで持って、コーディングできるだけのようです。ファイルが分散しない分だけいいけど、文字列連結部分が好きくありません。

この見栄えなら*.cu ファイルに書いておいてもいい気がします。
うまくいったので、歌いましょう
🎵ジャバ ジャバ ビバ ドゥ ジャバ ビバ ドゥ~♫ い~ちょ~~し~~~🎶
JCudaはCUDA12.x系(当ブログ記載時点で最新は12.6/確認は12.5)で動作できることを(まずはWindowsで)確認できました!
「線形代数」がそこそこできるためには、あとN次元配列がうまく扱えないといけません。Python/NumpyみたいなND4Jを入れてどうなのかみてみます。
次回「やわやわ」編に乞うご期待