少佐!わたくしより先にいくなんて
こんにちわ、こんばんわ。かえるのクーの助手の「井戸中 聖」(いとなか セイ)でございます。
Javaの不満が知らないうちに解消され、これならあと「線形代数」不得意問題が解決すれば、科学技術計算にも十分つかえるんじゃない?とおもう今日この頃。

ちなみに、わたくしはお仕事がらJavaは事務系処理にはよく使用するのですが、技術計算系には(大昔の遅いJavaを知っており、)不向きな先入観が強いので使ったことがありません。最近のベンチマークは「これが本当にあの遅くてとろいJavaなのか?」と思うベンチマークとともに、実際に動かすととてつもなく性能がいいので、Javaを見直しています。
Javaで不得意/苦手科目といわれる「線形代数系」をCUDAで補完してみようと思います。Java+CUDAができることは知っていたのですが、ようやくやってみる気になった次第です。

いろいろ調べてみるとJCudaがよさそうなのですが、JCudaはそんなに頻繁にはUpdateしていないのと、もともとのJCudaのメインサイトがアクセスできないのが気になります。。。
ここ1カ月くらいの「お題」にするつもりなので、いつも通り「ゆる~く」進みます。
JCudaはよいのか?
いろいろ検索してもJava+CUDAの記事はそんなにないのですが、JCudaの記事が比較的多くみられたので、まずはこれでやってみます。
(現在Windows10へインストール中)しばしお待ちください。
Java 21 LTS
jcuda(Update for 12.0.0)
わ~。ビルド方法がほぼわかんないです。甘くみてました。
ECLIPSE (Pleiades2024):スプラッシュ画像がますますかっこよいです。

CUDA 12.16 -> sampleがまだできていなかったので、sampleソースがある12.15(.1)に変更
cuda samplesはGITから最新(今日時点で12.15版)を取得してコンパイルしてます。
「CUDA サンプルコード」で検索すると、先代クー(Ⅰ世)の記事がトップページにあったりしたので驚きました。Googleのアルゴリズム大幅変更以来、当サイトページ全般はトップページどころか10ページ内にも掛からなくなっていたので驚きです。
以前はインストールするとサンプルもついてきていましたが、CUDA12からは別途GITから取得する必要があるみたいです。
Docker(Ubuntsu/CUDA環境/そのうち試行します)
現在JCudaのソース読み中。。。
C++のソースをコンパイルしてJavaからはJNI(JavaからCなどを呼ぶやつ)で使う模様です。説明があまり書いてないので、のんびり読みます。
まずはネットにあるバイナリ(10.1)実行をしてみることに
コンパイル方法がよくわからないので、アップされているバイナリを実行してちゃんとうごくことを確認してみます。ただ、アップされているのがCUDA 10.1対応版までなので、手持ちのGPUはAmpereなので、10.1は範囲外でした。仕方がないので古いほうのGPU(pascal)は範囲内なので、こちらで動作させてみます。
テスト用のマシン(Windows10)にGTX 1060をいれて CUDA 10.1を入れて、Javaのサンプルプログラムを動かしてみました。
cuda-samplesの中のJCudaConstantMemoryExample.javaを実行すると

となり、問題なく動作するようです。他のJavaからCUDAハードにアクセスするサンプルもだいたいOKのようでした。
CUDA 10.1ではわたくしの現役GPU(RTX 30系)を動作させられないので、コンパイル(C++)する方法を継続して確認します。とりあえずはWindows10で進めます。
JCUDAのJNI系(C++)どうコンパイルするの?
何もわからないので、のんびり試行中です。
(2024/09/17)ゆくりするにもほどがありますが、入手したWin用10.1バイナリ(DLL)はロードエラーで動作しないものもあり、このバイナリでの試行継続を断念することにしました。
1からビルドできる見込みはまったくないのですが、CUDA 11 以降のドライバに対応させるためにネイティブJCUDA(C++:おそらくJavaとCUDAドライバ本家をJNIでブリッジ)をコンパイルしてみることにします。OPEN系C++ソースのコンパイルは技術的(トラブルシューティング的)にとっても弱く、うまくいかないケースが圧倒的に多いのですが、今回は少し悪あがいてみます。
よって、このページは一旦終了し、実験モードに入ります。
ではまた。ごきげんよろしゅるるるる。
続きはこちら。