It would be quite egotistical for a job (or its user) to ask for only “good” machines, but there are some cases where this can be necessary, and there are several mechanisms to ensure that.
The simplest way, but the most laborious one would be to blacklist any slaves you don’t want working on a job.
A much easier way would be to create a Group called “FastAndFurios” or something like that, add all the good machines to it, and tag the job with that Group when submitting to ensure only the good slaves can render that job. Any job submitted with a different Group or no Group at all would of course render on all possible Slaves according to Pools, Limits etc.
Then there are Resource Limits. Technically they are the same as License Limits, except we don’t specify a License count, but either Unlimited, or a Counted Resource. Since a Limit has a Blacklist, you can create a Resource Limit called “HiCPU” and blacklist any machines you consider having too little CPU power. Set to “Unlimited Resource”, and tag any Job you want to see rendering on the bigger machines. The Job will always be able to get a stub for any machines on the left (Master) list, but any machines on the middle Blacklist will be skipped. You can then create similar Limits for memory (e.g. “64GBplus”, “128GBplus” etc.) and blacklist machines that don’t fit those rules. Then when a job is submitted, you can tag it with a limit that requires it to use machines that are on the Master list, which hopefully will have the memory amount you crave.
You can then combine two or more Limits, so one job could be set to “HiCPU” and “128GBplus”, while another could be set to only “64GBplus” and would not check for CPU count. When a Slave tries to pick up the first job, it will have to acquire two limit stubs, one for each Limit, ensuring you get both High CPU count and high amount of memory. A Slave considering the second job will only check if it is on the Master list of the 64 GB limit, and won’t care about CPU counts…
This way, you can create a bunch of finer rules to combine hardware or software requirements without using regular Groups (a Job can have only one Group assigned, so it is a limiting factor). License Limits already take care of ensuring machines without a certain licensed software don’t get to work on jobs using that software, but in some cases the software is free, so you would have no License Limit for it. However, you can create Resource Limits to keep track of such things, for example you could have Resource Limits for “maya2018”, “maya2019” etc. and blacklist any Slaves that don’t have the corresponding version installed. Then you can tag a Job with the right Limits to ensure it has both the hardware and software specs you need…