- 616 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:36:25 ]
- mingwでsseなんでだいぶ資料が少ないからついてこれる人がいるか心配なんですけどw
java側でループのテストして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); }
|

|