Using Multiple NVidia GPUs on Windows10 with Max?
Hi all,
talking about using multiple NVidia GPUs with Max on Windows 10, what are the options currently?
Is SLI outdated?
What protocols are currently available and would Max support them?
Hi, in the game world, It seems to me that SLI never really took off. Many synchro problems, low level dev needed, and new single GPU passing over rapidly in raw power.
Max never added support for SLI. It seems that you need low level dev to make it work. Others, like touchdesigner prefered to synchro/duplicate multiple 3D contexts, and video outputs, instead of going SLI. I tried it long ago, but it was too difficult to synchro and specific for every project.
IMHO, you get much better result by optimizing your GL pipeline in max. Single threated max is a nightmare for GL. Dont pass message, float boxes around!!!
In my last projects, I get much better result, calling and liking jit.gl objects only in javascript (anim,node,gridshape, etc...). Minimum 'normal' max calculations and messages passing around.
I'm not a software engineer, but it looks like the problem in max is the single MAIN thread that process UI,video,GL.
I suppose that in game engine (unity?) there's 1 or multi thread for physics, 1 for UI, 1 for video, 1 for AI, 1 for GL, etc...
https://www.techradar.com/news/nvidia-sli-and-amd-crossfire-is-dead-but-should-we-mourn-multi-gpu-gaming
Dont pass message, float boxes around!!! In my last projects, I get much better result, calling and liking jit.gl objects only in javascript (anim,node,gridshape, etc...). Minimum 'normal' max calculations and messages passing around.
Spa, could you go a bit further in your explanation, maybe with an example? I know that we need to avoid as much as possible to go from jit.gl to jit and vice versa, and that UI interactive objects even the simplest ones like [message], [bang] or [number] are to be avoided if you look for performance, but you're saying something else right ?
If rob could confirm:
When you setup a gl chain of jit.gl objects in javascript, you do it through binding 1 obj to the other. I suppose that the messages goes through C directly. When in max patchcords, if you chain slabs for example, the message goes through max patchcords.
Another point is in javascript, you DONT use and forget 'visualiser' of datas like float and message boxes, for debug all around.
In javascript you can easily iterate (duplicate) an instance with, a whole chain with ji.gl objects in it. it's dificult(impossible?) to do it in max.
I feel that this structural differences with coding in javascript, gives much better performances.
In my last projects, I am mainly passing few texture or matrices between javascript objects. and in each objects, a chain of jit.gl objects.
Cool insight SPA, gonna definitely try that. In JS though I have experienced some problems with GL objects remaining in memory after destroying arrays of GL objects. Like 3D objects not disappearing from the GL window.
Deleting arrays:
If the array contains jit.gl.objs, iterate the array and freepeer each of them. After that, delete the array
If the array contains each a reference of an instance containing many jit.gl.obj:
iterate the array and send a free function call to each instance. The instance should contain a function free() that freepeer every jit.gl.objs in this instance.
Require a bit of organistion but works good. It's also important to freepeer first the objects at the end of the pipeline, going up.
Quite counter intuitive, given that JS is garbage collected, but after all you're deleting C objects (jit.gl...)
I think there is some examples that come with max.
Hi SPA! Thank you very much, I never used freepeer(), I will give it a try and let you know if it worked!
It worked! Thank you very much!
You're welcome.
Try creating a js module as a chain of gl objects (node,grid,text, physic(for clicks)) with a free() function freepeer each gl.objs
require it multiple times, in your main JS as instances in an array
send params to each module moving the nod pos, the content of the text
get the clicks of each instance in your main JS > process
send free() to each instance in your array before deleting it
Its my main structure for working in gl max now.
great gl.objs of max, called with the flexibility of JS
I use it also for tex/slab chains.
an example, in max with a lot of JS, database, ajax, kinect:
http://singular-moments.com/?lang=en&path=projects/realtime/SocWall/
The project is amazing!