/** * */ package dr.evomodel.newtreelikelihood; import dr.app.beagle.evomodel.treelikelihood.AbstractTreeLikelihood; import java.util.ArrayList; import java.util.List; /** * @author Marc Suchard * */ public class LikelihoodCoreFactory { public static final boolean useFloats = false; public static LikelihoodCore loadLikelihoodCore(int[] configuration, AbstractTreeLikelihood treeLikelihood) { if (coreRegistry == null) { // Lazy loading coreRegistry = new ArrayList<LikelihoodCoreLoader>(); // List libraries in order of load-priority coreRegistry.add(new ThreadedGPULikelihoodCore.LikelihoodCoreLoader()); coreRegistry.add(new GPULikelihoodCore.LikelihoodCoreLoader()); coreRegistry.add(new NativeLikelihoodCore.LikelihoodCoreLoader()); } for(LikelihoodCoreLoader loader: coreRegistry) { System.out.print("Attempting to load core: " + loader.getLibraryName()); LikelihoodCore core = loader.createLikelihoodCore(configuration, treeLikelihood); if (core != null) { System.out.println(" - SUCCESS"); return core; } System.out.println(" - FAILED"); } // No libraries/processes available int stateCount = configuration[0]; if (useFloats) return new FloatGeneralLikelihoodCore(stateCount); else return new GeneralLikelihoodCore(stateCount); } private static List<LikelihoodCoreLoader> coreRegistry; protected interface LikelihoodCoreLoader { public String getLibraryName(); /** * Actual factory * @param configuration * @param treeLikelihood Should remove this after migration bug is solved for GPU * @return */ public LikelihoodCore createLikelihoodCore(int[] configuration, AbstractTreeLikelihood treeLikelihood); } }