Masahiro Sakai
-
2017-07-08T05:47:47+0000
- 更新日時:
2017-07-08T05:47:47+0000
んー、linux-x86_64のCUDA 8.0な環境で、 CプログラムからclGetPlatformIDsを呼ぶとちゃんと返ってくるんだけど、 Haskellプログラムから呼ぶと -1001 (CL_PLATFORM_NOT_FOUND_KHR) が返ってくるんだけど、これ何でだろ……
共有中: 一般公開
Kazuma Arino
-
2017-07-08T06:55:47+0000
なんかいかにもso がロード出来てないっぽい挙動ですが。LD_LIBRARY_PATH的な物の指定を足せば良いとか無いですかね?
Masahiro Sakai
-
2017-07-08T07:15:21+0000
そのあたりが怪しくはあるんですよね。 ただ、LD_LIBRARY_PATHの内容とかは完全に同じなのに、Cで書くと動作して、Haskellだと動作しないというのが謎で……
Kazuma Arino
-
2017-07-08T13:02:48+0000
そこはHaskell側がsoをどうロードするか、という所なので違う事があっても不思議は無さそうですけど、全然Haskell知らんからなぁ。
Masahiro Sakai
-
2017-07-09T03:42:23+0000
ただ、ドライバのsoのロードはlibOpenCLの内部でやっていることで、C版もHaskell版も同じlibOpenCLをダイナミックリンクして、同じclGetPlatformIDsを呼んでいるはずなので、Haskellがsoをどう扱うかとかは直接的には影響しないはずなんですよ。
Kazuma Arino
-
2017-07-09T10:44:07+0000
2ホップ目のload時のサーチパスは起動時の環境変数とかしか見ない、という話なので、ちょっと起動周辺の話には依存してしまいそう。
ただ起動時に子プロセス作って変な環境変数にしてる、とか無い限りは平気そうだけど…
別の何かなのかなぁ。
`dlopen()` and `DL_LOAD_PATH` doesn't properly load secondary dependencies · Issue #7004 · JuliaLang/julia
ただ起動時に子プロセス作って変な環境変数にしてる、とか無い限りは平気そうだけど…
別の何かなのかなぁ。