Input on creating a client and server split for VTK9 based VisIt 3.4 #18929
Replies: 4 comments 4 replies
-
It occurs to me that scalable-rendering is a key reason for OSMesa but not the only reason. What about rendering to 8kx8k window on my mac laptop. Is that possible with just an OpenGL install? I thought that doing those kinds of renderings required OSMesa. Likewise, what about Next, I am not sure I understand your explanation of what we've currently done prior to VTK9. I mean, it sounds like we had one VTK installed and some of it was using OpenGL and other parts using OSMesa or maybe it could be instanced at run time to use one or the other and we just instanced it how we needed it at run time? And, now they've made this next to impossible? Sounds like we need Morph-VTK (like there was once a Morph-MPI)...just kidding. What is ParaView doing for these use cases? I know you were trying to explain it to my yesterday in your office but I didn't fully get it either. Any ideas how would this effect our CI? Mainly just longer build times I guess?? Is there any way to namespace two VTK builds in the same executable and instance either one on demand in various places in VisIt...a sort of VTK instance factory I guess? |
Beta Was this translation helpful? Give feedback.
-
My understanding is the neither the MacOS nor Windows versions use OSMesa. Good point on my explanation about what is currently being done prior to VTK9 regarding OpenGL versus OSMesa. Yes, we would dynamically at run time adjust the LD_LIBRARY_PATH to use OpenGL for the viewer and OSMesa for the engine. ParaView long ago (maybe since the beginning) went with a client build and a server build. The client used OpenGL and the server used OSMesa. I'm not sure if they were ever able to use OpenGL for rendering in the server. Whenever Sandia spoke on the issue they always said that software rendering was plenty good enough, which matches what we observed and said. For the CI, there would probably be a small increase in build times. I suspect the compiles wouldn't be impacted much, but running CMake and creating the tar file would increase since those can't be parallelized. Of course, both builds could be done in parallel with perfect scaling since the builds would be totally independent. Interesting thought on a VTK instance factory, I'm not sure how to do it. |
Beta Was this translation helpful? Give feedback.
-
We can create 'ALIAS' libraries (named anything we want) for individual vtk libraries. But that is a lot of work given the number of vtk libraries. Also, after a 'Find' for a say the vtk-qt version, there would be problems with CMake (target collisions) when we did a 'Find' for the vtk-osmesa version. If there was a way to tell VTK to namespace itself differently when we build and install it that might work. |
Beta Was this translation helpful? Give feedback.
-
Not sure how related this is but will mention. First, do we need to do anything special to do hardware rendering from the viewer on multiple GPUs that might be available on the client? I think that situation is more likely now than it was several years ago. I dunno if it influences thinking. Also, we've had a long standing issue with duplicated rendering-related functionality in both the engine and viewer. That was supposed to all be handled in the VisWindow classes I think but over time, things related to driving rendering and re-execution of plots, etc. has evolved and diffused out of just VisWindow classes and now is duplicated in both engine and viewer. If we think of rendering as always a parallel thing (MPI and/or threads...also thinking multiple GPUs in the client), can we encapsulate all the rendering functionality in a new thingy in VisIt that is shared by both engine and viewer but maybe compiled differently or instanced differently? |
Beta Was this translation helpful? Give feedback.
-
Problem
Currently we build all the VisIt components together and generate a distribution that contains both the client and server components. We build the viewer and GUI with OpenGL support and the engine with OSMesa support. Support for this was in early versions of VTK, but was deprecated several major releases ago. We have been able to patch VTK to continue to support this functionality up until the current VTK9.0 release. Since that release we have been unable to figure out a way to support that functionality in VTK.
Proposed Solution
Build two VisIt distributions. A client distribution and a server distribution. The client distribution contains the client components and links against a VTK built with OpenGL support. The server distribution contains the server components and links against a VTK build with OSMesa support. The two distributions could easily be combined into a single distribution by un-tarring the client distribution and server distributions into the same directory and then re-tarring up the combined installation.
A single client-server distribution could also be built with only OpenGL support. This would be the common way it is built for development. The client-server distribution with an OpenGL client and an OSMesa server would typically only be built for installations on clusters to support off-screen rendering.
Positives
Negatives
_ser
and_par
modes would also need to be builtin a
_vwr
mode. This is only 8 libraries.Details of the solution
build_visit
will be enhanced to build two versions of VTK.They will be placed in
vtk-mesagl
orvtk-osmesa
andvtk-qt
within thethird_party
directory.To build both a client and server, I suggest create a
build_client
andbuild_server
to replacebuild
.The control of building the "client" and "server" will be with the
CMake
variablesVISIT_CLIENT_COMPONENTS_ONLY
andVISIT_SERVER_COMPONENTS_ONLY
. Both will be set toON
by default. The meaning ofVISIT_SERVER_COMPONENTS_ONLY
will change. Can we remove the_ONLY
?Either two config site files will be needed or users can specify the values of
VISIT_CLIENT_COMPONENTS
and VISIT_SERVER_COMPONENTS on the CMake line. Thoughts on which is better?The client will consist of the
viewer
,cli
,gui
,mdserver
.The server will consist of the
engine
,vcl
,mdserver
.In a combined distribution will contain the server version of the
mdserver
.Within the installation the 2 versions will be put in
vtk-qt
andvtk-osmesa
.The internal launcher will set the
LD_LIBRARY_PATH
appropriately for the component being launched.The following libraries will have a
viewer
versionDatabases:
Plots & Operators:
Beta Was this translation helpful? Give feedback.
All reactions