public static void reserveTaskMem(long m){ final long bytes = m; while(!tryReserveTaskMem(bytes)){ try { ForkJoinPool.managedBlock(new ManagedBlocker() { @Override public boolean isReleasable() {return _taskMem.get() >= bytes;} @Override public boolean block() throws InterruptedException { synchronized(_taskMemLock){ try {_taskMemLock.wait();} catch( InterruptedException e ) {} } return isReleasable(); } }); } catch (InterruptedException e){throw Log.errRTExcept(e); } } }
@Override protected Boolean defaultValue() { // Can we allocate ALL of the dataset locally? long bs = fr().byteSize(); if( !MemoryManager.tryReserveTaskMem(bs) ) return false; // Also, do we have enough chunks to run it well globally? if( fr().anyVec().nChunks() >= 2*H2O.CLOUD.size() ) return false; // Less than 2 chunks per node, and fits locally... default to local-only return true; } }
if(!_runSingleThreaded && MemoryManager.tryReserveTaskMem(reqMem)){