Metal Display On Mac - Performance Tuning

With the latest WIP, metal is the default display technology on Mac and we are at a point where the majority of display features in Rhino are implemented with metal. This means we are now trying to find and fix performance issues. If you have a model that appears to be underperforming on Mac, please let us know so we can see if anything can be done to improve the display speed.

Thanks,
Steve

3 Likes

3 posts were merged into an existing topic: Slow canvas UI (with multiple elements)

In order to be more helpful, what do you mean by underperforming?

For example: Legacy OpenCL display seems to be a lot slower in RH8 overall, compared to RH7. Metal brings the speed up again, but only about on par with RH7 OpenCL for some files. Would such a example file be helpful?

Rhino 8 running Metal should outperform Rhino 7 running OpenGL on all existing models and in most cases heavily outperform. If that does not seem to be the case, I would love to examine a 3dm to see what can be done.

I don’t care about any results with Rhino 8 running OpenGL. This is legacy technology in Rhino 8 and will eventually go away.

Hope that helps.

Got it and also just to be clear I am still on an Intel Mac with AMD GPU, but the improvements should still apply I guess.

I am digging up some old models… where should I send them? To the McNeel upload?

McNeel upload addressed to me or direct email to me (steve@mcneel.com) would work.

Metal is supported and works on Intel Macs with AMD GPUs. The improvements should apply.

Ok I will send files that underperform compared to RH7 and perform only equally (as an improvement is expeceted).

I uploaded the first file, slower in RH8 and waaaayyy slower in Ghosted mode

another one: 3x slower than RH7

Thank you; we will start digging into these models this week.

I uploaded 2 more, 4 in total. These are some really old files, so dont take the modeling approaches too seriously :smiley:

if you need more let me know I will continue digging my Rhino files haha

With regards to your 200121_task_2 model, I get the following TestMaxSpeed results in shaded mode:

  • Rhino 7: 8.8 frames per second
  • Rhino 8: 30 frames per second

I’m testing on an M2 so results will be different, but 8 seems 3x faster than 7 instead of 3x slower. What kind of results are you seeing?

By the way, I do see some spots that can be further optimized for this model in Rhino 8

Great to hear, keep these optimizations coming :100:

On my Intel MBP16" with full screen and ZEA command run, shaded mode, I am getting
RH7: 30fps
RH8: 12fps

How old is this MBP16"? Can you run SystemInfo and post results here?

MBP16_systemInfo.txt (6.4 KB)

There you go!

Considering that it is a 2019 Intel model, the M2 should significantly outperform it, no?

I would assume that an M2 would outperform a 2019 Intel, but that isn’t really the issue. I want to make sure the Rhino 8 outperforms Rhino 7 on your 2019 Intel.

1 Like

@rudolf.neumerkel I’ve been focused on your 200121_task_2 file this last week. There are still more optimizations to be made for this file, but you should hopefully see a significant improvement with the WIP that we just released.

Hi
I don’t know if this Qualify…?
The same mesh here, when being rotated directly in the view port as an independent mesh, is about 10 times faster compare to when it is set as a mesh in GH, and rotated in the Rhino ViewPort.


Is this expected…? it is terribly slow to work with !
[The same mesh tested in shaded view on a maximized viewport.]

[the rhino file is 80Mb, too large to add here, I can upload it if needed?]
thanks a lot
akash

Hi Akash -

