imagej2 icon indicating copy to clipboard operation
imagej2 copied to clipboard

Mac Native M1 (arm64) support?

Open dstranathan opened this issue 3 years ago • 5 comments

What is the status of Mac Native M1 (arm64) CPU support?

dstranathan avatar Apr 06 '21 22:04 dstranathan

I've had success with Fiji, by downloading with no JRE and using a native JRE (e.g. Azul). Works very well, nice speed up ~40% on a CPU computational task. Some plugins that use compiled libs, etc. may need tweaks. For example getting native CLIJ working resulted in an 8-fold speedup over Rosetta. You can see some of my experience in this twitter thread: https://twitter.com/psobolewskiPhD/status/1342494593082920960?s=20

psobolewskiPhD avatar Apr 10 '21 08:04 psobolewskiPhD

@psobolewskiPhD JogAmp 2.4.0 (JOGL, JOCL, JOAL, Gluegen) was released earlier this month, and the release includes builds for mac-arm64. I should have new releases of imagej2 and fiji by the end of the week that include this release. This will be a big step toward ImageJ2 and Fiji supporting Mac M1 more comprehensively.

ctrueden avatar Feb 28 '23 15:02 ctrueden

Cool, @ctrueden I'm happy to help test, though I'm not sure I've used those elements much previously (as I've been using Fiji with native arm64 JRE for a long time now)

psobolewskiPhD avatar Feb 28 '23 17:02 psobolewskiPhD

@psobolewskiPhD I'm guessing that your current Fiji setup cannot use the 3D Viewer plugin. One easy way to test that is to do:

  • File > Open Samples > T1 Head
  • Image > Type > 8-bit
  • Plugins > 3D Viewer

And see what happens.

My hope is that with the new JOGL 2.4.0, this will either begin working automatically, or else maybe with some small tweak somewhere.

ctrueden avatar Feb 28 '23 18:02 ctrueden

@psobolewskiPhD I'm guessing that your current Fiji setup cannot use the 3D Viewer plugin. One easy way to test that is to do:

  • File > Open Samples > T1 Head
  • Image > Type > 8-bit
  • Plugins > 3D Viewer

And see what happens.

Correct:

(Fiji Is Just) ImageJ 2.9.0/1.53t; Java 11.0.11 [64-bit]; Mac OS X 13.1; 170MB of 10840MB (1%)
 
java.lang.UnsatisfiedLinkError: /private/var/folders/sy/y3_x27j14cxg3_vhycs6cr_h0000gn/T/jogamp_0000/file_cache/jln11471013896064159920/jln8880740635522233983/natives/macosx-universal/libgluegen_rt.dylib: dlopen(/private/var/folders/sy/y3_x27j14cxg3_vhycs6cr_h0000gn/T/jogamp_0000/file_cache/jln11471013896064159920/jln8880740635522233983/natives/macosx-universal/libgluegen_rt.dylib, 0x0001): tried: '/private/var/folders/sy/y3_x27j14cxg3_vhycs6cr_h0000gn/T/jogamp_0000/file_cache/jln11471013896064159920/jln8880740635522233983/natives/macosx-universal/libgluegen_rt.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/private/var/folders/sy/y3_x27j14cxg3_vhycs6cr_h0000gn/T/jogamp_0000/file_cache/jln11471013896064159920/jln8880740635522233983/natives/macosx-universal/libgluegen_rt.dylib' (no such file), '/private/var/folders/sy/y3_x27j14cxg3_vhycs6cr_h0000gn/T/jogamp_0000/file_cache/jln11471013896064159920/jln8880740635522233983/natives/macosx-universal/libgluegen_rt.dylib
	at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
	at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
	at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
	at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2627)
	at java.base/java.lang.Runtime.load0(Runtime.java:768)
	at java.base/java.lang.System.load(System.java:1837)
	at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:604)
	at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:64)
	at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:107)
	at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:488)
	at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:427)
	at com.jogamp.common.os.Platform$1.run(Platform.java:321)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at com.jogamp.common.os.Platform.<clinit>(Platform.java:290)
	at com.jogamp.opengl.GLProfile.<clinit>(GLProfile.java:154)
	at jogamp.opengl.ThreadingImpl$1.run(ThreadingImpl.java:83)
	at jogamp.opengl.ThreadingImpl$1.run(ThreadingImpl.java:66)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at jogamp.opengl.ThreadingImpl.<clinit>(ThreadingImpl.java:66)
	at com.jogamp.opengl.Threading.disableSingleThreading(Threading.java:164)
	at org.scijava.java3d.JoglPipeline.initialize(JoglPipeline.java:130)
	at org.scijava.java3d.Pipeline.createPipeline(Pipeline.java:92)
	at org.scijava.java3d.MasterControl.loadLibraries(MasterControl.java:837)
	at org.scijava.java3d.VirtualUniverse.<clinit>(VirtualUniverse.java:274)
	at ij3d.ImageJ3DViewer.run(ImageJ3DViewer.java:60)
	at ij3d.ImageJ_3D_Viewer.run(ImageJ_3D_Viewer.java:37)
	at ij.IJ.runUserPlugIn(IJ.java:237)
	at ij.IJ.runPlugIn(IJ.java:203)
	at ij.Executer.runCommand(Executer.java:152)
	at ij.Executer.run(Executer.java:70)
	at java.base/java.lang.Thread.run(Thread.java:829)

My hope is that with the new JOGL 2.4.0, this will either begin working automatically, or else maybe with some small tweak somewhere.

Sounds good!

psobolewskiPhD avatar Feb 28 '23 19:02 psobolewskiPhD