<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https:/// /api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jingfu</id>
	<title>Nekcem - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https:/// /api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jingfu"/>
	<link rel="alternate" type="text/html" href=" /index.php/Special:Contributions/Jingfu"/>
	<updated>2026-06-06T10:57:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.6</generator>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=419</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=419"/>
		<updated>2012-06-13T20:43:15Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
use (E,lelt,lx1,lp), to represent size of prob&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
There are many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  &lt;br /&gt;
&lt;br /&gt;
 made huge change in the code for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB &lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem size on 32k cores was  npt= 546000*16*16*16 = E*lx1*lx1*lx1&lt;br /&gt;
(where lx1=lxi+1). i.e., npt=2,236,416,000 = 2.2 billion grids&lt;br /&gt;
&lt;br /&gt;
The output size with 4 fields will be:&lt;br /&gt;
2236416000*(4*3*4)+2236416000*(1+9+3)*4 = 223,641,600,000 (223GB)&lt;br /&gt;
&lt;br /&gt;
Memory required is 420M .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
make sure thread joined at last step;&lt;br /&gt;
make sure buffer size is optimized according to the formula given above;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=417</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=417"/>
		<updated>2012-06-13T20:43:04Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
 use (E,lelt,lx1,lp), to represent size of prob&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
There are many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  &lt;br /&gt;
&lt;br /&gt;
 made huge change in the code for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB &lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem size on 32k cores was  npt= 546000*16*16*16 = E*lx1*lx1*lx1&lt;br /&gt;
(where lx1=lxi+1). i.e., npt=2,236,416,000 = 2.2 billion grids&lt;br /&gt;
&lt;br /&gt;
The output size with 4 fields will be:&lt;br /&gt;
2236416000*(4*3*4)+2236416000*(1+9+3)*4 = 223,641,600,000 (223GB)&lt;br /&gt;
&lt;br /&gt;
Memory required is 420M .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
make sure thread joined at last step;&lt;br /&gt;
make sure buffer size is optimized according to the formula given above;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=415</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=415"/>
		<updated>2012-06-13T20:42:54Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 use (E,lelt,lx1,lp), to represent size of prob&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
There are many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  &lt;br /&gt;
&lt;br /&gt;
 made huge change in the code for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB &lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem size on 32k cores was  npt= 546000*16*16*16 = E*lx1*lx1*lx1&lt;br /&gt;
(where lx1=lxi+1). i.e., npt=2,236,416,000 = 2.2 billion grids&lt;br /&gt;
&lt;br /&gt;
The output size with 4 fields will be:&lt;br /&gt;
2236416000*(4*3*4)+2236416000*(1+9+3)*4 = 223,641,600,000 (223GB)&lt;br /&gt;
&lt;br /&gt;
Memory required is 420M .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
make sure thread joined at last step;&lt;br /&gt;
make sure buffer size is optimized according to the formula given above;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=413</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=413"/>
		<updated>2012-06-13T20:41:54Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We'll have to use (E,lelt,lx1,lp), to represent size of prob, instead of c3d.rea.&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
I had many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  &lt;br /&gt;
&lt;br /&gt;
 made huge change in the code for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB &lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem size on 32k cores was  npt= 546000*16*16*16 = E*lx1*lx1*lx1&lt;br /&gt;
(where lx1=lxi+1). i.e., npt=2,236,416,000 = 2.2 billion grids&lt;br /&gt;
&lt;br /&gt;
The output size with 4 fields will be:&lt;br /&gt;
2236416000*(4*3*4)+2236416000*(1+9+3)*4 = 223,641,600,000 (223GB)&lt;br /&gt;
&lt;br /&gt;
Memory required is 420M .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
make sure thread joined at last step;&lt;br /&gt;
make sure buffer size is optimized according to the formula given above;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=412</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=412"/>
		<updated>2012-03-25T22:39:55Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We'll have to use (E,lelt,lx1,lp), to represent size of prob, instead of c3d.rea.&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
