/* * puts the twoThreadInfo object into its appropriate spot based on which thread is specified (O or 1) */ private void organize(TwoThreadInfo twoThreadInfo, int i) { ThreadInfo threadInfo; if (i == 0) { threadInfo = twoThreadInfo.getThreadInfo0(); } else { threadInfo = twoThreadInfo.getThreadInfo1(); } try { // we find out where in the data structure to put it, and initialize that element if needed, // then put it in there. final int block = threadInfo.getBlock(); final int thread = threadInfo.getThread(); final int warp = thread / threadsPerWarp; if (blocks.containsKey(block)) { final Map<Integer, Map<Integer, List<TwoThreadInfo>>> warps = blocks.get(block); if (warps.containsKey(warp)) { final Map<Integer, List<TwoThreadInfo>> threads = warps.get(warp); if (threads.containsKey(thread)) { final List<TwoThreadInfo> threadInfos = threads.get(thread); threadInfos.add(twoThreadInfo); } else { final List<TwoThreadInfo> threadInfos = new ArrayList<TwoThreadInfo>(); threadInfos.add(twoThreadInfo); threads.put(thread, threadInfos); } } else { final Map<Integer, List<TwoThreadInfo>> threads = new HashMap<Integer, List<TwoThreadInfo>>(); final List<TwoThreadInfo> threadInfos = new ArrayList<TwoThreadInfo>(); threadInfos.add(twoThreadInfo); threads.put(thread, threadInfos); warps.put(warp, threads); } } else { final Map<Integer, Map<Integer, List<TwoThreadInfo>>> warps = new HashMap<Integer, Map<Integer, List<TwoThreadInfo>>>(); final Map<Integer, List<TwoThreadInfo>> threads = new HashMap<Integer, List<TwoThreadInfo>>(); final List<TwoThreadInfo> threadInfos = new ArrayList<TwoThreadInfo>(); threadInfos.add(twoThreadInfo); threads.put(thread, threadInfos); warps.put(warp, threads); blocks.put(block, warps); } } catch (final NumberFormatException nfe) { /* * Just ignore this improperly formatted ThreadInfo object (not all of them are "properly" formatted after all--example: * deadlock doesn't specify two threads) */ } }