private int access(int arrayIndex, int smpNodeIndexFrom, int numCPUFrom, int startTime){
		int i;
		for(i = 0;i<syncObjs[arrayIndex].size() && startTime>syncObjs[arrayIndex].get(i).startTime;i++){
		}
		//must be put after i-1 and before i
		Sync so = new Sync();
		so.fromNumCPU = numCPUFrom;
		so.fromSMPNodeIndex = smpNodeIndexFrom;
		so.startTime = startTime;
		syncObjs[arrayIndex].add(i,so);
		int delay=0;
		if(i>0 && startTime<syncObjs[arrayIndex].get(i-1).startTime + duration[arrayIndex]){
			delay = syncObjs[arrayIndex].get(i-1).startTime + duration[arrayIndex]-startTime;
			delayAllAfter(smpNodeIndexFrom, numCPUFrom, startTime, delay, new ArrayList<P2>());
		}

		if(i<syncObjs[arrayIndex].size()){
			//check current elem i 
			if(syncObjs[arrayIndex].get(i).startTime<startTime + duration[arrayIndex]){
				delay+=startTime + duration[arrayIndex]-syncObjs[arrayIndex].get(i).startTime;
				
			}
			if(delay>0){
				delayInArray(arrayIndex, i+1, delay, new ArrayList<P2>());
			}
		}
		return so.startTime + duration[arrayIndex];
	}