Author: vive
Date: 2007-07-12 21:01:51 +0000 (Thu, 12 Jul 2007)
New Revision: 14056

Added:
   trunk/apps/load-balancing-sims/phase7/sim/loads.m
Log:
Generate plots for load on nodes/edges in the Simple model


Added: trunk/apps/load-balancing-sims/phase7/sim/loads.m
===================================================================
--- trunk/apps/load-balancing-sims/phase7/sim/loads.m                           
(rev 0)
+++ trunk/apps/load-balancing-sims/phase7/sim/loads.m   2007-07-12 21:01:51 UTC 
(rev 14056)
@@ -0,0 +1,207 @@
+clear all;
+
+printeps = 1;
+% Direct scaling for conversion
+%set(0,'defaultaxesfontsize',24);
+%set(0,'defaulttextfontsize',24);
+  
+N = 5000;
+d = 50;
+D = load(sprintf('out_%d_%d_nolocals_undir',N,d));
+directed = 0;
+
+maxlen = N/2;
+
+edge_recv = D(:,3);
+edge_sent = D(:,4);
+edge_loads = edge_recv + edge_sent;
+
+edgeloaddists = zeros(max(edge_loads)+1,1);
+edgeloadnums = zeros(max(edge_loads)+1,1);
+degrees = zeros(N,1);
+totloads = zeros(N,1);
+edgedistloads = zeros(N/2,1);
+edgedistnums = zeros(N/2,1);
+load_lens = zeros(length(D),1);
+
+for i=1:length(D);
+    j = D(i,1) + 1;
+    src = D(i,1);
+    dst = D(i,2);
+    inload = edge_recv(i);    %%% Load put on node through this edge
+    edgeload = edge_loads(i); %%% Total load on edge
+
+    %%% Total load and degree for nodes
+    totloads(j) = totloads(j) + inload;
+    if(directed) 
+      if(edge_sent(i)>0)
+        degrees(j) = degrees(j) + 1;
+      end
+    else
+      degrees(j) = degrees(j) + 1;
+    end
+
+    %%% Length + help index
+    len = min(max(src,dst)-min(src,dst),min(src,dst)+N-max(src,dst));
+    li = len + 1;
+
+    %%% Load of lengths, count number of edges with this length    
+    edgedistloads(li) = edgedistloads(li) + edgeload;
+    edgedistnums(li) = edgedistnums(li) + 1;
+
+    %%% Length of edges
+    load_lens(i) = len;
+
+    edgeloaddists(edgeload) = edgeloaddists(edgeload) + len;
+    edgeloadnums(edgeload) = edgeloadnums(edgeload) + 1;
+end
+
+nz_edgeloaddists = edgeloaddists(find(edgeloaddists>0));
+nz_edgeloadnums = edgeloadnums(find(edgeloadnums>0));
+nz_edgeloadindex = find(edgeloaddists>0);
+
+nz_edgedistloads = edgedistloads(find(edgedistloads>0));
+nz_edgedistnums = edgedistnums(find(edgedistnums>0));
+nz_edgelenindex = find(edgedistnums>0);
+
+%%% Node load
+figure(1);
+subplot(111);
+hold on;
+partloads = totloads;
+[h,x] = hist(partloads,20);
+hnorm = h/sum(h);
+bar(x,hnorm);
+title(sprintf('N=%d, avgdeg=%d',N,d));
+xlabel(sprintf('Node load'));
+ylabel('Fraction of nodes');
+% For locs:
+%xlim([0 90000]);
+% No locs:
+%xlim([0 200000]);
+
+if(printeps>0)
+    if(directed)
+      print('-deps',sprintf('rep2N%dD%d_1_nodeLoadHist_directed',N,d));
+    else
+      print('-deps',sprintf('rep2N%dD%d_1_nodeLoadHist',N,d));
+  end
+end
+
+%%% Histogram of edge loads
+figure(2);
+subplot(111);
+hold on;
+%partloads = edge_loads/mean(edge_loads);
+partloads = edge_loads;
+[h,x] = hist(partloads,20);
+hnorm = h/sum(h);
+bar(x,hnorm);
+title(sprintf('N=%d, avgdeg=%d',N,d));
+xlabel(sprintf('Edge load'));
+ylabel('Fraction of edges');
+% For locs:
+%xlim([0 40000]);
+% No locs:
+%xlim([0 100000]);
+
+if(printeps>0)
+  if(directed)
+    print('-deps',sprintf('rep2N%dD%d_2_edgeLoadHist_directed',N,d));
+  else
+    print('-deps',sprintf('rep2N%dD%d_2_edgeLoadHist',N,d));
+  end
+end
+
+
+%%% Degree vs Average Load
+ndeg = zeros(max(degrees),1);
+degloads = zeros(max(degrees),1);
+degloadall = zeros(N,1);
+for i = 1:size(totloads)
+    deg = degrees(i);
+    ndeg(deg) = ndeg(deg) + 1;
+    degloads(deg) = degloads(deg) + totloads(i);
+end
+
+figure(3);
+subplot(111);
+hold on;
+plot(find(ndeg>0), degloads(find(degloads>0))./ndeg(find(ndeg>0)));
+plot(degrees, totloads, 'k.', 'MarkerSize',2);
+title(sprintf('N=%d, avgdeg=%d',N,d));
+if(directed)
+  xlabel('Node out-degree');
+else
+  xlabel('Node degree');
+end
+ylabel('Node load');
+legend('Average load');
+%ylim([0 200000]);
+if(printeps>0)
+  if(directed)
+    print('-deps',sprintf('rep2N%dD%d_3_degAvgLoad_directed',N,d));
+  else
+    print('-deps',sprintf('rep2N%dD%d_3_degAvgLoad',N,d));
+  end
+end
+
+%figure(4);
+%hold on;
+%plot(degrees, totloads, 'k.', 'MarkerSize',2);
+%xlabel('Degree');
+%ylabel('Node load');
+%title(sprintf('N=%d, avgdeg=%d',N,d));
+
+%%% Edge loads as function of edge dist
+figure(5);
+subplot(111);
+hold on;
+plot(load_lens/N, edge_loads,'k.','MarkerSize',2);
+xlabel('Edge length');
+ylabel('Edge load');
+title(sprintf('N=%d, avgdeg=%d',N,d));
+%ylim([0 60000]);
+if(printeps>0)
+  if(directed)
+    print('-deps',sprintf('rep2N%dD%d_5_lengthloads_directed',N,d));
+  else
+    print('-deps',sprintf('rep2N%dD%d_5_lengthloads',N,d));
+  end
+end
+
+%%% Average edge load as function of edge dist
+figure(6);
+subplot(111);
+hold on;
+plot(nz_edgelenindex/N, nz_edgedistloads./nz_edgedistnums, 'k.', 
'MarkerSize',2);
+title(sprintf('N=%d, avgdeg=%d',N,d));
+xlabel('Edge length');
+ylabel('Average load');
+%ylim([0 12000]);
+if(printeps>0)
+  if(directed)
+    print('-deps',sprintf('rep2N%dD%d_6_lengthAvgLoad_directed',N,d));
+  else
+    print('-deps',sprintf('rep2N%dD%d_6_lengthAvgLoad',N,d));
+  end
+end
+
+%%% Edge load vs average distance covered
+figure(7);
+subplot(111);
+hold on;
+plot(nz_edgeloadindex,nz_edgeloaddists./nz_edgeloadnums/N,'k.', 'MarkerSize', 
2);
+xlabel(sprintf('Edge load'));
+ylabel('Average length');
+title(sprintf('N=%d, avgdeg=%d',N,d));
+%ylim([0 0.5]);
+%xlim([0 30000]);
+if(printeps>0)
+  if(directed)
+    print('-deps',sprintf('rep2N%dD%d_7_loadAvgLengths_directed',N,d));
+  else
+    print('-deps',sprintf('rep2N%dD%d_7_loadAvgLengths',N,d));
+  end
+end
+


Reply via email to