uncomplicate / neanderthal

Fast Clojure Matrix Library
http://neanderthal.uncomplicate.org
Eclipse Public License 1.0
1.06k stars 56 forks source link

(Mac OS) Can not run Nenderthal's OpenCL backend without having CLBlast in my brew repo #44

Closed milikicn closed 5 years ago

milikicn commented 6 years ago

I am using version 0.19.0 of Neanderthal and I am on macOS (High Sierra, v10.13.4). For resolving some other issue for the JOCLBlast project, I have previously installed CLBlast in my homebrew repository. And everything worked fine for my exploration of Neanderthal until I have removed the CLBlast from my brew repository. After this, I started getting the following error. I suppose the problem is with JOCLBlast not being shipped with CLBlast binaries. Anyhow, if someone faces the same problem, the current solution is having CLBlast installed by the brew.

Operating system name: Mac OS X Architecture : x86_64 Architecture bit size: 64 ---(start of nested stack traces)--- Stack trace from the attempt to load the library as a file: java.lang.UnsatisfiedLinkError: no JOCLBlast_1_3_0-apple-x86_64 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at org.jocl.LibUtils.loadLibrary(LibUtils.java:136) at org.jocl.blast.CLBlast.<clinit>(CLBlast.java:53) at uncomplicate.neanderthal.internal.device.clblast$eval33083.invokeStatic(clblast.clj:2000) at uncomplicate.neanderthal.internal.device.clblast$eval33083.invoke(clblast.clj:1997) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.load(Compiler.java:7514) at clojure.lang.RT.loadResourceScript(RT.java:379) at clojure.lang.RT.loadResourceScript(RT.java:370) at clojure.lang.RT.load(RT.java:460) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn__6548.invoke(core.clj:6046) at clojure.core$load.invokeStatic(core.clj:6045) at clojure.core$load.doInvoke(core.clj:6029) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5848) at clojure.core$load_one.invoke(core.clj:5843) at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) at clojure.core$load_lib.invokeStatic(core.clj:5887) at clojure.core$load_lib.doInvoke(core.clj:5868) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5925) at clojure.core$load_libs.doInvoke(core.clj:5909) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5947) at clojure.core$require.doInvoke(core.clj:5947) at clojure.lang.RestFn.invoke(RestFn.java:457) at uncomplicate.neanderthal.opencl$eval17368$loading__6434__auto____17369.invoke(opencl.clj:9) at uncomplicate.neanderthal.opencl$eval17368.invokeStatic(opencl.clj:9) at uncomplicate.neanderthal.opencl$eval17368.invoke(opencl.clj:9) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7051) at clojure.lang.Compiler.load(Compiler.java:7514) at clojure.lang.RT.loadResourceScript(RT.java:379) at clojure.lang.RT.loadResourceScript(RT.java:370) at clojure.lang.RT.load(RT.java:460) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn__6548.invoke(core.clj:6046) at clojure.core$load.invokeStatic(core.clj:6045) at clojure.core$load.doInvoke(core.clj:6029) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5848) at clojure.core$load_one.invoke(core.clj:5843) at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) at clojure.core$load_lib.invokeStatic(core.clj:5887) at clojure.core$load_lib.doInvoke(core.clj:5868) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5929) at clojure.core$load_libs.doInvoke(core.clj:5909) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5947) at clojure.core$require.doInvoke(core.clj:5947) at clojure.lang.RestFn.invoke(RestFn.java:436) at opencl1$eval1426$loading__6434__auto____1427.invoke(opencl1.clj:9) at opencl1$eval1426.invokeStatic(opencl1.clj:9) at opencl1$eval1426.invoke(opencl1.clj:9) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7051) at clojure.lang.Compiler.load(Compiler.java:7514) at user$eval1422.invokeStatic(form-init9065433951007486313.clj:1) at user$eval1422.invoke(form-init9065433951007486313.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7025) at clojure.core$eval.invokeStatic(core.clj:3206) at clojure.core$eval.invoke(core.clj:3202) at clojure.main$repl$read_eval_print__8572$fn__8575.invoke(main.clj:243) at clojure.main$repl$read_eval_print__8572.invoke(main.clj:243) at clojure.main$repl$fn__8581.invoke(main.clj:261) at clojure.main$repl.invokeStatic(main.clj:261) at clojure.main$repl.doInvoke(main.clj:177) at clojure.lang.RestFn.invoke(RestFn.java:1523) at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__820.invoke(interruptible_eval.clj:87) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.AFn.applyTo(AFn.java:144) at clojure.core$apply.invokeStatic(core.clj:657) at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1965) at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1965) at clojure.lang.RestFn.invoke(RestFn.java:425) at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invokeStatic(interruptible_eval.clj:85) at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:55) at clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__865$fn__868.invoke(interruptible_eval.clj:222) at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__860.invoke(interruptible_eval.clj:190) at clojure.lang.AFn.run(AFn.java:22) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Stack trace from the attempt to load the library as a resource: java.lang.UnsatisfiedLinkError: /private/var/folders/p5/fq4hp8m11js2p0cvkn0kpwgw0000gn/T/libJOCLBlast_1_3_0-apple-x86_64.dylib: dlopen(/private/var/folders/p5/fq4hp8m11js2p0cvkn0kpwgw0000gn/T/libJOCLBlast_1_3_0-apple-x86_64.dylib, 1): Library not loaded: /usr/local/opt/clblast/lib/libclblast.dylib Referenced from: /private/var/folders/p5/fq4hp8m11js2p0cvkn0kpwgw0000gn/T/libJOCLBlast_1_3_0-apple-x86_64.dylib Reason: image not found at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at org.jocl.LibUtils.loadLibraryResource(LibUtils.java:269) at org.jocl.LibUtils.loadLibrary(LibUtils.java:151) at org.jocl.blast.CLBlast.<clinit>(CLBlast.java:53) at uncomplicate.neanderthal.internal.device.clblast$eval33083.invokeStatic(clblast.clj:2000) at uncomplicate.neanderthal.internal.device.clblast$eval33083.invoke(clblast.clj:1997) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.load(Compiler.java:7514) at clojure.lang.RT.loadResourceScript(RT.java:379) at clojure.lang.RT.loadResourceScript(RT.java:370) at clojure.lang.RT.load(RT.java:460) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn__6548.invoke(core.clj:6046) at clojure.core$load.invokeStatic(core.clj:6045) at clojure.core$load.doInvoke(core.clj:6029) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5848) at clojure.core$load_one.invoke(core.clj:5843) at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) at clojure.core$load_lib.invokeStatic(core.clj:5887) at clojure.core$load_lib.doInvoke(core.clj:5868) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5925) at clojure.core$load_libs.doInvoke(core.clj:5909) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5947) at clojure.core$require.doInvoke(core.clj:5947) at clojure.lang.RestFn.invoke(RestFn.java:457) at uncomplicate.neanderthal.opencl$eval17368$loading__6434__auto____17369.invoke(opencl.clj:9) at uncomplicate.neanderthal.opencl$eval17368.invokeStatic(opencl.clj:9) at uncomplicate.neanderthal.opencl$eval17368.invoke(opencl.clj:9) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7051) at clojure.lang.Compiler.load(Compiler.java:7514) at clojure.lang.RT.loadResourceScript(RT.java:379) at clojure.lang.RT.loadResourceScript(RT.java:370) at clojure.lang.RT.load(RT.java:460) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn__6548.invoke(core.clj:6046) at clojure.core$load.invokeStatic(core.clj:6045) at clojure.core$load.doInvoke(core.clj:6029) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5848) at clojure.core$load_one.invoke(core.clj:5843) at clojure.core$load_lib$fn__6493.invoke(core.clj:5888) at clojure.core$load_lib.invokeStatic(core.clj:5887) at clojure.core$load_lib.doInvoke(core.clj:5868) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5929) at clojure.core$load_libs.doInvoke(core.clj:5909) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5947) at clojure.core$require.doInvoke(core.clj:5947) at clojure.lang.RestFn.invoke(RestFn.java:436) at opencl1$eval1426$loading__6434__auto____1427.invoke(opencl1.clj:9) at opencl1$eval1426.invokeStatic(opencl1.clj:9) at opencl1$eval1426.invoke(opencl1.clj:9) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7051) at clojure.lang.Compiler.load(Compiler.java:7514) at user$eval1422.invokeStatic(form-init9065433951007486313.clj:1) at user$eval1422.invoke(form-init9065433951007486313.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7025) at clojure.core$eval.invokeStatic(core.clj:3206) at clojure.core$eval.invoke(core.clj:3202) at clojure.main$repl$read_eval_print__8572$fn__8575.invoke(main.clj:243) at clojure.main$repl$read_eval_print__8572.invoke(main.clj:243) at clojure.main$repl$fn__8581.invoke(main.clj:261) at clojure.main$repl.invokeStatic(main.clj:261) at clojure.main$repl.doInvoke(main.clj:177) at clojure.lang.RestFn.invoke(RestFn.java:1523) at clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__820.invoke(interruptible_eval.clj:87) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.AFn.applyTo(AFn.java:144) at clojure.core$apply.invokeStatic(core.clj:657) at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1965) at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1965) at clojure.lang.RestFn.invoke(RestFn.java:425) at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invokeStatic(interruptible_eval.clj:85) at clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:55) at clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__865$fn__868.invoke(interruptible_eval.clj:222) at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__860.invoke(interruptible_eval.clj:190) at clojure.lang.AFn.run(AFn.java:22) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) ---(end of nested stack traces)--- , compiling:(uncomplicate/neanderthal/internal/device/clblast.clj:1997:1)

gpu commented 6 years ago

@blueberry The image not found part already was an issue in https://github.com/uncomplicate/neanderthal/issues/15#issuecomment-223988487 The linked comment shows the part where it suddenly was resolved, and it seemed like this was related to a setting of the RPATH in CLBlast.

I wonder what might have changed now - maybe @amherag has an idea?

blueberry commented 6 years ago

Last time I was in contact with @amherag he mentioned that he has tons and tons of work, so I doubt that he will be able to follow this discussion. :(

blueberry commented 5 years ago

@milikicn Is this still a problem or it has been resolved?

milikicn commented 5 years ago

Apparently not. I set up a new project with the latest Neanderthal version (0.20.4) and had no problems loading the library.