Chromebookで使用しています。
エンジン登録までは出来るのですが、初期インストールされているgpsfish以外は
エンジン起動エラーになります。
原因は分かりますでしょうか?
Chromebookで追加エンジンが起動エラーになる
Re: Chromebookで追加エンジンが起動エラーになる
どういった機種でどのエンジンを試したのかわかりませんが、
1.搭載CPUにエンジンが未対応
2.メモリが足りない
どちらかだと思います。
ShogiDroidに付属しているgpsfishが一番いろいろな環境で動きます。
1.搭載CPUにエンジンが未対応
2.メモリが足りない
どちらかだと思います。
ShogiDroidに付属しているgpsfishが一番いろいろな環境で動きます。
Re: Chromebookで追加エンジンが起動エラーになる
返信ありがとうございます。
機種ですが、ASUS Chromebook flip c302caになります。
CPUがIntel Core m3/メモリは4GBです。
CPUでしょうか、、、
機種ですが、ASUS Chromebook flip c302caになります。
CPUがIntel Core m3/メモリは4GBです。
CPUでしょうか、、、
Re: Chromebookで追加エンジンが起動エラーになる
https://plus.google.com/u/1/11099731599 ... aY5pagQdKP から来ました。
手元にIntel CPU (Core i7)のChromebookがあるので試してみた所、確かに技巧 20160727のengineが起動直後にクラッシュしました。
ChromebookのAndroid環境はMarshmallowで32bit (Android OSが動作しているコンテナ内で動くのは32bit processes)です。上のbacktraceのアドレスとengineのバイナリのobjdumpの結果を見比べた所、
の代入のところ
でとりあえずSEGVしていまして、ComputeCheckers()の戻したtemporary objectからのcopyは__m128i同士のcopyだと思いますが、 にもかかわらず一方のアドレス(eax)が16 byteにalignしていないのが問題のようでした。eaxが16でなく8 byteにalign (0x60f35f28) してしまっています。
あまりちゃんとコードを読んでいないので色々勘違いがあるかもしれませんが、多分operator newやmallocが8 byte alignのアドレスを戻すような環境では技巧は動作しないということだと思われ、技巧の本家のページに64bit OSのみ対応と書いてあるのはこれが理由かなと思います。念のため、src/bitboard.h の32bit Windows向けworkaroundと思われる mm_allocator とそれを使っている箇所を有効にして試してみましたが、32bit Linux向けには十分ではないようで、別の箇所(多分newされた__m128iを持つobjectを触る所)で同じくalignmentの問題でクラッシュしました。
で...なるべくソースコードに触らずに、最小限の変更でIntel Chromebookで動くようにする方法があるかなぁと思って試してみた所、美しくありませんが下記patchでoperator newの戻りを強制的に16 byte alignedにすることで一応Intel Chromebookで技巧が動作しました。
技巧 20160727以外のエンジンは試していないです。Intel Chromebookを使わずにこの問題を再現させる簡単な方法があるかも見ていないです。
主に上のguestさんへ:
技巧 20160727ですが、CloudPad(?)というIntel CPUのAndroid tablet (Marshmallow) だと問題なく動きました。うっかり確認し忘れましたが、多分OSが64bit版で上記alignmentの問題が起こらないからだと思われます。また、ARM Chromebook (32bit Marshmallow) でも問題なく動きました。一方、MarshmallowなAndroidを使っている(今のところ全ての)Intel Chromebook ではCPUの型番によらず問題が再現するだろうと思います。
https://www.youtube.com/watch?v=86MBG-k4m6Y などによるとChromebookのAndroid環境はMarshmallowからNougatに移行中で、Nougatになれば32bit Intelでも技巧 20160727が動作するようになるんじゃないかと思います(Nougatではmemory allocatorがdlmallocからjemallocというのに確か入れ替わっていて、jemallocのmallocは確か32bit Intelでも常に16 byteにalignしたアドレスを戻すので。) ただ、お使いのIntel ChromebookがNougatにupdateされるかまではアナウンスされていないと思います。
手元にIntel CPU (Core i7)のChromebookがあるので試してみた所、確かに技巧 20160727のengineが起動直後にクラッシュしました。
コード: 全て選択
03-12 21:47:16.012 10412 10412 F libc : Fatal signal 11 (SIGSEGV), code 128, fault addr 0x0 in tid 10412 (gikou_20160727)
03-12 21:47:16.063 22 22 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-12 21:47:16.063 22 22 F DEBUG : Revision: '0'
03-12 21:47:16.064 22 22 F DEBUG : ABI: 'x86'
03-12 21:47:16.064 22 22 E DEBUG : AM write failed: Broken pipe
03-12 21:47:16.064 22 22 F DEBUG : pid: 10412, tid: 10412, name: gikou_20160727 >>> /data/user/0/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727 <<<
03-12 21:47:16.064 22 22 F DEBUG : signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0
03-12 21:47:16.065 22 22 F DEBUG : eax 60f35f28 ebx 5ed8deb8 ecx 5f6d71a0 edx 5f6ec7c0
03-12 21:47:16.065 22 22 F DEBUG : esi ffcf8220 edi 00000010
03-12 21:47:16.065 22 22 F DEBUG : xcs 00000023 xds 0000002b xes 0000002b xfs 00000000 xss 0000002b
03-12 21:47:16.065 22 22 F DEBUG : eip 5ecd0d6c ebp ffcf86a0 esp ffcf8160 flags 00010206
03-12 21:47:16.068 22 22 F DEBUG :
03-12 21:47:16.068 22 22 F DEBUG : backtrace:
03-12 21:47:16.068 22 22 F DEBUG : #00 pc 00078d6c /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068 22 22 F DEBUG : #01 pc 0007dd79 /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068 22 22 F DEBUG : #02 pc 0007e2f8 /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068 22 22 F DEBUG : #03 pc 0009b4f7 /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068 22 22 F DEBUG : #04 pc 00006536 /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.078 22 22 F DEBUG :
03-12 21:47:16.078 22 22 F DEBUG : Tombstone written to: /data/tombstones/tombstone_07
ChromebookのAndroid環境はMarshmallowで32bit (Android OSが動作しているコンテナ内で動くのは32bit processes)です。上のbacktraceのアドレスとengineのバイナリのobjdumpの結果を見比べた所、
コード: 全て選択
void Position::InitStateInfo() {
...
current_state_info_->checkers = ComputeCheckers();
の代入のところ
コード: 全て選択
78d6c: 66 0f 7f 08 movdqa %xmm1,(%eax)
でとりあえずSEGVしていまして、ComputeCheckers()の戻したtemporary objectからのcopyは__m128i同士のcopyだと思いますが、 にもかかわらず一方のアドレス(eax)が16 byteにalignしていないのが問題のようでした。eaxが16でなく8 byteにalign (0x60f35f28) してしまっています。
あまりちゃんとコードを読んでいないので色々勘違いがあるかもしれませんが、多分operator newやmallocが8 byte alignのアドレスを戻すような環境では技巧は動作しないということだと思われ、技巧の本家のページに64bit OSのみ対応と書いてあるのはこれが理由かなと思います。念のため、src/bitboard.h の32bit Windows向けworkaroundと思われる mm_allocator とそれを使っている箇所を有効にして試してみましたが、32bit Linux向けには十分ではないようで、別の箇所(多分newされた__m128iを持つobjectを触る所)で同じくalignmentの問題でクラッシュしました。
で...なるべくソースコードに触らずに、最小限の変更でIntel Chromebookで動くようにする方法があるかなぁと思って試してみた所、美しくありませんが下記patchでoperator newの戻りを強制的に16 byte alignedにすることで一応Intel Chromebookで技巧が動作しました。
コード: 全て選択
diff -ur Gikou-android_20160727.orig/jni/Android.mk Gikou-android_20160727/jni/Android.mk
--- Gikou-android_20160727.orig/jni/Android.mk 2016-07-27 04:21:52.000000000 -0700
+++ Gikou-android_20160727/jni/Android.mk 2017-03-12 19:06:18.315009762 -0700
@@ -44,6 +44,10 @@
LOCAL_LDFLAGS += -fPIE -pie
LOCAL_LDLIBS =
+ifeq ($(TARGET_ARCH_ABI),x86)
+ LOCAL_LDFLAGS += -Wl,--wrap,malloc
+endif
+
LOCAL_C_INCLUDES := ../ ../src
LOCAL_CPP_FEATURES += exceptions rtti
diff -ur Gikou-android_20160727.orig/src/bitboard.cc Gikou-android_20160727/src/bitboard.cc
--- Gikou-android_20160727.orig/src/bitboard.cc 2016-07-27 04:21:52.000000000 -0700
+++ Gikou-android_20160727/src/bitboard.cc 2017-03-12 19:30:09.222978004 -0700
@@ -524,3 +524,11 @@
}
} // namespace
+
+#if !defined(IS_ARM) && !defined(IS_64BIT)
+#include <stdlib.h>
+extern "C" void* __wrap_malloc(size_t size) {
+ return ::memalign(16, size);
+}
+#endif
+
技巧 20160727以外のエンジンは試していないです。Intel Chromebookを使わずにこの問題を再現させる簡単な方法があるかも見ていないです。
主に上のguestさんへ:
技巧 20160727ですが、CloudPad(?)というIntel CPUのAndroid tablet (Marshmallow) だと問題なく動きました。うっかり確認し忘れましたが、多分OSが64bit版で上記alignmentの問題が起こらないからだと思われます。また、ARM Chromebook (32bit Marshmallow) でも問題なく動きました。一方、MarshmallowなAndroidを使っている(今のところ全ての)Intel Chromebook ではCPUの型番によらず問題が再現するだろうと思います。
https://www.youtube.com/watch?v=86MBG-k4m6Y などによるとChromebookのAndroid環境はMarshmallowからNougatに移行中で、Nougatになれば32bit Intelでも技巧 20160727が動作するようになるんじゃないかと思います(Nougatではmemory allocatorがdlmallocからjemallocというのに確か入れ替わっていて、jemallocのmallocは確か32bit Intelでも常に16 byteにalignしたアドレスを戻すので。) ただ、お使いのIntel ChromebookがNougatにupdateされるかまではアナウンスされていないと思います。
Re: Chromebookで追加エンジンが起動エラーになる
一点細かい訂正ですが、私が試したCloudPadもuserlandは32bitでした。恐らくdlmallocに手が入っているかjemallocを使っているかで問題が再現しないのだと思います。
トピックを最後に上げたユーザー Anonymous on 2018年3月04日(日) 19:09
オンラインデータ
このフォーラムを閲覧中のユーザー: なし & ゲスト[5人]