I’m not sure (:

I’m not seeing that here. I get 34.71 FPS with the Rhino geometry and 26.53 FPS with the Grasshopper geometry in a quick test.

I’m on an elder MacBook Air with a small screen, so things like “maximized viewport” mean different things. Also, the default Shaded display mode shows mesh wires, so you have a customized display mode.

Yes, please. Include your SystemInfo and the custom display mode as well.
-wim

Hi @wim
thanks
I sent you the mesh headprop just now.
The Gh file is just like in the image. in the above report, ‘I did see it initially on a largish file, that is currently highly bottled-necked,’ ‘so I tested on a clean new file with just these 3 components’
the speed in the rhino viewport was the same.

I don’t have a custom display, I simply unchecked some stuff [like mesh wire].

Here’s the size the viewport as listed in the properties tab
and the display setting

Summary

Rhino 8 SR0 2023-7-25 (Rhino WIP, 8.0.23206.14396, Git hash:master @ 1e9fadf24e2aade96dde6e2eafa110f6c1e80245)
License type: Commercial, build 2023-07-25
License details: Cloud Zoo
Expires on: 2023-09-08

Apple macOS Version 13.4.1 (c) (Build 22F770820d) (Physical RAM: 96Gb)
Mac Model Identifier: Mac14,6
Language: en-TH (MacOS default)

Apple M2 Max (OpenGL ver:4.1 Metal - 83.1)

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On

Anti-alias mode: 4x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: Apple
Render version: 4.1
Shading Language: 4.10
Maximum Texture size: 16384 x 16384
Z-Buffer depth: n/a
Maximum Viewport size: 16384 x 16384
Total Video Memory: 72 GB
Graphics: Apple M2 Max
Displays: Unknown (255dpi 2x)

Metal GPU Family Apple 7
Metal GPU Family Common 3
Metal GPU Family Mac 2
Graphics processors
Apple M2 Max
Color LCD (1728 x 1117 @ 120.00Hz)

USB devices
None

Bluetooth devices
None

Third party kernel extensions
None

Third party plugins
/usr/lib/swift/libswiftCore.dylib
/usr/lib/swift/libswiftCoreFoundation.dylib
/usr/lib/swift/libswiftDarwin.dylib
/usr/lib/swift/libswiftDispatch.dylib
/usr/lib/swift/libswiftIOKit.dylib
/usr/lib/swift/libswiftObjectiveC.dylib
/usr/lib/swift/libswiftXPC.dylib
/usr/lib/swift/libswift_Concurrency.dylib
/usr/lib/swift/libswift_StringProcessing.dylib
/usr/lib/swift/libswiftos.dylib
/usr/lib/swift/libswift_RegexParser.dylib
/usr/lib/swift/libswiftMetal.dylib
/usr/lib/swift/libswiftsimd.dylib
/Library/Frameworks/3DconnexionClient.framework/Versions/A/3DconnexionClient
/usr/lib/usd/libIex.dylib
/usr/lib/usd/libHalf.dylib
/usr/lib/usd/libAlembic.dylib
/usr/lib/usd/libusd_ms.dylib
/usr/lib/usd/libosdCPU.dylib
/usr/lib/usd/libImath.dylib
/usr/lib/usd/libIlmThread.dylib
/usr/lib/usd/libIexMath.dylib
/usr/lib/usd/libtbb.dylib
/usr/lib/usd/libMaterialXCore.dylib
/usr/lib/usd/libMaterialXFormat.dylib
/usr/lib/swift/libswiftAVFoundation.dylib
/usr/lib/swift/libswiftCoreAudio.dylib
/usr/lib/swift/libswiftCoreLocation.dylib
/usr/lib/swift/libswiftCoreMIDI.dylib
/usr/lib/swift/libswiftCoreMedia.dylib
/usr/lib/swift/libswiftQuartzCore.dylib
/usr/lib/swift/libswiftUniformTypeIdentifiers.dylib
/usr/lib/swift/libswiftNetwork.dylib
/usr/lib/swift/libswiftCryptoTokenKit.dylib
/usr/lib/swift/libswiftCoreGraphics.dylib
/usr/lib/swift/libswiftOSLog.dylib
/usr/lib/swift/libswiftAccelerate.dylib
/usr/lib/swift/libswiftAppKit.dylib
/usr/lib/swift/libswiftCoreImage.dylib
/usr/lib/swift/libswiftCompression.dylib
/usr/lib/swift/libswiftFileProvider.dylib
/usr/lib/swift/libswiftIntents.dylib
/usr/lib/swift/libswiftPrivate_BiomePubSub.dylib
/usr/lib/swift/libswiftPrivate_BiomeStreams.dylib
/usr/lib/swift/libswiftExtensionFoundation.dylib
/usr/lib/swift/libswiftCoreML.dylib
/usr/lib/swift/libswiftVision.dylib
/usr/lib/swift/libswiftDemangle.dylib
/usr/lib/swift/libswiftSystem.dylib
/usr/lib/swift/libswiftExtensionKit.dylib
/usr/lib/swift/libswiftRegexBuilder.dylib
/usr/lib/swift/libswiftWebKit.dylib
/usr/lib/swift/libswiftGLKit.dylib
/usr/lib/swift/libswiftMapKit.dylib
/usr/lib/swift/libswiftModelIO.dylib
/usr/lib/swift/libswiftSceneKit.dylib
/Users/akashlotan/Library/Application Support/McNeel/Rhinoceros/MacPlugIns/bella_rhino.rhp/libbella_dotnet_native.dylib
/Users/akashlotan/Library/Application Support/McNeel/Rhinoceros/packages/8.0/IntelDenoiser/0.6.7/libtbb.12.dylib
/Users/akashlotan/Library/Application Support/McNeel/Rhinoceros/packages/8.0/IntelDenoiser/0.6.7/libOpenImageDenoise.1.4.3.dylib
/usr/lib/log/liblog_network.dylib

Rhino plugins that do not ship with Rhino
/Users/akashlotan/Library/Application Support/McNeel/Rhinoceros/MacPlugIns/bella_rhino.rhp “Bella” 23.3.0.0
/Applications/RhinoWIP.app/Contents/PlugIns/import_modelio_macos.rhp “Model IO Import” 8.0.23206.1002
/Users/akashlotan/Library/Application Support/McNeel/Rhinoceros/packages/8.0/IntelDenoiser/0.6.7/IntelDenoiser.Mac.rhp “IntelDenoiser.Mac” 1.0.0.0

Rhino plugins that ship with Rhino
/Applications/RhinoWIP.app/Contents/PlugIns/MPlane.rhp “MPlane” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_GTS.rhp “GTS Triangle Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_VRML.rhp “VRML/X3D Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCycles.rhp “RhinoCycles” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/MeshFromPoints.rhp “MeshFromPoints” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_STL.rhp “STL Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_3MF.rhp “import_3MF” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_XAML.rhp “export_xaml” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/ShrinkWrap.rhp “ShrinkWrap” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/Export_CD.rhp “Cult3D Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_PDF.rhp “PDFReader” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_OBJ.rhp “Import_OBJ” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/Export_XGL.rhp “XGL Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/SectionTools.rhp “SectionTools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_IGES.rhp “IGES Import Plug-in” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_DGN.rhp “MicroStation file import: import_DGN” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_X_T.rhp “Parasolid Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/NamedSnapshots.rhp “Snapshots” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/RhinoBonusTools.rhp “Rhino Bonus Tools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_CSV.rhp “Comma Separated Value Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_FBX.rhp “Import_FBX” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_SLC.rhp “SLC Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_FBX.rhp “Export_FBX” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_AI.rhp “Adobe Illustrator Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/GrasshopperPlugin.rhp “Grasshopper” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/import_VDA.rhp “VDA Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_Points.rhp “Points Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_SLC.rhp “SLC Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_Points.rhp “Points Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_RAW.rhp “Raw Triangles Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_WAMIT.rhp “WAMIT import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_3DS.rhp “3D Studio Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/PanelingTools.rhp “PanelingTools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_X.rhp “X Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_VDA.rhp “VDA Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/AnimationTools.rhp “AnimationTools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_SKP.rhp “SketchUp Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_STL.rhp “STL Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_OBJ.rhp “export_OBJ” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/Export_UDO.rhp “Moray Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_WAMIT.rhp “WAMIT Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Commands.rhp “Commands” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_AMF.rhp “Import_AMF” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/SolidTools.rhp “SolidTools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_SKP.rhp “SketchUp Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhMaterialEditor.framework “Renderer Development Kit” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_POV.rhp “POV-Ray Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_LWO.rhp “Lightwave Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/CreaseAngle.rhp “CreaseAngle” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_ACAD.rhp “AutoCAD file import: import_ACAD” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_USD.rhp “Export USD” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_SVG.rhp “Import_SVG” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RDK_EtoUI.rhp “RDK_EtoUI” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/Displacement.rhp “Displacement” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_glTF.rhp “Export glTF” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/import_VRML.rhp “VRML Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_OFF.rhp “OFF Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/BlockEdit.rhp “BlockEdit” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/RhinoLabsTools.rhp “Rhino Labs Tools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_X.rhp “X Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_IGES.rhp “IGES Export Plug-in” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/export_ACAD.rhp “AutoCAD file export : export_ACAD” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Squish.rhp “Squish” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/NamedPositions.rhp “Named Position” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Export_RIB.rhp “Renderman Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/Import_SolidWorks.rhp “Solidworks Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_AMF.rhp “Export_AMF” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/import_RAW.rhp “RAW Triangle Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/import_PLY.rhp “PLY - Polygon File Format Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/import_DST.rhp “Import_DST” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/import_E57.rhp “E57 Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_STEP.rhp “STEP Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoRenderCycles.rhp “Rhino Render” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/export_LWO.rhp “Lightwave Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_3MF.rhp “export_3MF” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_DAE.rhp “Export_DAE” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_glTF.rhp “Import glTF” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/MeshCommands.rhp “MeshCommands” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/import_STEP.rhp “STEP Import” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/PlugIns/export_SAT.rhp “ACIS Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_PLY.rhp “PLY - Polygon File Format Export” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/Export_GTS.rhp “GTS Export” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoDLR_Python.rhp “IronPython” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/RhinoRender.rhp “Legacy Rhino Render” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCodePlugin.rhp “RhinoCodePlugin” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/QuadRemesh.rhp “QuadRemesh” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/MeshTools.rhp “MeshTools” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_PDF.rhp “PDF Export” 8.0.23206.14396
/Applications/RhinoWIP.app/Contents/PlugIns/Import_M.rhp “Import_M” 8.0.23206.1002
/Applications/RhinoWIP.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_SVG.rhp “Export SVG” 8.0.23206.14396

Thanks a lot
Akash