Build paraview for nvidia GPU

Hi
I’m building Paraview 5.9.1 on a redhat machine with a NVIDIA Quattro 5000. Build is successfull and also paraview is running on 4 processes. However it is very slow, worse than building an osmesa version and when I want to check Help->about it crashes with the following error:

( 317.774s) [pvserver.0      ]vtkOpenGLRenderWindow.c:471    ERR| vtkXOpenGLRenderWindow (0x130db9b0): Unable to find a valid OpenGL 3.2 or later implementation. Please update your video card driver to the latest version. If you are using Mesa please make sure you have version 11.2 or later and make sure your driver in Mesa supports OpenGL 3.2 such as llvmpipe or openswr. If you are on windows and using Microsoft remote desktop note that it only supports OpenGL 3.2 with nvidia quadro cards. You can use other remoting software such as nomachine to avoid this issue.                                                                
( 317.776s) [pvserver.0      ]     vtkOpenGLState.cxx:1785  WARN| Hardware does not support the number of textures defined.
pvserver: /root/ParaView-v5.9.1/VTK/Rendering/OpenGL2/vtkTextureObject.cxx:452: void vtkTextureObject::SendParameters(): Assertion `"pre: is_bound" && this->IsBound()' failed.

However glxinfo shows me:

glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro 5000/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 390.144
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 390.144
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 390.144
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

Here are my defined libs using ccmake3 for OpenGL, note the nvidia lib for glx as I’m using VTK_USE_X=YES

OPENGL_EGL_INCLUDE_DIR           /usr/include/EGL 
OPENGL_GLES2_INCLUDE_DIR         /usr/include/GLES2 
OPENGL_GLES3_INCLUDE_DIR         /usr/include/GLES3  
OPENGL_GLX_INCLUDE_DIR           /usr/include/GL  
OPENGL_INCLUDE_DIR               /usr/include/GL 
OPENGL_egl_LIBRARY               /usr/lib64/libEGL.so 
OPENGL_gles2_LIBRARY             /usr/lib64/libGLESv2_nvidia.so.2 
OPENGL_gles3_LIBRARY             /usr/lib64/libGLESv2.so 
OPENGL_glu_LIBRARY               /usr/lib64/libGLU.so 
OPENGL_glx_LIBRARY               /usr/lib64libGLX_nvidia.so.0          
OPENGL_opengl_LIBRARY            /usr/lib64/libOpenGL.so                                                     
OPENGL_xmesa_INCLUDE_DIR         /usr/include/GL

During opertion nvidia-smi returns

nvidia-smi
Tue Nov  2 22:07:06 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.144                Driver Version: 390.144                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro 5000         Off  | 00000000:03:00.0  On |                    0 |
| 30%   72C    P0    N/A /  N/A |     48MiB /  2174MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     11868      G   X                                             33MiB |
|    0     12201      G   pvserver                                       2MiB |
|    0     12202      G   pvserver                                       2MiB |
|    0     12203      G   pvserver                                       2MiB |
|    0     12204      G   pvserver                                       2MiB |
+-----------------------------------------------------------------------------+

Can you try recover OpenGL information with pvpython ?

Hi,
thanks for the response!
The output seems to be right:

>>> from paraview.simple import *
>>> openGLInfo = GetOpenGLInformation()
>>> openGLInfo.GetVendor()
'NVIDIA Corporation'
>>> openGLInfo.GetVersion()
'4.5.0 NVIDIA 390.144'
>>> openGLInfo.GetRenderer()
'Quadro 5000/PCIe/SSE2'
>>> openGLInfo.GetCapabilities()
'server glx vendor string:  NVIDIA Corporation\nserver glx version string:  1.4\nserver glx extensions:  GLX_EXT_visual_info GLX_EXT_visual_rating GLX_EXT_import_context GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGI_video_sync GLX_SGI_swap_
control GLX_EXT_swap_control GLX_EXT_swap_control_tear GLX_EXT_texture_from_pixmap GLX_EXT_buffer_age GLX_ARB_create_context GLX_ARB_create_context_profile GLX_EXT_create_context_es_profile GLX_EXT_create_context_es2_profile GLX_ARB_crea
te_context_no_error GLX_ARB_create_context_robustness GLX_NV_delay_before_swap GLX_EXT_stereo_tree GLX_EXT_libglvnd GLX_ARB_context_flush_control GLX_NV_robustness_video_memory_purge GLX_ARB_multisample GLX_NV_float_buffer GLX_ARB_fbconf
ig_float GLX_NV_swap_group GLX_EXT_framebuffer_sRGB GLX_NV_multisample_coverage GLX_NV_copy_image GLX_NV_copy_buffer GLX_NV_video_capture \nclient glx vendor string:  NVIDIA Corporation\nclient glx version string:  1.4\nglx extensions:
GLX_EXT_visual_info GLX_EXT_visual_rating GLX_EXT_import_context GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGI_video_sync GLX_SGI_swap_control GLX_EXT_swap_control GLX_EXT_swap_control_tear GLX_EXT_texture_from_pixmap GLX_EXT_buffer_age GLX
_ARB_create_context GLX_ARB_create_context_profile GLX_EXT_create_context_es_profile GLX_EXT_create_context_es2_profile GLX_ARB_create_context_no_error GLX_ARB_create_context_robustness GLX_NV_delay_before_swap GLX_EXT_stereo_tree GLX_AR
B_context_flush_control GLX_NV_robustness_video_memory_purge GLX_ARB_multisample GLX_NV_float_buffer GLX_ARB_fbconfig_float GLX_NV_swap_group GLX_EXT_framebuffer_sRGB GLX_NV_multisample_coverage GLX_NV_copy_image GLX_NV_copy_buffer GLX_N
V_video_capture GLX_ARB_get_proc_address \nOpenGL vendor string:  NVIDIA Corporation\nOpenGL renderer string:  Quadro 5000/PCIe/SSE2\nOpenGL version string:  4.5.0 NVIDIA 390.144\nOpenGL extensions:  \n  GL_AMD_multi_draw_indirect\n  GL_
ARB_arrays_of_arrays\n  GL_ARB_base_instance\n  GL_ARB_blend_func_extended\n  GL_ARB_buffer_storage\n  GL_ARB_cl_event\n  GL_ARB_clear_buffer_object\n  GL_ARB_clear_texture\n  GL_ARB_clip_control\n  GL_ARB_color_buffer_float\n  GL_ARB_co
mpressed_texture_pixel_storage\n  GL_ARB_conservative_depth\n  GL_ARB_compute_shader\n  GL_ARB_compute_variable_group_size\n  GL_ARB_conditional_render_inverted\n  GL_ARB_copy_buffer\n  GL_ARB_copy_image\n  GL_ARB_cull_distance\n  GL_ARB
_debug_output\n  GL_ARB_depth_buffer_float\n  GL_ARB_depth_clamp\n  GL_ARB_depth_texture\n  GL_ARB_derivative_control\n  GL_ARB_direct_state_access\n  GL_ARB_draw_buffers\n  GL_ARB_draw_buffers_blend\n  GL_ARB_draw_indirect\n  GL_ARB_dra
w_elements_base_vertex\n  GL_ARB_draw_instanced\n  GL_ARB_enhanced_layouts\n  GL_ARB_ES2_compatibility\n  GL_ARB_ES3_compatibility\n  GL_ARB_ES3_1_compatibility\n  GL_ARB_ES3_2_compatibility\n  GL_ARB_explicit_attrib_location\n  GL_ARB_e
xplicit_uniform_location\n  GL_ARB_fragment_coord_conventions\n  GL_ARB_fragment_layer_viewport\n  GL_ARB_fragment_program\n  GL_ARB_fragment_program_shadow\n  GL_ARB_fragment_shader\n  GL_ARB_framebuffer_no_attachments\n  GL_ARB_framebu
ffer_object\n  GL_ARB_framebuffer_sRGB\n  GL_ARB_geometry_shader4\n  GL_ARB_get_program_binary\n  GL_ARB_get_texture_sub_image\n  GL_ARB_gl_spirv\n  GL_ARB_gpu_shader5\n  GL_ARB_gpu_shader_fp64\n  GL_ARB_gpu_shader_int64\n  GL_ARB_half_f
loat_pixel\n  GL_ARB_half_float_vertex\n  GL_ARB_imaging\n  GL_ARB_indirect_parameters\n  GL_ARB_instanced_arrays\n  GL_ARB_internalformat_query\n  GL_ARB_internalformat_query2\n  GL_ARB_invalidate_subdata\n  GL_ARB_map_buffer_alignment\
n  GL_ARB_map_buffer_range\n  GL_ARB_multi_bind\n  GL_ARB_multi_draw_indirect\n  GL_ARB_multisample\n  GL_ARB_multitexture\n  GL_ARB_occlusion_query\n  GL_ARB_occlusion_query2\n  GL_ARB_parallel_shader_compile\n  GL_ARB_pipeline_statisti
cs_query\n  GL_ARB_pixel_buffer_object\n  GL_ARB_point_parameters\n  GL_ARB_point_sprite\n  GL_ARB_polygon_offset_clamp\n  GL_ARB_program_interface_query\n  GL_ARB_provoking_vertex\n  GL_ARB_query_buffer_object\n  GL_ARB_robust_buffer_ac
cess_behavior\n  GL_ARB_robustness\n  GL_ARB_sample_shading\n  GL_ARB_sampler_objects\n  GL_ARB_seamless_cube_map\n  GL_ARB_separate_shader_objects\n  GL_ARB_shader_atomic_counter_ops\n  GL_ARB_shader_atomic_counters\n  GL_ARB_shader_bit
_encoding\n  GL_ARB_shader_draw_parameters\n  GL_ARB_shader_group_vote\n  GL_ARB_shader_image_load_store\n  GL_ARB_shader_image_size\n  GL_ARB_shader_objects\n  GL_ARB_shader_precision\n  GL_ARB_shader_storage_buffer_object\n  GL_ARB_sha
der_subroutine\n  GL_ARB_shader_texture_image_samples\n  GL_ARB_shader_texture_lod\n  GL_ARB_shading_language_100\n  GL_ARB_shading_language_420pack\n  GL_ARB_shading_language_include\n  GL_ARB_shading_language_packing\n  GL_ARB_shadow\n
GL_ARB_sparse_buffer\n  GL_ARB_sparse_texture\n  GL_ARB_spirv_extensions\n  GL_ARB_stencil_texturing\n  GL_ARB_sync\n  GL_ARB_tessellation_shader\n  GL_ARB_texture_barrier\n  GL_ARB_texture_border_clamp\n  GL_ARB_texture_buffer_object\
n  GL_ARB_texture_buffer_object_rgb32\n  GL_ARB_texture_buffer_range\n  GL_ARB_texture_compression\n  GL_ARB_texture_compression_bptc\n  GL_ARB_texture_compression_rgtc\n  GL_ARB_texture_cube_map\n  GL_ARB_texture_cube_map_array\n  GL_AR
B_texture_env_add\n  GL_ARB_texture_env_combine\n  GL_ARB_texture_env_crossbar\n  GL_ARB_texture_env_dot3\n  GL_ARB_texture_filter_anisotropic\n  GL_ARB_texture_float\n  GL_ARB_texture_gather\n  GL_ARB_texture_mirror_clamp_to_edge\n  GL_
ARB_texture_mirrored_repeat\n  GL_ARB_texture_multisample\n  GL_ARB_texture_non_power_of_two\n  GL_ARB_texture_query_levels\n  GL_ARB_texture_query_lod\n  GL_ARB_texture_rectangle\n  GL_ARB_texture_rg\n  GL_ARB_texture_rgb10_a2ui\n  GL_A
RB_texture_stencil8\n  GL_ARB_texture_storage\n  GL_ARB_texture_storage_multisample\n  GL_ARB_texture_swizzle\n  GL_ARB_texture_view\n  GL_ARB_timer_query\n  GL_ARB_transform_feedback2\n  GL_ARB_transform_feedback3\n  GL_ARB_transform_fe
edback_instanced\n  GL_ARB_transform_feedback_overflow_query\n  GL_ARB_transpose_matrix\n  GL_ARB_uniform_buffer_object\n  GL_ARB_vertex_array_bgra\n  GL_ARB_vertex_array_object\n  GL_ARB_vertex_attrib_64bit\n  GL_ARB_vertex_attrib_bindi
ng\n  GL_ARB_vertex_buffer_object\n  GL_ARB_vertex_program\n  GL_ARB_vertex_shader\n  GL_ARB_vertex_type_10f_11f_11f_rev\n  GL_ARB_vertex_type_2_10_10_10_rev\n  GL_ARB_viewport_array\n  GL_ARB_window_pos\n  GL_ATI_draw_buffers\n  GL_ATI_
texture_float\n  GL_ATI_texture_mirror_once\n  GL_S3_s3tc\n  GL_EXT_texture_env_add\n  GL_EXT_abgr\n  GL_EXT_bgra\n  GL_EXT_bindable_uniform\n  GL_EXT_blend_color\n  GL_EXT_blend_equation_separate\n  GL_EXT_blend_func_separate\n  GL_EXT_
blend_minmax\n  GL_EXT_blend_subtract\n  GL_EXT_compiled_vertex_array\n  GL_EXT_Cg_shader\n  GL_EXT_depth_bounds_test\n  GL_EXT_direct_state_access\n  GL_EXT_draw_buffers2\n  GL_EXT_draw_instanced\n  GL_EXT_draw_range_elements\n  GL_EXT_
fog_coord\n  GL_EXT_framebuffer_blit\n  GL_EXT_framebuffer_multisample\n  GL_EXTX_framebuffer_mixed_formats\n  GL_EXT_framebuffer_multisample_blit_scaled\n  GL_EXT_framebuffer_object\n  GL_EXT_framebuffer_sRGB\n  GL_EXT_geometry_shader4\
n  GL_EXT_gpu_program_parameters\n  GL_EXT_gpu_shader4\n  GL_EXT_multi_draw_arrays\n  GL_EXT_packed_depth_stencil\n  GL_EXT_packed_float\n  GL_EXT_packed_pixels\n  GL_EXT_pixel_buffer_object\n  GL_EXT_point_parameters\n  GL_EXT_polygon_o
ffset_clamp\n  GL_EXT_provoking_vertex\n  GL_EXT_rescale_normal\n  GL_EXT_secondary_color\n  GL_EXT_separate_shader_objects\n  GL_EXT_separate_specular_color\n  GL_EXT_shader_image_load_store\n  GL_EXT_shader_integer_mix\n  GL_EXT_shadow
_funcs\n  GL_EXT_stencil_two_side\n  GL_EXT_stencil_wrap\n  GL_EXT_texture3D\n  GL_EXT_texture_array\n  GL_EXT_texture_buffer_object\n  GL_EXT_texture_compression_dxt1\n  GL_EXT_texture_compression_latc\n  GL_EXT_texture_compression_rgtc
\n  GL_EXT_texture_compression_s3tc\n  GL_EXT_texture_cube_map\n  GL_EXT_texture_edge_clamp\n  GL_EXT_texture_env_combine\n  GL_EXT_texture_env_dot3\n  GL_EXT_texture_filter_anisotropic\n  GL_EXT_texture_integer\n  GL_EXT_texture_lod\n
GL_EXT_texture_lod_bias\n  GL_EXT_texture_mirror_clamp\n  GL_EXT_texture_object\n  GL_EXT_texture_shared_exponent\n  GL_EXT_texture_sRGB\n  GL_EXT_texture_sRGB_decode\n  GL_EXT_texture_storage\n  GL_EXT_texture_swizzle\n  GL_EXT_timer_qu
ery\n  GL_EXT_transform_feedback2\n  GL_EXT_vertex_array\n  GL_EXT_vertex_array_bgra\n  GL_EXT_vertex_attrib_64bit\n  GL_EXT_window_rectangles\n  GL_EXT_x11_sync_object\n  GL_EXT_import_sync_object\n  GL_NV_robustness_video_memory_purge\
n  GL_NVX_shared_sync_object\n  GL_IBM_rasterpos_clip\n  GL_IBM_texture_mirrored_repeat\n  GL_KHR_context_flush_control\n  GL_KHR_debug\n  GL_KHR_parallel_shader_compile\n  GL_KHR_no_error\n  GL_KHR_robust_buffer_access_behavior\n  GL_KH
R_robustness\n  GL_KTX_buffer_region\n  GL_NV_alpha_to_coverage_dither_control\n  GL_NV_bindless_multi_draw_indirect\n  GL_NV_bindless_multi_draw_indirect_count\n  GL_NV_blend_equation_advanced\n  GL_NV_blend_square\n  GL_NV_command_list
\n  GL_NV_compute_program5\n  GL_NV_conditional_render\n  GL_NV_copy_depth_to_color\n  GL_NV_copy_image\n  GL_NV_depth_buffer_float\n  GL_NV_depth_clamp\n  GL_NV_draw_texture\n  GL_NV_ES1_1_compatibility\n  GL_NV_ES3_1_compatibility\n  G
L_NV_explicit_multisample\n  GL_NV_fence\n  GL_NV_float_buffer\n  GL_NV_fog_distance\n  GL_NV_fragment_program\n  GL_NV_fragment_program_option\n  GL_NV_fragment_program2\n  GL_NV_framebuffer_multisample_coverage\n  GL_NV_geometry_shader
4\n  GL_NV_gpu_program4\n  GL_NV_internalformat_sample_query\n  GL_NV_gpu_program4_1\n  GL_NV_gpu_program5\n  GL_NV_gpu_program5_mem_extended\n  GL_NV_gpu_program_fp64\n  GL_NV_gpu_shader5\n  GL_NV_half_float\n  GL_NV_light_max_exponent\
n  GL_NV_multisample_coverage\n  GL_NV_multisample_filter_hint\n  GL_NV_occlusion_query\n  GL_NV_packed_depth_stencil\n  GL_NV_parameter_buffer_object\n  GL_NV_parameter_buffer_object2\n  GL_NV_path_rendering\n  GL_NV_pixel_data_range\n
GL_NV_point_sprite\n  GL_NV_primitive_restart\n  GL_NV_query_resource\n  GL_NV_query_resource_tag\n  GL_NV_register_combiners\n  GL_NV_register_combiners2\n  GL_NV_shader_atomic_counters\n  GL_NV_shader_atomic_float\n  GL_NV_shader_buff
er_load\n  GL_NV_shader_storage_buffer_object\n  GL_NV_texgen_reflection\n  GL_NV_texture_barrier\n  GL_NV_texture_compression_vtc\n  GL_NV_texture_env_combine4\n  GL_NV_texture_multisample\n  GL_NV_texture_rectangle\n  GL_NV_texture_rec
tangle_compressed\n  GL_NV_texture_shader\n  GL_NV_texture_shader2\n  GL_NV_texture_shader3\n  GL_NV_transform_feedback\n  GL_NV_transform_feedback2\n  GL_NV_uniform_buffer_unified_memory\n  GL_NV_vdpau_interop\n  GL_NV_vertex_array_rang
e\n  GL_NV_vertex_array_range2\n  GL_NV_vertex_attrib_integer_64bit\n  GL_NV_vertex_buffer_unified_memory\n  GL_NV_vertex_program\n  GL_NV_vertex_program1_1\n  GL_NV_vertex_program2\n  GL_NV_vertex_program2_option\n  GL_NV_vertex_program
3\n  GL_NV_video_capture\n  GL_NVX_sysmem_buffer\n  GL_NVX_conditional_render\n  GL_NVX_gpu_memory_info\n  GL_NV_shader_thread_group\n  GL_KHR_blend_equation_advanced\n  GL_SGIS_generate_mipmap\n  GL_SGIS_texture_lod\n  GL_SGIX_depth_tex
ture\n  GL_SGIX_shadow\n  GL_SUN_slice_accum\nX Extensions:  Generic Event Extension, SHAPE, MIT-SHM, XInputExtension, XTEST, BIG-REQUESTS, SYNC, XKEYBOARD, XC-MISC, SECURITY, XFIXES, RENDER, RANDR, XINERAMA, Composite, DAMAGE, MIT-SCREE
N-SAVER, DOUBLE-BUFFER, RECORD, DPMS, Present, X-Resource, XVideo, XFree86-VidModeExtension, XFree86-DGA, DRI2, GLX, NV-GLX, NV-CONTROL, XINERAMA\n'

So why is it crashing

No idea, I’d suggest updating your GPU driver.

1 Like

It’s already the newest one, which still is compatible with the quattro 5000, I doubt the card is too old to have the state of the art driver…

Please try with the binary release of ParaView from:
https://www.paraview.org/download/

1 Like

This is not an option, as I have to specify the libGLX for NVIDIA, which is installed with the driver. Or do I misunderstand something?

The binary release should be able to detect and use your NVIDIA driver with issues, please try it.

1 Like

Binary is working fine, seems to be a error which lib is called. Difference I noticed, is the binar is calling EGL support, is it not the same as OpenGL I suppose. Is it possible to have MPI with the binary version? It says every time, that the socket is occupied…

Ok enable the EGL in the cmake config resolved the crashing problem. I can now start parallel on the GPU. Nevertheless I think there is still some issues. I distributed the server in 6 task, as I have 6 physical Cores and 1 GPU. But one process is heavely loaded on the GPU and the others are nearly empty:

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      4187      G   pvserver                                     192MiB |
|    0      4188      G   pvserver                                      86MiB |
|    0      4189      G   pvserver                                      86MiB |
|    0      4190      G   pvserver                                      86MiB |
|    0      4191      G   pvserver                                      86MiB |
|    0      4192      G   pvserver                                      86MiB |
|    0     11731      G   Xorg                                          33MiB |
+-----------------------------------------------------------------------------+

Use mpiexec provided in the binary

Ok, I thank you really for your support so far!! Also with the binary version with mpiexec one process on the gpu takes more memory. This seems to be normal, as it is the host core?

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.144                Driver Version: 390.144                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro 5000         Off  | 00000000:03:00.0 Off |                    0 |
| 30%   64C   P12    N/A /  N/A |    421MiB /  2174MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      7314      G   ...Linux-Python3.8-64bit/bin/pvserver-real   161MiB |
|    0      7315      G   ...Linux-Python3.8-64bit/bin/pvserver-real    86MiB |
|    0      7316      G   ...Linux-Python3.8-64bit/bin/pvserver-real    86MiB |
|    0      7317      G   ...Linux-Python3.8-64bit/bin/pvserver-real    86MiB |
+-----------------------------------------------------------------------------+

A slight difference is expected, but a big different ould mean that your data is not correctly distributed.