★お前らJavaはJNIで組もうぜ★
■ このスレッドは過去ログ倉庫に格納されています
0616デフォルトの名無しさん
2009/01/04(日) 17:36:25java側でループのテストして1−1500回のループは通るのですがそれ以降はJVMが落ちて、この[1]から[2]の間でバイオレンスらしいです。
それとjfloat a[4]としてますが、型の宣言方法はいろいろあってそれぞれ試してみたんですけど、どうもbuiltin loadups, addpsの方が問題みたいでした。
addss のスカラー版はループテストは完了していて問題ないです。
まだ敷居が高いですけど、もしsseが使えてライブラリ化できるとjavaで画象処理とかエンコとかストリーム・ライブとかが少しは早くなるんじゃないでしょうか。
JNIEXPORT void JNICALL xxx_Lsse_add_1ps
(JNIEnv *env, jclass clj, jfloatArray dstj, jint ix1, jint cnt, jfloatArray srcj, jint ix2)
{
typedef jfloat v4sf __attribute__ ((vector_size(16))) __attribute__((aligned(16)));
jfloat adst[4],asrc[4];
v4sf d1,s1;
if (cnt<0 || cnt>=5) return;
(*env)->GetFloatArrayRegion(env, dstj, ix1, cnt, adst);
(*env)->GetFloatArrayRegion(env, srcj, ix2, cnt, asrc);
printf(" [1]s%d", global_loop++);
d1=__builtin_ia32_loadups (adst);
s1=__builtin_ia32_loadups (asrc);
printf(" [2]");
d1=__builtin_ia32_addps (d1,s1);
__builtin_ia32_storeups (adst,d1);
printf(" [3]");
(*env)->SetFloatArrayRegion(env, dstj, ix1, cnt, adst);
}
■ このスレッドは過去ログ倉庫に格納されています