I had many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  So... sorry I wouldn't know which&lt;br /&gt;
case if it's just c3d...&lt;br /&gt;
&lt;br /&gt;
By the way, please remember I made huge change in the code so far for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you still keep the old version old version of the code: you can compile and&lt;br /&gt;
see what men usage was. From example below, always the fourth one (92352484) will&lt;br /&gt;
be the mem usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB ?&lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem size on 32k cores was  npt= 546000*16*16*16 = E*lx1*lx1*lx1&lt;br /&gt;
(where lx1=lxi+1). i.e., npt=2,236,416,000 = 2.2 billion grids&lt;br /&gt;
&lt;br /&gt;
The output size with 4 fields will be:&lt;br /&gt;
2236416000*(4*3*4)+2236416000*(1+9+3)*4 = 223,641,600,000 (223GB)&lt;br /&gt;
&lt;br /&gt;
Memory required is 420M (I wouldn't know how to get breakdown of memory for computation and I/O)&lt;br /&gt;
But let me know if anyway that we can get the info -- we can work on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
make sure thread joined at last step;&lt;br /&gt;
make sure buffer size is optimized according to the formula given above;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=410</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=410"/>
		<updated>2012-03-25T04:00:51Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We'll have to use (E,lelt,lx1,lp), to represent size of prob, instead of c3d.rea.&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
I had many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  So... sorry I wouldn't know which&lt;br /&gt;
case if it's just c3d...&lt;br /&gt;
&lt;br /&gt;
By the way, please remember I made huge change in the code so far for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you still keep the old version old version of the code: you can compile and&lt;br /&gt;
see what men usage was. From example below, always the fourth one (92352484) will&lt;br /&gt;
be the mem usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB ?&lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem size on 32k cores was  npt= 546000*16*16*16 = E*lx1*lx1*lx1&lt;br /&gt;
(where lx1=lxi+1). i.e., npt=2,236,416,000 = 2.2 billion grids&lt;br /&gt;
&lt;br /&gt;
The output size with 4 fields will be:&lt;br /&gt;
2236416000*(4*3*4)+2236416000*(1+9+3)*4 = 223,641,600,000 (223GB)&lt;br /&gt;
&lt;br /&gt;
Memory required is 420M (I wouldn't know how to get breakdown of memory for computation and I/O)&lt;br /&gt;
But let me know if anyway that we can get the info -- we can work on it.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=408</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=408"/>
		<updated>2012-03-25T03:31:20Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We'll have to use (E,lelt,lx1,lp), to represent size of prob, instead of c3d.rea.&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
I had many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  So... sorry I wouldn't know which&lt;br /&gt;
case if it's just c3d...&lt;br /&gt;
&lt;br /&gt;
By the way, please remember I made huge change in the code so far for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you still keep the old version old version of the code: you can compile and&lt;br /&gt;
see what men usage was. From example below, always the fourth one (92352484) will&lt;br /&gt;
be the mem usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In there, if we assume &amp;quot;nc&amp;quot; is approximately same as the total grids &amp;quot;n&amp;quot;.&lt;br /&gt;
we have the following:&lt;br /&gt;
&lt;br /&gt;
  For the header:&lt;br /&gt;
  (1) coordinate =&amp;gt; 3 columns * 4 bytes&lt;br /&gt;
  (2) cell data  =&amp;gt; 9 columns * 4 bytes&lt;br /&gt;
  (3) cell type  =&amp;gt; 1 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
  For the 8 fields:&lt;br /&gt;
      3 columns * 4 bytes&lt;br /&gt;
&lt;br /&gt;
So, we have 275M*(8 fields *3*4)+ 275M*(3+9+1)*4 = 40 GB ?&lt;br /&gt;
&lt;br /&gt;
Or, neglecting the cel type, we get 275M(8*3*4+12*4)=39GB ?&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=406</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=406"/>
		<updated>2012-03-25T03:28:35Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We'll have to use (E,lelt,lx1,lp), to represent size of prob, instead of c3d.rea.&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
I had many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  So... sorry I wouldn't know which&lt;br /&gt;
case if it's just c3d...&lt;br /&gt;
&lt;br /&gt;
By the way, please remember I made huge change in the code so far for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
  from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you still keep the old version old version of the code: you can compile and&lt;br /&gt;
see what men usage was. From example below, always the fourth one (92352484) will&lt;br /&gt;
be the mem usage.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/DAT&amp;diff=404</id>
		<title>Main Page/DAT</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/DAT&amp;diff=404"/>
		<updated>2012-03-25T03:27:05Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SIZEu file ==&lt;br /&gt;
&lt;br /&gt;
  ldim: dimension&lt;br /&gt;
&lt;br /&gt;
  lxi: the degree of polynomials&lt;br /&gt;
  lx1: the number of grid points on the face &lt;br /&gt;
  ly1=lx1; lz1=lx1&lt;br /&gt;
&lt;br /&gt;
  lelt: the maximun number of element per core&lt;br /&gt;
&lt;br /&gt;
  lp : the maximum number of cores&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We'll have to use (E,lelt,lx1,lp), to represent size of prob, instead of c3d.rea.&lt;br /&gt;
&lt;br /&gt;
 E=total element numbers, lelt=element # per core,&lt;br /&gt;
 lx1= grid points in one direction, lp= # of cores.&lt;br /&gt;
&lt;br /&gt;
I had many different rea with c3d_6 (E=136K), c3d_7(E=273K), etc..&lt;br /&gt;
&lt;br /&gt;
Even for a fixed num of element with c3d_7 (E=273K), men usage is different for&lt;br /&gt;
different # of cores (lp=32k, 65k, 131k).  So... sorry I wouldn't know which&lt;br /&gt;
case if it's just c3d...&lt;br /&gt;
&lt;br /&gt;
By the way, please remember I made huge change in the code so far for 2 times&lt;br /&gt;
reduction in mem usage to go further up from 1.1 billion to 2.2 billion cases.&lt;br /&gt;
&lt;br /&gt;
 from (E=273, lx1=16, lp= 131k): limit in the past  ---&amp;gt; (E=546k, lx1=16, lp=131k)&lt;br /&gt;
&lt;br /&gt;
(E=999k, lx1=16, lp=131k) was 500M. So I couldn't do on BGP. But is be ok on XK6,&lt;br /&gt;
even with lp=262k.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you still keep the old version old version of the code: you can compile and&lt;br /&gt;
see what men usage was. From example below, always the fourth one (92352484) will&lt;br /&gt;
be the mem usage.&lt;br /&gt;
&lt;br /&gt;
======&lt;br /&gt;
jl_sparse_cholesky.o jl_poly.o jl_tensor.o jl_findpt.o jl_pfindpt.o comm_mpi2.o rbIO_nekcem.o vtkbin.o coIO_nekcem.o coIO_nekcem_read.o io_util.o mpiio_util.o io_driver.o   -llapack -lblas&lt;br /&gt;
  text    data     bss     dec     hex filename&lt;br /&gt;
4173564  266664 87912256        92352484        5812fe4 nekcem&lt;br /&gt;
I am done&lt;br /&gt;
======&lt;br /&gt;
&lt;br /&gt;
Let me know if not clear on this --&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/RUN&amp;diff=402</id>
		<title>Main Page/RUN</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/RUN&amp;diff=402"/>
		<updated>2012-03-15T04:27:41Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: /* Execute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting the Source ==&lt;br /&gt;
&lt;br /&gt;
NEKCEM is available for download via the Subversion repository:&lt;br /&gt;
&lt;br /&gt;
    svn co https://svn.mcs.anl.gov/repos/NEKCEM&lt;br /&gt;
&lt;br /&gt;
It is also recommended to download ParaView.&lt;br /&gt;
&lt;br /&gt;
== Contents of NEKCEM package ==&lt;br /&gt;
&lt;br /&gt;
The NEKCEM package contains the source code, scripts, examples, &lt;br /&gt;
libraries used, and documentation.&lt;br /&gt;
&lt;br /&gt;
* src: source code&lt;br /&gt;
* bin: a collection of scripts for building and running NEKCEM&lt;br /&gt;
       makenek: To compile ../../bin/makenek under an 'example' dir; See makenek --help for options  &lt;br /&gt;
       nek: To run ../../bin/nek; See nek --help for options&lt;br /&gt;
       cleanall: To clean ../../bin/cleanall&lt;br /&gt;
* examples: sample problems including SIZEu, *.rea, *.map, *.usr (some special cases have additional files)&lt;br /&gt;
* libs: BLAS and LAPACK can be placed here if not already installed on your system&lt;br /&gt;
* tool: source codes for other utilities, mainly for meshing (detail below)&lt;br /&gt;
* doc: documentation&lt;br /&gt;
&lt;br /&gt;
== Compile ==&lt;br /&gt;
   &lt;br /&gt;
   cd NEKCEM/trunk/examples/cylwav&lt;br /&gt;
   ../../bin/makenek cylwave&lt;br /&gt;
&lt;br /&gt;
== Execute ==&lt;br /&gt;
&lt;br /&gt;
   cd NEKCEM/trunk/examples/cylwave&lt;br /&gt;
   ../../bin/nek cylwave #np&lt;br /&gt;
&lt;br /&gt;
   Note: on Jaguar, do ../../bin/nek cylware #np1 #np1, where #np1 is the actual core number you need, &lt;br /&gt;
         and #np2 is the core number you request from system, which has to be a multiple of 16.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/RUN&amp;diff=400</id>
		<title>Main Page/RUN</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/RUN&amp;diff=400"/>
		<updated>2012-03-15T04:27:26Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: /* Execute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting the Source ==&lt;br /&gt;
&lt;br /&gt;
NEKCEM is available for download via the Subversion repository:&lt;br /&gt;
&lt;br /&gt;
    svn co https://svn.mcs.anl.gov/repos/NEKCEM&lt;br /&gt;
&lt;br /&gt;
It is also recommended to download ParaView.&lt;br /&gt;
&lt;br /&gt;
== Contents of NEKCEM package ==&lt;br /&gt;
&lt;br /&gt;
The NEKCEM package contains the source code, scripts, examples, &lt;br /&gt;
libraries used, and documentation.&lt;br /&gt;
&lt;br /&gt;
* src: source code&lt;br /&gt;
* bin: a collection of scripts for building and running NEKCEM&lt;br /&gt;
       makenek: To compile ../../bin/makenek under an 'example' dir; See makenek --help for options  &lt;br /&gt;
       nek: To run ../../bin/nek; See nek --help for options&lt;br /&gt;
       cleanall: To clean ../../bin/cleanall&lt;br /&gt;
* examples: sample problems including SIZEu, *.rea, *.map, *.usr (some special cases have additional files)&lt;br /&gt;
* libs: BLAS and LAPACK can be placed here if not already installed on your system&lt;br /&gt;
* tool: source codes for other utilities, mainly for meshing (detail below)&lt;br /&gt;
* doc: documentation&lt;br /&gt;
&lt;br /&gt;
== Compile ==&lt;br /&gt;
   &lt;br /&gt;
   cd NEKCEM/trunk/examples/cylwav&lt;br /&gt;
   ../../bin/makenek cylwave&lt;br /&gt;
&lt;br /&gt;
== Execute ==&lt;br /&gt;
&lt;br /&gt;
   cd NEKCEM/trunk/examples/cylwave&lt;br /&gt;
   ../../bin/nek cylwave #np&lt;br /&gt;
&lt;br /&gt;
   Note: on Jaguar, do ../../bin/nek cylware #np1 #np1, where #np1 is the actual core number you need, &lt;br /&gt;
   and #np2 is the core number you request from system, which has to be a multiple of 16.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/RUN&amp;diff=398</id>
		<title>Main Page/RUN</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/RUN&amp;diff=398"/>
		<updated>2012-03-15T04:27:00Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting the Source ==&lt;br /&gt;
&lt;br /&gt;
NEKCEM is available for download via the Subversion repository:&lt;br /&gt;
&lt;br /&gt;
    svn co https://svn.mcs.anl.gov/repos/NEKCEM&lt;br /&gt;
&lt;br /&gt;
It is also recommended to download ParaView.&lt;br /&gt;
&lt;br /&gt;
== Contents of NEKCEM package ==&lt;br /&gt;
&lt;br /&gt;
The NEKCEM package contains the source code, scripts, examples, &lt;br /&gt;
libraries used, and documentation.&lt;br /&gt;
&lt;br /&gt;
* src: source code&lt;br /&gt;
* bin: a collection of scripts for building and running NEKCEM&lt;br /&gt;
       makenek: To compile ../../bin/makenek under an 'example' dir; See makenek --help for options  &lt;br /&gt;
       nek: To run ../../bin/nek; See nek --help for options&lt;br /&gt;
       cleanall: To clean ../../bin/cleanall&lt;br /&gt;
* examples: sample problems including SIZEu, *.rea, *.map, *.usr (some special cases have additional files)&lt;br /&gt;
* libs: BLAS and LAPACK can be placed here if not already installed on your system&lt;br /&gt;
* tool: source codes for other utilities, mainly for meshing (detail below)&lt;br /&gt;
* doc: documentation&lt;br /&gt;
&lt;br /&gt;
== Compile ==&lt;br /&gt;
   &lt;br /&gt;
   cd NEKCEM/trunk/examples/cylwav&lt;br /&gt;
   ../../bin/makenek cylwave&lt;br /&gt;
&lt;br /&gt;
== Execute ==&lt;br /&gt;
&lt;br /&gt;
   cd NEKCEM/trunk/examples/cylwave&lt;br /&gt;
   ../../bin/nek cylwave #np&lt;br /&gt;
&lt;br /&gt;
   Note: on Jaguar, do ../../bin/nek cylware #np1 #np1, where #np1 is the actual core number you need, and #np2 is the core number you request from system, which has to be a multiple of 16.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/PIO&amp;diff=396</id>
		<title>Main Page/PIO</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/PIO&amp;diff=396"/>
		<updated>2011-12-17T04:36:08Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: /* Usage Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for parallel I/O library developed for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
;File Format&lt;br /&gt;
:Binary (used for production, compact size), or ASCII (used for debugging, human-readable)&lt;br /&gt;
&lt;br /&gt;
== Usage Introduction ==&lt;br /&gt;
&lt;br /&gt;
Users can use #1,2,3,4,5,6,7,8 in .rea file for a specific example, by parameter 81. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Several '''advanced parallel I/O''' algorithms based on MPI-IO library were developed. &amp;lt;br&amp;gt;&lt;br /&gt;
The analysis on the performance for those approaches are detailed in ''Parallel I/O &lt;br /&gt;
performance for application-level checkpointing on the Blue Gene/P, by Jing Fu et. al.'' [http://www.mcs.anl.gov/~mmin]&lt;br /&gt;
&lt;br /&gt;
  proc=processors&lt;br /&gt;
  '''param(81) = 4''': collective IO for N proc to 1 file ---&amp;gt; mpi-binary-N1-xxx.vtk &lt;br /&gt;
  '''param(81) = 5''': collective IO for N proc to multiple M-files ---&amp;gt; mpi-binary-NM-xxx.vtk&lt;br /&gt;
  '''param(81) = 6''': reduced-blocking IO for N proc to 1 file with M writers ---&amp;gt; mpi-binary-NM1-xxx.vtk&lt;br /&gt;
  '''param(81) = 7''': reduced-blocking IO for N proc to 1 file with M writers ---&amp;gt; mpi-ascii-NM1-xxx.vtk&lt;br /&gt;
  '''param(81) = 8''': reduced-blocking IO for N proc to multiple M-files with M writers ---&amp;gt; mpi-binary-NMM-xxx.vtk &lt;br /&gt;
&lt;br /&gt;
'''Note''' that param(82) and param(83) need to be set correctly in *.rea file.&lt;br /&gt;
  '''param(80)''' = ''exact'' total number of fields to be written&lt;br /&gt;
  '''param(82)''' = number of output files&lt;br /&gt;
  '''param(83)''' = frequency of restart output files, 0 (no restart output), #nn (iostep*nn) &lt;br /&gt;
  '''param(84)''' = invoked with dump_number from the name of the restarting output file &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
For '''traditional I/O''' approaches based on one file per processor, using ''old libraries'', one can use&lt;br /&gt;
&lt;br /&gt;
  '''param(81) = 2''': use Fortran I/O library (ASCII, VTK format) ---&amp;gt; ascii-xxx.vtk&lt;br /&gt;
  '''param(81) = 3''': use C-POSIX I/O libraries (binary, VTK format) ---&amp;gt; binary-xxx.vtk &lt;br /&gt;
&lt;br /&gt;
  '''param(81) = 1''': use nek5000's old output format (ASCII) -&amp;gt; xxx.fld&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
&lt;br /&gt;
The output files with param(81)=2,3,4,5,6,7,8 can be visualized with '''ParaView''' and '''VisIt'''. &amp;lt;br&amp;gt;&lt;br /&gt;
The output with param(81)=1 can be visualized with nek5000 visualization tool, '''postx''' &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/bgQ&amp;diff=395</id>
		<title>Main Page/bgQ</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/bgQ&amp;diff=395"/>
		<updated>2011-08-18T06:08:29Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=393</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=393"/>
		<updated>2011-06-13T16:31:13Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: /* Questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
==Pros and Cons of Pthread and OpenMP==&lt;br /&gt;
*Pthread&lt;br /&gt;
** Pros: low-level control of program, well supported&lt;br /&gt;
** Cons: need to cast the codebase into a threaded model, requires considerable threading-specific code; hard-code thread number etc, not very portable&lt;br /&gt;
** Misc: can use thread pool when not sure about machine processor details (to be more portable than hard-coded thread#)&lt;br /&gt;
*OpenMP&lt;br /&gt;
** Pros: medium-grained control over threading functionality; auto-adjust according to machine specifics; use pragmas (over API) not interfere with single-threaded codebase; easy to debug as well;&lt;br /&gt;
** Cons: compiler support on BG/P? &lt;br /&gt;
** Misc:&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi-core and many-core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;br /&gt;
* ILP and TLP&lt;br /&gt;
** Some instruction-level parallelism (ILP) methods like superscalar pipelining are suitable for many applications, but are inefficient for others that tend to contain difficult-to-predict code. &lt;br /&gt;
** Many applications are better suited to thread level parallelism (TLP) methods, and multiple independent CPUs is one common method used to increase a system's overall TLP. The Multithreading paradigm has become more popular as efforts to further exploit instruction level parallelism have stalled since the late-1990s.&lt;br /&gt;
* multi-threading v.s. multi-processing&lt;br /&gt;
** multi-threading advantage&lt;br /&gt;
*** If a thread gets a lot of cache misses, the other thread(s) can continue, taking advantage of the unused computing resources, which thus can lead to faster overall execution, as these resources would have been idle if only a single thread was executed.&lt;br /&gt;
**multi-threading disadvantage&lt;br /&gt;
*** Execution times of a single-thread are not improved but can be degraded, even when only one thread is executing. This is due to slower frequencies and/or additional pipeline stages that are necessary to accommodate thread-switching hardware.&lt;br /&gt;
** Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. &lt;br /&gt;
** SMP MIMD multiprocessing&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
* thread-safe MPI implementation?&lt;br /&gt;
** thread-safe usually means MPI_THREAD_MULTIPLE&lt;br /&gt;
** only need MPI_THREAD_FUNNEL for master-only style.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/PIO&amp;diff=391</id>
		<title>Main Page/PIO</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/PIO&amp;diff=391"/>
		<updated>2011-06-13T16:23:39Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for parallel I/O library developed for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
;File Format&lt;br /&gt;
:Binary (used for production, compact size), or ASCII (used for debugging, human-readable)&lt;br /&gt;
&lt;br /&gt;
== Usage Introduction ==&lt;br /&gt;
&lt;br /&gt;
Users can use #1,2,3,4,5,6,7,8 in .rea file for a specific example, by parameter 81. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Several '''advanced parallel I/O''' algorithms based on MPI-IO library were developed. &amp;lt;br&amp;gt;&lt;br /&gt;
The analysis on the performance for those approaches are detailed in ''Parallel I/O &lt;br /&gt;
performance for application-level checkpointing on the Blue Gene/P, by Jing Fu et. al.'' [http://www.mcs.anl.gov/~mmin]&lt;br /&gt;
&lt;br /&gt;
  proc=processors&lt;br /&gt;
  '''param(81) = 4''': collective IO for N proc to 1 file ---&amp;gt; mpi-binary-N1-xxx.vtk &lt;br /&gt;
  '''param(81) = 5''': collective IO for N proc to multiple M-files ---&amp;gt; mpi-binary-NM-xxx.vtk&lt;br /&gt;
  '''param(81) = 6''': reduced-blocking IO for N proc to 1 file with M writers ---&amp;gt; mpi-binary-NM1-xxx.vtk&lt;br /&gt;
  '''param(81) = 7''': reduced-blocking IO for N proc to 1 file with M writers ---&amp;gt; mpi-ascii-NM1-xxx.vtk&lt;br /&gt;
  '''param(81) = 8''': reduced-blocking IO for N proc to multiple M-files with M writers ---&amp;gt; mpi-binary-NMM-xxx.vtk &lt;br /&gt;
&lt;br /&gt;
'''Note''' that param(82) and param(83) need to be set correctly in *.rea file.&lt;br /&gt;
  '''param(82)''' = number of output files&lt;br /&gt;
  '''param(83)''' = max number of fields to be written&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
For '''traditional I/O''' approaches based on one file per processor, using ''old libraries'', one can use&lt;br /&gt;
&lt;br /&gt;
  '''param(81) = 2''': use Fortran I/O library (ASCII, VTK format) ---&amp;gt; ascii-xxx.vtk&lt;br /&gt;
  '''param(81) = 3''': use C-POSIX I/O libraries (binary, VTK format) ---&amp;gt; binary-xxx.vtk &lt;br /&gt;
&lt;br /&gt;
  '''param(81) = 1''': use nek5000's old output format (ASCII) -&amp;gt; xxx.fld&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
&lt;br /&gt;
The output files with param(81)=2,3,4,5,6,7,8 can be visualized with '''ParaView''' and '''VisIt'''. &amp;lt;br&amp;gt;&lt;br /&gt;
The output with param(81)=1 can be visualized with nek5000 visualization tool, '''postx''' &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/C_Fortran&amp;diff=187</id>
		<title>Main Page/C Fortran</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/C_Fortran&amp;diff=187"/>
		<updated>2011-05-19T18:49:55Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PGI compiler name mangling convention ==&lt;br /&gt;
When programs are compiled using one of the PGI Fortran compilers on UNIX systems, an underscore is appended to Fortran global names (names of functions, subroutines and common blocks). &lt;br /&gt;
This mechanism distinguishes Fortran name space from C/C++ name space. &lt;br /&gt;
&lt;br /&gt;
If you call a C/C++ function from Fortran, you should rename the C/C++ function by appending an underscore (or use C$PRAGMA C in the Fortran program, refer to Chapter 9, Optimization Directives and Pragmas, for details on C$PRAGMA C) &lt;br /&gt;
&lt;br /&gt;
If you call a Fortran function from C/C++, you should append an underscore to the Fortran function name in the calling program.&lt;br /&gt;
(source: http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u07.htm#Heading93)&lt;br /&gt;
&lt;br /&gt;
==Name mangling in Fortran (from Wikipedia)==&lt;br /&gt;
&lt;br /&gt;
Name mangling is also necessary in Fortran compilers, originally because the language is case insensitive. Further mangling requirements were imposed later in the evolution of the language because of the addition of modules and other features in the Fortran 90 standard. The case mangling, especially, is a common issue that must be dealt with in order to call Fortran libraries (such as LAPACK) from other languages (such as C).&lt;br /&gt;
&lt;br /&gt;
Because of the case insensitivity, the name of a subroutine or function &amp;quot;FOO&amp;quot; must be converted to a canonical case and format by the Fortran compiler so that it will be linked in the same way regardless of case. Different compilers have implemented this in various ways, and no standardization has occurred. &lt;br /&gt;
&lt;br /&gt;
The AIX and HP-UX Fortran compilers convert all identifiers to lower case (&amp;quot;foo&amp;quot;), while the Cray Unicos Fortran compilers converted identifiers all upper case (&amp;quot;FOO&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
The GNU g77 compiler converts identifiers to lower case plus an underscore (&amp;quot;foo_&amp;quot;), except that identifiers already containing an underscore (&amp;quot;FOO_BAR&amp;quot;) have two underscores appended (&amp;quot;foo_bar__&amp;quot;), following a convention established by f2c. &lt;br /&gt;
&lt;br /&gt;
Many other compilers, including SGI's IRIX compilers, gfortran, and Intel's Fortran compiler, convert all identifiers to lower case plus an underscore (&amp;quot;foo_&amp;quot; and &amp;quot;foo_bar_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Identifiers in Fortran 90 modules must be further mangled, because the same subroutine name may apply to different routines in different modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1- SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
For a Fortran CALL SUB the corresponding C routine has to be named:&lt;br /&gt;
&lt;br /&gt;
SUB&lt;br /&gt;
    all upper case on Cray with cft77 compiler &lt;br /&gt;
sub&lt;br /&gt;
    all lower case on Apollo with ftn compiler &lt;br /&gt;
    case insensitive on IBM/370 and VMS &lt;br /&gt;
sub_&lt;br /&gt;
    lower case with underscore added on all other system&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/C_Fortran&amp;diff=185</id>
		<title>Main Page/C Fortran</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/C_Fortran&amp;diff=185"/>
		<updated>2011-05-19T18:49:40Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PGI compiler name mangling convention ==&lt;br /&gt;
When programs are compiled using one of the PGI Fortran compilers on UNIX systems, an underscore is appended to Fortran global names (names of functions, subroutines and common blocks). &lt;br /&gt;
This mechanism distinguishes Fortran name space from C/C++ name space. &lt;br /&gt;
&lt;br /&gt;
If you call a C/C++ function from Fortran, you should rename the C/C++ function by appending an underscore (or use C$PRAGMA C in the Fortran program, refer to Chapter 9, Optimization Directives and Pragmas, for details on C$PRAGMA C) &lt;br /&gt;
&lt;br /&gt;
If you call a Fortran function from C/C++, you should append an underscore to the Fortran function name in the calling program.&lt;br /&gt;
(source: http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u07.htm#Heading93)&lt;br /&gt;
&lt;br /&gt;
==Name mangling in Fortran (from Wikipedia)==&lt;br /&gt;
&lt;br /&gt;
Name mangling is also necessary in Fortran compilers, originally because the language is case insensitive. Further mangling requirements were imposed later in the evolution of the language because of the addition of modules and other features in the Fortran 90 standard. The case mangling, especially, is a common issue that must be dealt with in order to call Fortran libraries (such as LAPACK) from other languages (such as C).&lt;br /&gt;
&lt;br /&gt;
Because of the case insensitivity, the name of a subroutine or function &amp;quot;FOO&amp;quot; must be converted to a canonical case and format by the Fortran compiler so that it will be linked in the same way regardless of case. Different compilers have implemented this in various ways, and no standardization has occurred. &lt;br /&gt;
&lt;br /&gt;
The AIX and HP-UX Fortran compilers convert all identifiers to lower case (&amp;quot;foo&amp;quot;), while the Cray Unicos Fortran compilers converted identifiers all upper case (&amp;quot;FOO&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
The GNU g77 compiler converts identifiers to lower case plus an underscore (&amp;quot;foo_&amp;quot;), except that identifiers already containing an underscore (&amp;quot;FOO_BAR&amp;quot;) have two underscores appended (&amp;quot;foo_bar__&amp;quot;), following a convention established by f2c. &lt;br /&gt;
Many other compilers, including SGI's IRIX compilers, gfortran, and Intel's Fortran compiler, convert all identifiers to lower case plus an underscore (&amp;quot;foo_&amp;quot; and &amp;quot;foo_bar_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Identifiers in Fortran 90 modules must be further mangled, because the same subroutine name may apply to different routines in different modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1- SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
For a Fortran CALL SUB the corresponding C routine has to be named:&lt;br /&gt;
&lt;br /&gt;
SUB&lt;br /&gt;
    all upper case on Cray with cft77 compiler &lt;br /&gt;
sub&lt;br /&gt;
    all lower case on Apollo with ftn compiler &lt;br /&gt;
    case insensitive on IBM/370 and VMS &lt;br /&gt;
sub_&lt;br /&gt;
    lower case with underscore added on all other system&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/C_Fortran&amp;diff=183</id>
		<title>Main Page/C Fortran</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/C_Fortran&amp;diff=183"/>
		<updated>2011-05-19T18:48:23Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PGI compiler name mangling convention ==&lt;br /&gt;
When programs are compiled using one of the PGI Fortran compilers on UNIX systems, an underscore is appended to Fortran global names (names of functions, subroutines and common blocks). &lt;br /&gt;
This mechanism distinguishes Fortran name space from C/C++ name space. &lt;br /&gt;
&lt;br /&gt;
If you call a C/C++ function from Fortran, you should rename the C/C++ function by appending an underscore (or use C$PRAGMA C in the Fortran program, refer to Chapter 9, Optimization Directives and Pragmas, for details on C$PRAGMA C) &lt;br /&gt;
&lt;br /&gt;
If you call a Fortran function from C/C++, you should append an underscore to the Fortran function name in the calling program.&lt;br /&gt;
&lt;br /&gt;
source: http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u07.htm#Heading93&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Name mangling in Fortran (from Wikipedia)==&lt;br /&gt;
&lt;br /&gt;
Name mangling is also necessary in Fortran compilers, originally because the language is case insensitive. Further mangling requirements were imposed later in the evolution of the language because of the addition of modules and other features in the Fortran 90 standard. The case mangling, especially, is a common issue that must be dealt with in order to call Fortran libraries (such as LAPACK) from other languages (such as C).&lt;br /&gt;
&lt;br /&gt;
Because of the case insensitivity, the name of a subroutine or function &amp;quot;FOO&amp;quot; must be converted to a canonical case and format by the Fortran compiler so that it will be linked in the same way regardless of case. Different compilers have implemented this in various ways, and no standardization has occurred. The AIX and HP-UX Fortran compilers convert all identifiers to lower case (&amp;quot;foo&amp;quot;), while the Cray Unicos Fortran compilers converted identifiers all upper case (&amp;quot;FOO&amp;quot;). The GNU g77 compiler converts identifiers to lower case plus an underscore (&amp;quot;foo_&amp;quot;), except that identifiers already containing an underscore (&amp;quot;FOO_BAR&amp;quot;) have two underscores appended (&amp;quot;foo_bar__&amp;quot;), following a convention established by f2c. Many other compilers, including SGI's IRIX compilers, gfortran, and Intel's Fortran compiler, convert all identifiers to lower case plus an underscore (&amp;quot;foo_&amp;quot; and &amp;quot;foo_bar_&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Identifiers in Fortran 90 modules must be further mangled, because the same subroutine name may apply to different routines in different modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1- SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
For a Fortran CALL SUB the corresponding C routine has to be named:&lt;br /&gt;
&lt;br /&gt;
SUB&lt;br /&gt;
    all upper case on Cray with cft77 compiler &lt;br /&gt;
sub&lt;br /&gt;
    all lower case on Apollo with ftn compiler &lt;br /&gt;
    case insensitive on IBM/370 and VMS &lt;br /&gt;
sub_&lt;br /&gt;
    lower case with underscore added on all other system&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/C_Fortran&amp;diff=181</id>
		<title>Main Page/C Fortran</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/C_Fortran&amp;diff=181"/>
		<updated>2011-05-19T18:47:38Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PGI compiler name mangling convention ==&lt;br /&gt;
When programs are compiled using one of the PGI Fortran compilers on UNIX systems, an underscore is appended to Fortran global names (names of functions, subroutines and common blocks). &lt;br /&gt;
This mechanism distinguishes Fortran name space from C/C++ name space. &lt;br /&gt;
&lt;br /&gt;
If you call a C/C++ function from Fortran, you should rename the C/C++ function by appending an underscore (or use C$PRAGMA C in the Fortran program, refer to Chapter 9, Optimization Directives and Pragmas, for details on C$PRAGMA C) &lt;br /&gt;
&lt;br /&gt;
If you call a Fortran function from C/C++, you should append an underscore to the Fortran function name in the calling program.&lt;br /&gt;
&lt;br /&gt;
source: http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u07.htm#Heading93&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1- SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
For a Fortran CALL SUB the corresponding C routine has to be named:&lt;br /&gt;
&lt;br /&gt;
SUB&lt;br /&gt;
    all upper case on Cray with cft77 compiler &lt;br /&gt;
sub&lt;br /&gt;
    all lower case on Apollo with ftn compiler &lt;br /&gt;
    case insensitive on IBM/370 and VMS &lt;br /&gt;
sub_&lt;br /&gt;
    lower case with underscore added on all other system&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/C_Fortran&amp;diff=179</id>
		<title>Main Page/C Fortran</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/C_Fortran&amp;diff=179"/>
		<updated>2011-05-19T18:47:03Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== PGI compiler name mangling convention ==&lt;br /&gt;
When programs are compiled using one of the PGI Fortran compilers on UNIX systems, an underscore is appended to Fortran global names (names of functions, subroutines and common blocks). This mechanism distinguishes Fortran name space from C/C++ name space. If you call a C/C++ function from Fortran, you should rename the C/C++ function by appending an underscore (or use C$PRAGMA C in the Fortran program, refer to Chapter 9, Optimization Directives and Pragmas, for details on C$PRAGMA C) If you call a Fortran function from C/C++, you should append an underscore to the Fortran function name in the calling program.&lt;br /&gt;
source: http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u07.htm#Heading93&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.1- SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
For a Fortran CALL SUB the corresponding C routine has to be named:&lt;br /&gt;
&lt;br /&gt;
SUB&lt;br /&gt;
    all upper case on Cray with cft77 compiler &lt;br /&gt;
sub&lt;br /&gt;
    all lower case on Apollo with ftn compiler &lt;br /&gt;
    case insensitive on IBM/370 and VMS &lt;br /&gt;
sub_&lt;br /&gt;
    lower case with underscore added on all other system&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/C_Fortran&amp;diff=177</id>
		<title>Main Page/C Fortran</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/C_Fortran&amp;diff=177"/>
		<updated>2011-05-19T18:30:01Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: Created page with &amp;quot;2.1- SUBROUTINE  For a Fortran CALL SUB the corresponding C routine has to be named:  SUB     all upper case on Cray with cft77 compiler  sub     all lower case on Apollo with ft…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2.1- SUBROUTINE&lt;br /&gt;
&lt;br /&gt;
For a Fortran CALL SUB the corresponding C routine has to be named:&lt;br /&gt;
&lt;br /&gt;
SUB&lt;br /&gt;
    all upper case on Cray with cft77 compiler &lt;br /&gt;
sub&lt;br /&gt;
    all lower case on Apollo with ftn compiler &lt;br /&gt;
    case insensitive on IBM/370 and VMS &lt;br /&gt;
sub_&lt;br /&gt;
    lower case with underscore added on all other system&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=175</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=175"/>
		<updated>2011-05-19T18:28:33Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/bgQ Blue Gene/Q and Mira]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/C_Fortran C Fortran mixed programming]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/Meeting_Notes Meeting Notes]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
&lt;br /&gt;
* compile and run NekCEM&lt;br /&gt;
** in a specific case, ../../bin/cleanall, ../../bin/makenek, ../../bin/nek &amp;quot;case_name&amp;quot; #proc (e.g. in cylwave, ../../bin/nek cylwave 4)&lt;br /&gt;
&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=173</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=173"/>
		<updated>2011-03-21T02:01:56Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
==Pros and Cons of Pthread and OpenMP==&lt;br /&gt;
*Pthread&lt;br /&gt;
** Pros: low-level control of program, well supported&lt;br /&gt;
** Cons: need to cast the codebase into a threaded model, requires considerable threading-specific code; hard-code thread number etc, not very portable&lt;br /&gt;
** Misc: can use thread pool when not sure about machine processor details (to be more portable than hard-coded thread#)&lt;br /&gt;
*OpenMP&lt;br /&gt;
** Pros: medium-grained control over threading functionality; auto-adjust according to machine specifics; use pragmas (over API) not interfere with single-threaded codebase; easy to debug as well;&lt;br /&gt;
** Cons: compiler support on BG/P? &lt;br /&gt;
** Misc:&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi-core and many-core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;br /&gt;
* ILP and TLP&lt;br /&gt;
** Some instruction-level parallelism (ILP) methods like superscalar pipelining are suitable for many applications, but are inefficient for others that tend to contain difficult-to-predict code. &lt;br /&gt;
** Many applications are better suited to thread level parallelism (TLP) methods, and multiple independent CPUs is one common method used to increase a system's overall TLP. The Multithreading paradigm has become more popular as efforts to further exploit instruction level parallelism have stalled since the late-1990s.&lt;br /&gt;
* multi-threading v.s. multi-processing&lt;br /&gt;
** multi-threading advantage&lt;br /&gt;
*** If a thread gets a lot of cache misses, the other thread(s) can continue, taking advantage of the unused computing resources, which thus can lead to faster overall execution, as these resources would have been idle if only a single thread was executed.&lt;br /&gt;
**multi-threading disadvantage&lt;br /&gt;
*** Execution times of a single-thread are not improved but can be degraded, even when only one thread is executing. This is due to slower frequencies and/or additional pipeline stages that are necessary to accommodate thread-switching hardware.&lt;br /&gt;
** Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. &lt;br /&gt;
** SMP MIMD multiprocessing&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
* Which MPI implementations are thread-safe?&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=171</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=171"/>
		<updated>2011-03-21T02:01:37Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
==Pros and Cons of Pthread and OpenMP&lt;br /&gt;
*Pthread&lt;br /&gt;
** Pros: low-level control of program, well supported&lt;br /&gt;
** Cons: need to cast the codebase into a threaded model, requires considerable threading-specific code; hard-code thread number etc, not very portable&lt;br /&gt;
** Misc: can use thread pool when not sure about machine processor details (to be more portable than hard-coded thread#)&lt;br /&gt;
*OpenMP&lt;br /&gt;
** Pros: medium-grained control over threading functionality; auto-adjust according to machine specifics; use pragmas (over API) not interfere with single-threaded codebase; easy to debug as well;&lt;br /&gt;
** Cons: compiler support on BG/P? &lt;br /&gt;
** Misc:&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi-core and many-core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;br /&gt;
* ILP and TLP&lt;br /&gt;
** Some instruction-level parallelism (ILP) methods like superscalar pipelining are suitable for many applications, but are inefficient for others that tend to contain difficult-to-predict code. &lt;br /&gt;
** Many applications are better suited to thread level parallelism (TLP) methods, and multiple independent CPUs is one common method used to increase a system's overall TLP. The Multithreading paradigm has become more popular as efforts to further exploit instruction level parallelism have stalled since the late-1990s.&lt;br /&gt;
* multi-threading v.s. multi-processing&lt;br /&gt;
** multi-threading advantage&lt;br /&gt;
*** If a thread gets a lot of cache misses, the other thread(s) can continue, taking advantage of the unused computing resources, which thus can lead to faster overall execution, as these resources would have been idle if only a single thread was executed.&lt;br /&gt;
**multi-threading disadvantage&lt;br /&gt;
*** Execution times of a single-thread are not improved but can be degraded, even when only one thread is executing. This is due to slower frequencies and/or additional pipeline stages that are necessary to accommodate thread-switching hardware.&lt;br /&gt;
** Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. &lt;br /&gt;
** SMP MIMD multiprocessing&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
* Which MPI implementations are thread-safe?&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=169</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=169"/>
		<updated>2011-02-25T01:49:38Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/bgQ Blue Gene/Q and Mira]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/Meeting_Notes Meeting Notes]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
&lt;br /&gt;
* compile and run NekCEM&lt;br /&gt;
** in a specific case, ../../bin/cleanall, ../../bin/makenek, ../../bin/nek &amp;quot;case_name&amp;quot; #proc (e.g. in cylwave, ../../bin/nek cylwave 4)&lt;br /&gt;
&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=167</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=167"/>
		<updated>2011-02-25T01:48:51Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/bgQ Blue Gene/Q and Mira]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/Meeting_Notes Meeting Notes]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
&lt;br /&gt;
* compile and run NekCEM&lt;br /&gt;
** in a specific case, ../../bin/cleanall, ../../bin/makenek, ../../bin/nek &amp;quot;case_name&amp;quot; #proc&lt;br /&gt;
** e.g., in cylwave, ../../bin/nek cylwave 4&lt;br /&gt;
&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=165</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=165"/>
		<updated>2011-02-25T01:48:24Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/bgQ Blue Gene/Q and Mira]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/Meeting_Notes Meeting Notes]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* compile and run NekCEM&lt;br /&gt;
** in a specific case, ../../bin/cleanall, ../../bin/makenek, ../../bin/nek &amp;quot;case_name&amp;quot; #proc&lt;br /&gt;
** e.g., in cylwave, ../../bin/nek cylwave 4&lt;br /&gt;
&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/Meeting_Notes&amp;diff=163</id>
		<title>Main Page/Meeting Notes</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/Meeting_Notes&amp;diff=163"/>
		<updated>2011-02-22T22:16:56Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page records meeting notes about [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Notes==&lt;br /&gt;
=== 02/17/2011, Misun, Jing Fu===&lt;br /&gt;
* Paper&lt;br /&gt;
** will keep iterating the NekCEM I/O paper in accordance to review/feedback from ICS&lt;br /&gt;
** Chris suggest [http://www.ppam.pl/ PPAM] (submit: 4/30, notify: 6/15) over ICPP and Cluster&lt;br /&gt;
** Results on Jaguar is going to take a while (allocation application turnaround time, compile NekCEM on Cray machines, tune performance, summarize results in paper)&lt;br /&gt;
** Results from Jaguar/Lustre can go into follow-up journal paper (most likely by the end of summer)&lt;br /&gt;
&lt;br /&gt;
* hybrid model &lt;br /&gt;
** I/O w/ pthread is coming along on SMP machines, will try Intrepid soon&lt;br /&gt;
** OpenMP should expect strong support (according to Bronis etc.), will likely be used for computation frame &lt;br /&gt;
** pthread should be acceptable for I/O tasks&lt;br /&gt;
** MPI task?&lt;br /&gt;
** test sub-communicator collective performance degradation (for potential total comm split)&lt;br /&gt;
*** for all_reduce, going through subcomm would force routine go torus rather than collective tree network, causing a 10x-30x performance drop for double and integer all_reduce, compared to on MPI_COMM_WORLD; tested on 32k and 64k&lt;br /&gt;
&lt;br /&gt;
* summer time frame&lt;br /&gt;
** Flexible, Misun only absent July 26-29&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/Meeting_Notes&amp;diff=161</id>
		<title>Main Page/Meeting Notes</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/Meeting_Notes&amp;diff=161"/>
		<updated>2011-02-22T22:16:20Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page records meeting notes about [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Notes==&lt;br /&gt;
=== 02/17/2011, Misun, Jing Fu===&lt;br /&gt;
* Paper&lt;br /&gt;
** will keep iterating the NekCEM I/O paper in accordance to review/feedback from ICS&lt;br /&gt;
** Chris suggest [http://www.ppam.pl/ PPAM] (submit: 4/30, notify: 6/15) over ICPP and Cluster&lt;br /&gt;
** Results on Jaguar is going to take a while (allocation application turnaround time, compile NekCEM on Cray machines, tune performance, summarize results in paper)&lt;br /&gt;
** Results from Jaguar/Lustre can go into follow-up journal paper (most likely by the end of summer)&lt;br /&gt;
&lt;br /&gt;
* hybrid model &lt;br /&gt;
** I/O w/ pthread is coming along on SMP machines, will try Intrepid soon&lt;br /&gt;
** OpenMP should expect strong support (according to Bronis etc.), will likely be used for computation frame &lt;br /&gt;
** pthread should be acceptable for I/O tasks&lt;br /&gt;
** MPI task?&lt;br /&gt;
** test sub-communicator collective performance degradation (for potential total comm split)&lt;br /&gt;
*** for all_reduce, going through subcomm would force routine go torus rather than collective tree network, causing a 10x-30x performance drop for double and integer all_reduce, compared to on MPI_COMM_WORLD; tested on 32k and 64k&lt;br /&gt;
&lt;br /&gt;
* summer time frame&lt;br /&gt;
** Flexible, Misun only out July 26-29&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/Meeting_Notes&amp;diff=159</id>
		<title>Main Page/Meeting Notes</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/Meeting_Notes&amp;diff=159"/>
		<updated>2011-02-22T22:06:30Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page records meeting notes about [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Notes==&lt;br /&gt;
=== 02/17/2011, Misun, Jing Fu===&lt;br /&gt;
* Paper&lt;br /&gt;
** will keep iterating the NekCEM I/O paper&lt;br /&gt;
** Chris suggest [http://www.ppam.pl/ PPAM] (submit: 4/30, notify: 6/15) over ICPP and Cluster&lt;br /&gt;
** Results on Jaguar is going to take a while (allocation application turnaround time, compile NekCEM on Cray machines, tune performance, summarize results in paper)&lt;br /&gt;
** Results from Jaguar/Lustre can go into follow-up journal paper (most likely by the end of summer)&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=157</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=157"/>
		<updated>2011-02-22T22:01:29Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/bgQ Blue Gene/Q and Mira]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/Meeting_Notes Meeting Notes]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/Meeting_Notes&amp;diff=155</id>
		<title>Main Page/Meeting Notes</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/Meeting_Notes&amp;diff=155"/>
		<updated>2011-02-22T22:01:02Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page records meeting notes about [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Notes==&lt;br /&gt;
=== 02/17/2011, Misun, Jing Fu===&lt;br /&gt;
* &lt;br /&gt;
**&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/Meeting_Notes&amp;diff=153</id>
		<title>Main Page/Meeting Notes</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/Meeting_Notes&amp;diff=153"/>
		<updated>2011-02-22T22:00:31Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: Created page with &amp;quot;This page records meeting notes about [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM]. ==Notes== === 02/17/2011 === * Misun, Jing Fu **&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page records meeting notes about [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Notes==&lt;br /&gt;
=== 02/17/2011 ===&lt;br /&gt;
* Misun, Jing Fu&lt;br /&gt;
**&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/bgQ&amp;diff=151</id>
		<title>Main Page/bgQ</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/bgQ&amp;diff=151"/>
		<updated>2011-02-17T20:44:48Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Argonne National Laboratory is planning to move up to a 10-petaflop Blue Gene/Q supercomputer next year, supporting the DOE lab's scientific research. The new machine continues Argonne's six-year Blue Gene tradition, which has installed every iteration of the architecture in IBM's BG franchise.&lt;br /&gt;
&lt;br /&gt;
The Mira system is based on IBM's next-generation PowerPC SoC, in this case the 16-core Power A2 processor ([https://wiki.mcs.anl.gov/nekcem/index.php/File:Wire.pdf PDF]), a 64-bit CPU capable of handling 4 threads simultaneously. The processor has 32 KB of L1 cache -- 16 KB for data and 16 KB for instructions. L2 cache is made up of 8 MB of embedded DRAM (eDRAM ), a high-density on-chip memory technology that IBM uses for Blue Gene and its latest Power7 processors. Memory and I/O controllers are integrated on-chip.&lt;br /&gt;
&lt;br /&gt;
Each server node will contain a single A2 processor and sport either 8 or 16 GB of memory. A fully populated Blue Gene/Q rack contains 1024 nodes, representing 16K cores. I/O has been split from the server nodes so that configurations can scale compute and I/O independently. A rack can accommodate between 8 and 128 I/O nodes. Conveniently, the I/O nodes use the same Power A2 chip as the compute servers.&lt;br /&gt;
&lt;br /&gt;
Server-to-server communication is performed over a 5D Torus, which is capable of up to 40 gigabits per second, four times the speed of the Blue Gene/P interconnect. The 5D Torus employs fiber optics, the first Blue Gene design to do so.&lt;br /&gt;
&lt;br /&gt;
Compute performance is delivered by using a large number of relatively low-speed cores -- a hallmark of the Blue Gene architecture. Unlike the speedy 3.3 GHz Power7 chips that will go into the future Blue Waters supercomputer at the NCSA, the A2 processor for Blue Gene hums along at a modest 1.6 GHz (although faster versions of this chip can hit 3 GHz). According to IBM, Mira will encapsulate 750K cores, which works out to about 48,000 CPUs. Total memory is 750 TB, backed by 70 petabytes of disk storage.&lt;br /&gt;
&lt;br /&gt;
The low-speed, high-core approach makes for a very energy-efficient package. A Blue Gene/Q prototype grabbed first place on the November 2010 Green500 list, with a Linpack rating of 1684.2 megaflops/watt. That bested even the latest Fermi GPU accelerated supers, like the TSUBAME 2.0 system recently installed at Tokyo Tech, as well as IBM's fastest Cell (PowerXCell 8i) processor-accelerated QS22 clusters. To further boost energy efficiency and maintain reliability, all Blue Gene/Q racks are water cooled.&lt;br /&gt;
&lt;br /&gt;
Because of its size, Argonne is looking at Mira as a stepping stone to exaflop supercomputing. With less than a million cores though, programmers will have to use some imagination to scale their codes to the hundreds of millions of cores envisioned in a true exascale system.&lt;br /&gt;
&lt;br /&gt;
However, by the time IBM and others start building such machines, the Blue Gene PowerPC-based architecture is likely to be subsumed into the company's Power-based line-up (which at the processor ISA level, at least, is quite similar). Based on a recent conversation with Herb Schultz, marketing manager for IBM's Deep Computing unit, the Power and Blue Gene lines may merge around the middle of this decade. That would suggest that Blue Gene/Q could very well be the last in the Blue Gene lineage.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/bgQ&amp;diff=149</id>
		<title>Main Page/bgQ</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/bgQ&amp;diff=149"/>
		<updated>2011-02-17T20:42:07Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Mira system is based on IBM's next-generation PowerPC SoC, in this case the 16-core Power A2 processor ([https://wiki.mcs.anl.gov/nekcem/index.php/File:Wire.pdf PDF]), a 64-bit CPU capable of handling 4 threads simultaneously. The processor has 32 KB of L1 cache -- 16 KB for data and 16 KB for instructions. L2 cache is made up of 8 MB of embedded DRAM (eDRAM ), a high-density on-chip memory technology that IBM uses for Blue Gene and its latest Power7 processors. Memory and I/O controllers are integrated on-chip.&lt;br /&gt;
&lt;br /&gt;
Each server node will contain a single A2 processor and sport either 8 or 16 GB of memory. A fully populated Blue Gene/Q rack contains 1024 nodes, representing 16K cores. I/O has been split from the server nodes so that configurations can scale compute and I/O independently. A rack can accommodate between 8 and 128 I/O nodes. Conveniently, the I/O nodes use the same Power A2 chip as the compute servers.&lt;br /&gt;
&lt;br /&gt;
Server-to-server communication is performed over a 5D Torus, which is capable of up to 40 gigabits per second, four times the speed of the Blue Gene/P interconnect. The 5D Torus employs fiber optics, the first Blue Gene design to do so.&lt;br /&gt;
&lt;br /&gt;
Compute performance is delivered by using a large number of relatively low-speed cores -- a hallmark of the Blue Gene architecture. Unlike the speedy 3.3 GHz Power7 chips that will go into the future Blue Waters supercomputer at the NCSA, the A2 processor for Blue Gene hums along at a modest 1.6 GHz (although faster versions of this chip can hit 3 GHz). According to IBM, Mira will encapsulate 750K cores, which works out to about 48,000 CPUs. Total memory is 750 TB, backed by 70 petabytes of disk storage.&lt;br /&gt;
&lt;br /&gt;
The low-speed, high-core approach makes for a very energy-efficient package. A Blue Gene/Q prototype grabbed first place on the November 2010 Green500 list, with a Linpack rating of 1684.2 megaflops/watt. That bested even the latest Fermi GPU accelerated supers, like the TSUBAME 2.0 system recently installed at Tokyo Tech, as well as IBM's fastest Cell (PowerXCell 8i) processor-accelerated QS22 clusters. To further boost energy efficiency and maintain reliability, all Blue Gene/Q racks are water cooled.&lt;br /&gt;
&lt;br /&gt;
Because of its size, Argonne is looking at Mira as a stepping stone to exaflop supercomputing. With less than a million cores though, programmers will have to use some imagination to scale their codes to the hundreds of millions of cores envisioned in a true exascale system.&lt;br /&gt;
&lt;br /&gt;
However, by the time IBM and others start building such machines, the Blue Gene PowerPC-based architecture is likely to be subsumed into the company's Power-based line-up (which at the processor ISA level, at least, is quite similar). Based on a recent conversation with Herb Schultz, marketing manager for IBM's Deep Computing unit, the Power and Blue Gene lines may merge around the middle of this decade. That would suggest that Blue Gene/Q could very well be the last in the Blue Gene lineage.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=File:Wire.pdf&amp;diff=147</id>
		<title>File:Wire.pdf</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=File:Wire.pdf&amp;diff=147"/>
		<updated>2011-02-17T20:41:28Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=145</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=145"/>
		<updated>2011-02-17T20:35:40Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/bgQ Blue Gene/Q and Mira]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/bgQ&amp;diff=143</id>
		<title>Main Page/bgQ</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/bgQ&amp;diff=143"/>
		<updated>2011-02-17T20:35:07Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: Created page with &amp;quot;The Mira system is based on IBM's next-generation PowerPC SoC, in this case the 16-core Power A2 processor (PDF), a 64-bit CPU capable of handling 4 threads simultaneously. The p…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Mira system is based on IBM's next-generation PowerPC SoC, in this case the 16-core Power A2 processor (PDF), a 64-bit CPU capable of handling 4 threads simultaneously. The processor has 32 KB of L1 cache -- 16 KB for data and 16 KB for instructions. L2 cache is made up of 8 MB of embedded DRAM (eDRAM ), a high-density on-chip memory technology that IBM uses for Blue Gene and its latest Power7 processors. Memory and I/O controllers are integrated on-chip.&lt;br /&gt;
&lt;br /&gt;
Each server node will contain a single A2 processor and sport either 8 or 16 GB of memory. A fully populated Blue Gene/Q rack contains 1024 nodes, representing 16K cores. I/O has been split from the server nodes so that configurations can scale compute and I/O independently. A rack can accommodate between 8 and 128 I/O nodes. Conveniently, the I/O nodes use the same Power A2 chip as the compute servers.&lt;br /&gt;
&lt;br /&gt;
Server-to-server communication is performed over a 5D Torus, which is capable of up to 40 gigabits per second, four times the speed of the Blue Gene/P interconnect. The 5D Torus employs fiber optics, the first Blue Gene design to do so.&lt;br /&gt;
&lt;br /&gt;
Compute performance is delivered by using a large number of relatively low-speed cores -- a hallmark of the Blue Gene architecture. Unlike the speedy 3.3 GHz Power7 chips that will go into the future Blue Waters supercomputer at the NCSA, the A2 processor for Blue Gene hums along at a modest 1.6 GHz (although faster versions of this chip can hit 3 GHz). According to IBM, Mira will encapsulate 750K cores, which works out to about 48,000 CPUs. Total memory is 750 TB, backed by 70 petabytes of disk storage.&lt;br /&gt;
&lt;br /&gt;
The low-speed, high-core approach makes for a very energy-efficient package. A Blue Gene/Q prototype grabbed first place on the November 2010 Green500 list, with a Linpack rating of 1684.2 megaflops/watt. That bested even the latest Fermi GPU accelerated supers, like the TSUBAME 2.0 system recently installed at Tokyo Tech, as well as IBM's fastest Cell (PowerXCell 8i) processor-accelerated QS22 clusters. To further boost energy efficiency and maintain reliability, all Blue Gene/Q racks are water cooled.&lt;br /&gt;
&lt;br /&gt;
Because of its size, Argonne is looking at Mira as a stepping stone to exaflop supercomputing. With less than a million cores though, programmers will have to use some imagination to scale their codes to the hundreds of millions of cores envisioned in a true exascale system.&lt;br /&gt;
&lt;br /&gt;
However, by the time IBM and others start building such machines, the Blue Gene PowerPC-based architecture is likely to be subsumed into the company's Power-based line-up (which at the processor ISA level, at least, is quite similar). Based on a recent conversation with Herb Schultz, marketing manager for IBM's Deep Computing unit, the Power and Blue Gene lines may merge around the middle of this decade. That would suggest that Blue Gene/Q could very well be the last in the Blue Gene lineage.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=141</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=141"/>
		<updated>2011-02-09T03:37:45Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi-core and many-core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;br /&gt;
* ILP and TLP&lt;br /&gt;
** Some instruction-level parallelism (ILP) methods like superscalar pipelining are suitable for many applications, but are inefficient for others that tend to contain difficult-to-predict code. &lt;br /&gt;
** Many applications are better suited to thread level parallelism (TLP) methods, and multiple independent CPUs is one common method used to increase a system's overall TLP. The Multithreading paradigm has become more popular as efforts to further exploit instruction level parallelism have stalled since the late-1990s.&lt;br /&gt;
* multi-threading v.s. multi-processing&lt;br /&gt;
** multi-threading advantage&lt;br /&gt;
*** If a thread gets a lot of cache misses, the other thread(s) can continue, taking advantage of the unused computing resources, which thus can lead to faster overall execution, as these resources would have been idle if only a single thread was executed.&lt;br /&gt;
**multi-threading disadvantage&lt;br /&gt;
*** Execution times of a single-thread are not improved but can be degraded, even when only one thread is executing. This is due to slower frequencies and/or additional pipeline stages that are necessary to accommodate thread-switching hardware.&lt;br /&gt;
** Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. &lt;br /&gt;
** SMP MIMD multiprocessing&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
* Which MPI implementations are thread-safe?&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=139</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=139"/>
		<updated>2011-02-09T03:37:03Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi-core and many-core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;br /&gt;
* ILP and TLP&lt;br /&gt;
** Some instruction-level parallelism (ILP) methods like superscalar pipelining are suitable for many applications, but are inefficient for others that tend to contain difficult-to-predict code. &lt;br /&gt;
** Many applications are better suited to thread level parallelism (TLP) methods, and multiple independent CPUs is one common method used to increase a system's overall TLP. The Multithreading paradigm has become more popular as efforts to further exploit instruction level parallelism have stalled since the late-1990s.&lt;br /&gt;
* multi-threading v.s. multi-processing&lt;br /&gt;
** multi-threading advantage&lt;br /&gt;
*** If a thread gets a lot of cache misses, the other thread(s) can continue, taking advantage of the unused computing resources, which thus can lead to faster overall execution, as these resources would have been idle if only a single thread was executed.&lt;br /&gt;
**multi-threading disadvantage&lt;br /&gt;
*** Execution times of a single-thread are not improved but can be degraded, even when only one thread is executing. This is due to slower frequencies and/or additional pipeline stages that are necessary to accommodate thread-switching hardware.&lt;br /&gt;
** Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. &lt;br /&gt;
** SMP MIMD multiprocessing&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
* is MPI implementation thread-safe?&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=137</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=137"/>
		<updated>2011-02-09T03:04:11Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi-core and many-core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;br /&gt;
* ILP and TLP&lt;br /&gt;
** Some instruction-level parallelism (ILP) methods like superscalar pipelining are suitable for many applications, but are inefficient for others that tend to contain difficult-to-predict code. &lt;br /&gt;
** Many applications are better suited to thread level parallelism (TLP) methods, and multiple independent CPUs is one common method used to increase a system's overall TLP. The Multithreading paradigm has become more popular as efforts to further exploit instruction level parallelism have stalled since the late-1990s.&lt;br /&gt;
* multi-threading v.s. multi-processing&lt;br /&gt;
** multi-threading advantage&lt;br /&gt;
*** If a thread gets a lot of cache misses, the other thread(s) can continue, taking advantage of the unused computing resources, which thus can lead to faster overall execution, as these resources would have been idle if only a single thread was executed.&lt;br /&gt;
**multi-threading disadvantage&lt;br /&gt;
*** Execution times of a single-thread are not improved but can be degraded, even when only one thread is executing. This is due to slower frequencies and/or additional pipeline stages that are necessary to accommodate thread-switching hardware.&lt;br /&gt;
** Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them. &lt;br /&gt;
** SMP MIMD multiprocessing&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=135</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=135"/>
		<updated>2011-02-09T01:52:07Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;br /&gt;
* multi core and many core processors&lt;br /&gt;
** A multi-core processor is composed of two or more independent cores. One can describe it as an integrated circuit which has two or more individual processors (called cores in this sense).[1] Manufacturers typically integrate the cores onto a single integrated circuit die (known as a chip multiprocessor or CMP), or onto multiple dies in a single chip package.&lt;br /&gt;
** A many-core processor is one in which the number of cores is large enough that traditional multi-processor techniques are no longer efficient — largely due to issues with congestion supplying sufficient instructions and data to the many processors. This threshold is roughly in the range of several tens of cores and probably requires a network on chip.&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=133</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=133"/>
		<updated>2011-02-06T16:28:26Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/aio Sync/Async Blocking/non-blocking I/O]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/aio&amp;diff=131</id>
		<title>Main Page/aio</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/aio&amp;diff=131"/>
		<updated>2011-02-06T15:47:08Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Synchronous means that the OS will work on your IO request once they get your request.&lt;br /&gt;
&lt;br /&gt;
*Asynchronous means the OS will delay to work on your IO request. Maybe it is because OS is busy working on some other stuff or the IO is not available.&lt;br /&gt;
&lt;br /&gt;
*Blocking IO means you call the IO function to get the data. The function you called will not return until the data is available.&lt;br /&gt;
&lt;br /&gt;
*Non-Blocking IO means you call the IO function and the IO function returns right away. The IO function will just post a message to the work queue and the other process will fetch the message from this queue and then begin to get the data from the IO. Once the data is ready, they will notify you the data is ready.  &lt;br /&gt;
&lt;br /&gt;
http://www.ibm.com/developerworks/linux/library/l-async/?S_TACT=105AGX52&amp;amp;S_CMP=cn-a-l&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/aio&amp;diff=129</id>
		<title>Main Page/aio</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/aio&amp;diff=129"/>
		<updated>2011-02-06T15:46:54Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Synchronous means that the OS will work on your IO request once they get your request.&lt;br /&gt;
&lt;br /&gt;
*Asynchronous means the OS will delay to work on your IO request. Maybe it is&lt;br /&gt;
because OS is busy working on some other stuff or the IO is not available.&lt;br /&gt;
&lt;br /&gt;
*Blocking IO means you call the IO function to get the data. The function you&lt;br /&gt;
called will not return until the data is available.&lt;br /&gt;
&lt;br /&gt;
*Non-Blocking IO means you call the IO function and the IO function returns right away. The IO function will just post a message to the work queue and the other process will fetch the message from this queue and then begin to get the data from the IO. Once the data is ready, they will notify you the data is ready.  &lt;br /&gt;
&lt;br /&gt;
http://www.ibm.com/developerworks/linux/library/l-async/?S_TACT=105AGX52&amp;amp;S_CMP=cn-a-l&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/aio&amp;diff=127</id>
		<title>Main Page/aio</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/aio&amp;diff=127"/>
		<updated>2011-02-06T15:45:25Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: Created page with &amp;quot;synchronous means that the OS will work on your IO request once they get you r request.  asynchronous means the OS will delay to work on your IO request. Maybe it is because OS i…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;synchronous means that the OS will work on your IO request once they get you&lt;br /&gt;
r request.&lt;br /&gt;
&lt;br /&gt;
asynchronous means the OS will delay to work on your IO request. Maybe it is&lt;br /&gt;
because OS is busy working on some other stuff or the IO is not aviable.&lt;br /&gt;
&lt;br /&gt;
Blocking IO means you call the IO function to get the data. The function you&lt;br /&gt;
called will not return until the data is avaiable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Non-Blocking IO means you call the IO function and the IO function returns r&lt;br /&gt;
ight away. The IO fucntion will just post a message to the work queue and th&lt;br /&gt;
e other process will fetch the message from this queue and then begin to get&lt;br /&gt;
the data from the IO. Once the data is ready, they will notify you the data&lt;br /&gt;
is ready.  &lt;br /&gt;
&lt;br /&gt;
http://www.ibm.com/developerworks/linux/library/l-async/?S_TACT=105AGX52&amp;amp;S_CMP=cn-a-l&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/hybrid_prog&amp;diff=125</id>
		<title>Main Page/hybrid prog</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/hybrid_prog&amp;diff=125"/>
		<updated>2011-02-04T16:22:20Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the document page for hybrid programming proposal for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM] (some notes taken from DOE Exascale workshop).&lt;br /&gt;
&lt;br /&gt;
==Programming Model Approaches ==&lt;br /&gt;
* hybrid/evolutionary: MPI+ __ ?&lt;br /&gt;
** MPI for inter-node prog, since # notes and inter-node concerns not expected to change dramatically&lt;br /&gt;
*** support for hybrid programming/interoperability&lt;br /&gt;
*** purer one-sided communications; active messages&lt;br /&gt;
*** asynchronous collectives&lt;br /&gt;
** something else for intra-node&lt;br /&gt;
**# OpenMP (Shared memory, aka Global Address Space)&lt;br /&gt;
**#* introduction of locality-oriented concepts?&lt;br /&gt;
**#* efforts in OpenMP 3.0 ?&lt;br /&gt;
**# PGAS languages (Partitioned Global Address Space)&lt;br /&gt;
**#* already support a notation of locality in a shared namespace&lt;br /&gt;
**#* UPC (Unified Parallel C)/CAF need to relax strictly SPMD execution model&lt;br /&gt;
**# Sequoia&lt;br /&gt;
**#* support a strong notation of vertical locality&lt;br /&gt;
&lt;br /&gt;
* unified/holistic: __ ?&lt;br /&gt;
** a single notation for inter- and intra-node programming?&lt;br /&gt;
** traditional PGAS languages: UPC, CAF, Titanium&lt;br /&gt;
*** require extension to handle nested parallelism, vertical locality&lt;br /&gt;
** HPCS languages: Chapel, X10, Fortress(?)&lt;br /&gt;
*** designed with locality and post-SPMD parallelism in mind&lt;br /&gt;
** other candidates: Charm++, Global Arrays, Parallel X, ...&lt;br /&gt;
&lt;br /&gt;
* others&lt;br /&gt;
** mainstream multi-core/GPU language: (sufficient promise to be funded?)&lt;br /&gt;
**domain-specific language&lt;br /&gt;
*** fit your problem?&lt;br /&gt;
*** should focus on more general solutions&lt;br /&gt;
**functional languages&lt;br /&gt;
*** never heavily adopted in mainstream or HPC&lt;br /&gt;
*** copy-on-write optimization and alias analysis?&lt;br /&gt;
** parallel scripting languages?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Expectation==&lt;br /&gt;
*parallelism: nested, dynamic, loosely-coupled, data-driven (i.e. ''post-SPMD'' programming/execution models)&lt;br /&gt;
** to take advantage of architecture&lt;br /&gt;
** to better support load balancing and resilience&lt;br /&gt;
&lt;br /&gt;
* locality: concepts for vertical control as well as horizontal (i.e. locality within a node rather than simply between nodes)&lt;br /&gt;
&lt;br /&gt;
== Tools: Debuggers, perf. analysis==&lt;br /&gt;
* challenges&lt;br /&gt;
** need aggregation to hide details&lt;br /&gt;
** need to report info in user's terms&lt;br /&gt;
*good area for innovation (e.g. execution visualization to understand mapping of code to hardware)&lt;br /&gt;
&lt;br /&gt;
==Misc Notes==&lt;br /&gt;
* three main types of distributed memory programming: &lt;br /&gt;
** active message. Active Messages are actually a lower-level mechanism that can be used to implement data parallel or message passing efficiently.&lt;br /&gt;
** data parallel(aka loop-level parallelism). Data parallelism emphasizes the distributed (parallelized) nature of the data, as opposed to the processing (task parallelism).&lt;br /&gt;
** message passing&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=123</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=123"/>
		<updated>2011-02-01T03:45:40Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
	<entry>
		<id> /index.php?title=Main_Page/faq&amp;diff=121</id>
		<title>Main Page/faq</title>
		<link rel="alternate" type="text/html" href=" /index.php?title=Main_Page/faq&amp;diff=121"/>
		<updated>2011-02-01T03:44:48Z</updated>

		<summary type="html">&lt;p&gt;Jingfu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the resource listing page for [http://www.mcs.anl.gov/~mmin/nekcem.html NekCEM].&lt;br /&gt;
==Resource Links==&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/PIO Parallel I/O of NekCEM] &lt;br /&gt;
&lt;br /&gt;
*[https://wiki.mcs.anl.gov/nekcem/index.php/Main_Page/hybrid_prog Hybrid programming (proposed work)]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== I/O code ===&lt;br /&gt;
&lt;br /&gt;
* I/O functions were initiated from cem_out function of cem_dg.F (and cem_dg2.F).&lt;br /&gt;
* Implementation of parallel I/O routine were defined in vtkbin.c and rbIO_nekcem.c&lt;br /&gt;
* vtkcommon.c and vtkcommon.h serve as a place to hold common functions as well as global variables. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cem_out_fields3 (in cem_dg.F)&lt;br /&gt;
** openfile3(dumpno, nid) !vtkbin.c&lt;br /&gt;
** vtk_dump_header3&lt;br /&gt;
*** writeheader3() !vtkbin.c&lt;br /&gt;
*** writenodes3() !vtkbin.c&lt;br /&gt;
*** write2dcells3 !vtkbin.c &amp;lt;br&amp;gt; or write3dcells3 !vtkbin.c&lt;br /&gt;
** vtk_dump_field3&lt;br /&gt;
*** writefield3 !vtkbin.c&lt;br /&gt;
** close_file3 !vtkbin.c&lt;br /&gt;
&lt;br /&gt;
* Binary file &amp;amp;rarr; ASCII file: transfer double/float/int/read to chars then write out&lt;br /&gt;
** float (4 bytes) &amp;amp;rarr; %18.8E&lt;br /&gt;
** int (4 bytes) &amp;amp;rarr; %10d&lt;br /&gt;
** long long (8 bytes) &amp;amp;rarr; %18lld&lt;br /&gt;
** elemType &amp;amp;rarr; %4d&lt;br /&gt;
&lt;br /&gt;
=== NekCEM notes for myself===&lt;br /&gt;
* scaling&lt;br /&gt;
** strong scaling: defined as how the solution time varies with the number of processors for a fixed total problem size.&lt;br /&gt;
** weak scaling: defined as how the solution time varies with the number of processors for a fixed problem size per processor.&lt;br /&gt;
* pre-compute file size&lt;br /&gt;
** #grid point = nx * ny * nz * nelt; size = #grid point * 3 * float&lt;br /&gt;
** cell type: 2d &amp;amp;rarr; 4 * #cell * int + 1* #cell * int (3d &amp;amp;rarr; 9)&lt;br /&gt;
** #field = nfields * 3 * #grid point; size = #field * float;&lt;br /&gt;
&lt;br /&gt;
* .box &amp;amp;rarr; num elements in x,y,z&lt;br /&gt;
* .rea &amp;amp;rarr; input data&lt;br /&gt;
* SIZEu &amp;amp;rarr; SIZE parameters:&lt;br /&gt;
** lxi ?&lt;br /&gt;
** lp = #proc&lt;br /&gt;
** lelx = 20 each dimension&lt;br /&gt;
** lelv = alloc max # of element per proc&lt;br /&gt;
* .usr &amp;amp;rarr; subuser.F&lt;br /&gt;
* cem() in cem_dg.F is the main solver and application entry point&lt;br /&gt;
&lt;br /&gt;
* only CELL and point data need to be re-computed&lt;br /&gt;
== To-do List ==&lt;br /&gt;
*More tests on BG/P for config with ng = M and 1&amp;lt; nf &amp;lt; M &lt;br /&gt;
*Tests on Kraken and Jaguar&lt;br /&gt;
*Pthread + MPI for I/O&lt;br /&gt;
*OpenMP/Pthread + MPI for NekCEM computation&lt;br /&gt;
*Parallel I/O for reading .rea file&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous notes ==&lt;br /&gt;
* Fortran generated binary file may not be correctly read in C.&lt;br /&gt;
* -lstdc++ for link&lt;br /&gt;
* libF77 and libI77&lt;br /&gt;
* common.h and common_c.h&lt;br /&gt;
* write() in Fortran: 6 refer to screen, * is to screen as well ..&lt;/div&gt;</summary>
		<author><name>Jingfu</name></author>
	</entry>
</feed>