public Warp(int executionContextCount) { _allOne = BitArrayUtility.CreateAllOne(executionContextCount); _divergenceStack = new DivergenceStack(); _divergenceStack.Push(0, _allOne, -1); }
public override bool UpdateDivergenceStack(DivergenceStack divergenceStack, IList<BitArray> activeMasks) { divergenceStack.Peek().NextPC = ReconvergencePC; for (var i = 0; i < NextPCs.Count; i++) if (activeMasks[i].Any()) divergenceStack.Push(NextPCs[i], activeMasks[i], ReconvergencePC); return true; }
public override bool UpdateDivergenceStack(DivergenceStack divergenceStack, IList<BitArray> activeMasks) { var topOfDivergenceStack = divergenceStack.Peek(); if (NextPC == topOfDivergenceStack.ReconvergencePC) { // Reconvergence. divergenceStack.Pop(); return true; } else { // No Divergence. topOfDivergenceStack.NextPC = NextPC; return false; } }
public abstract bool UpdateDivergenceStack(DivergenceStack divergenceStack, IList<BitArray> activeMasks);