diff --git a/theory/mkplots_tasks.m b/theory/mkplots_tasks.m new file mode 100644 index 0000000000000000000000000000000000000000..202b0ee6d65fd03bad610adf93b284ff83268f31 --- /dev/null +++ b/theory/mkplots_tasks.m @@ -0,0 +1,180 @@ + +%% Some global stuff +tpms = 1/2.4e6; +ms_max = 82; + +%% Plot the task timelines for tasks allocation +% Load the data +tasks = importdata( 'SedovBlast_fixed_16.dump' ); +tasks(:,6) = ( tasks(:,6) - tasks(:,5) ) * tpms; +start = min( tasks(:,5) ); +tasks(:,5) = ( tasks(:,5) - start ) * tpms; +% for k=0:max(tasks(:,1)) +% temp = tasks( tasks(:,1)==k , : ); +% start = min( temp(:,5) ); +% temp(:,5) = ( temp(:,5) - start ) * tpms; +% tasks( tasks(:,1)==k , :) = temp; +% end +tasks_sorts = tasks( tasks(:,2)==1 , : ); +tasks_pairs = tasks( tasks(:,2)==3 | ( tasks(:,2)==4 & tasks(:,4)==0 ) , : ); +tasks_selfs = tasks( tasks(:,2)==2 | ( tasks(:,2)==4 & tasks(:,4)==1 ) , : ); +tasks_ghosts = tasks( tasks(:,2)==5 , : ); +tasks_kick2s = tasks( tasks(:,2)==6 , : ); +nr_cores = max( tasks(:,1) ) + 1; + +% Init the plot +clf; +subplot('position',[ 0.05 , 0.1 , 0.9 , 0.8 ]); +hold on; + +% Plot the pairs +for k=1:size(tasks_pairs,1) + rectangle( 'Position' , [ tasks_pairs(k,5) , tasks_pairs(k,1)+0.5 , tasks_pairs(k,6) , 1 ] , ... + 'EdgeColor' , [ 0 0.8 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 0 1 0 ] ); +end + +% Plot the selfs +for k=1:size(tasks_selfs,1) + rectangle( 'Position' , [ tasks_selfs(k,5) , tasks_selfs(k,1)+0.5 , tasks_selfs(k,6) , 1 ] , ... + 'EdgeColor' , [ 0 0 0.8 ] , 'LineWidth' , 1 , 'FaceColor' , [ 0 0 1 ] ); +end + +% Plot the sorts +for k=1:size(tasks_sorts,1) + rectangle( 'Position' , [ tasks_sorts(k,5) , tasks_sorts(k,1)+0.5 , tasks_sorts(k,6) , 1 ] , ... + 'EdgeColor' , [ 0.8 0 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 1 0 0 ] ); +end + +% Plot the ghosts +for k=1:size(tasks_ghosts,1) + rectangle( 'Position' , [ tasks_ghosts(k,5) , tasks_ghosts(k,1)+0.5 , tasks_ghosts(k,6) , 1 ] , ... + 'EdgeColor' , [ 0.9 0.9 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 1 1 0 ] ); +end + +% Plot the kick2s +for k=1:size(tasks_kick2s,1) + rectangle( 'Position' , [ tasks_kick2s(k,5) , tasks_kick2s(k,1)+0.5 , tasks_kick2s(k,6) , 1 ] , ... + 'EdgeColor' , [ 1 0.5 0 ] , 'LineWidth' , 1 , 'FaceColor' , [ 1 0.5 0 ] ); +end + +% Set the axes and stuff. +hold off; +xlabel('time (ms)'); +ylabel('core ID'); +set(gca,'YTick',1:(max(tasks(:,1))+1)) +title('SWIFT tasks'); +axis([ 0 , ms_max , 0.5 , max(tasks(:,1))+1.5 ]); + +% Print this plot +set( gcf , 'PaperSize' , 2.3*[ 16 4 ] ); +set( gcf , 'PaperPosition' , 2.3*[ 0.25 0.25 16 4 ] ); +print -depsc2 tasks_dynamic.eps +!epstopdf tasks_dynamic.eps + + + +%% Make a fake task ordering a la OpenMP. + +% Init the core timers +timers = zeros( nr_cores , 1 ); +for k=1:nr_cores + timers(k) = min( tasks( tasks(:,1)==k , 5 ) ); +end; +delta = 0.0035; + +% Loop through the sort tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if ( tasks(k,2)==1 ) + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + +% Re-set the timers +timers = ones( nr_cores , 1 ) * max( timers ); + +% Loop through the self density tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if tasks(k,2)==2 && tasks(k,3)==1 + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + +% Re-set the timers +timers = ones( nr_cores , 1 ) * max( timers ); + +% Loop through the pair density tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if tasks(k,2)==3 && tasks(k,3)==1 + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + +% Re-set the timers +timers = ones( nr_cores , 1 ) * max( timers ); + +% Loop through the ghost tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if tasks(k,2)==5 + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + +% Re-set the timers +timers = ones( nr_cores , 1 ) * max( timers ); + +% Loop through the self force tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if tasks(k,2)==2 && tasks(k,3)==2 + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + +% Re-set the timers +timers = ones( nr_cores , 1 ) * max( timers ); + +% Loop through the pair force tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if tasks(k,2)==3 && tasks(k,3)==2 + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + +% Re-set the timers +timers = ones( nr_cores , 1 ) * max( timers ); + +% Loop through the kick tasks and put them at the front of the shortest queue +for k=1:size(tasks,1) + if tasks(k,2)==6 + [ tic, ind ] = min( timers ); + tasks(k,5) = tic; + tasks(k,1) = ind-1; + timers(ind) = timers(ind) + tasks(k,6) + delta; + end +end + + + +% Print this plot +set( gcf , 'PaperSize' , 2.3*[ 20 4 ] ); +set( gcf , 'PaperPosition' , 2.3*[ 0.25 0.25 20 4 ] ); +print -depsc2 tasks_static.eps +!epstopdf tasks_static.eps +