How would I use multiple cores on a single machine in an effective way without mpi?
Make X directories for the X processors and run Rosetta separately in each directory. Remember to use the flag set "-constant_seed -jran ####", with a different numerical argument to jran each time (this ensures the RNG seeds vary).
Your results will have similar file names; you may want to fiddle with the flags for tagging output to tag each directory separately as the files are generated so the silent files may be more easily recombined later (no I don't know how to do this). If you use PDB output you can readily rename them with a shell script.
Is this the only way to use multiple instances of Rosetta at the same time?
For example, I would like to use Rosetta within multithreaded applications but without using MPI. Is this possible?
I'm not clear on what you mean by "use Rosetta within multithreaded applications". If you mean, use Rosetta as a library, the answer is "maybe". The code is supposed to be thread-safe, but few if any parts of it are actually multithreaded. Many of the memory-heavy parts are under singleton management that's supposed to be threadsafe but I don't know that it's been tried. The few parts that use MPI in a fashion other than the way I mentioned are still self-contained applications (optE and multistate design).
If you mean, can I make system calls to Rosetta from within some multithreaded application; yes, you can, but it will re-allocate memory separately for each copy of Rosetta that's running (this is true for MPI too).
Something you should remember here is that Rosetta uses Monte Carlo, which requires many independent trajectories to function as a protocol: try it lots of times and take the best. This lends itself extremely well to only parallelizing at the highest, whole-trajectory level, so that's what we do. Parallelizing/multithreading within a trajectory is theoretically possible, but we haven't see any data to suggest the ROI is worth it.
Thank you for your explanations.
I'm wondering if there is a way to make Rosetta believe that it is running in different directories at the moment of initialization. What I mean is : Is it possible to use options of core::init to run completely separate instances of Rosetta?
We've been running instances of rosetta on our desktop by using python's threading modules, and running rosetta in individual directories (with different seeds) for the apps that don't use the output options. We have the ram, so it works well enough. If you know python, it shouldn't be too difficult to get running...
Jared's solution should work. Also, there are a variety of undocumented and inconsistently supported options for pathing Rosetta's output. I have no idea which, if any, work with any AbRelax. -out:sf appears to control the output file name; it may let you put a path in instead of a file name.