<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><DIV>Carl,</DIV>
<DIV> </DIV>
<DIV>  Here is even simplier example:</DIV>
<DIV> </DIV>
<DIV>  for (i = 0; i < 100; i++) {</DIV>
<DIV>     A = SQL(Database[i]); /* Loading data from the database i (which is stored at a disk)  based on some SQL statement and, say, it takes 1 hour */</DIV>
<DIV>     B  = roots_of_linear_equation(A); /* O(n^3) operations and, say, it takes 1 hour */</DIV>
<DIV>   }</DIV>
<DIV> </DIV>
<DIV>Now, without I/O optimization, it will take 200 hours to complete.  However, with I/O</DIV>
<DIV>optimization, the loop can transformed into (using OpenMP for example);</DIV>
<DIV> </DIV>
<DIV>  for(i = 0; i < 100; i++) {</DIV>
<DIV>     A = SQL(Database[i]);</DIV>
<DIV>     /* OpenMP parallel region */</DIV>
<DIV>    #pragma omp sections { <BR>       #pragma omp section {<BR>         if (i < 100) A = SQL(Database[i + 1]);</DIV>
<DIV>      }<BR>      #pragma omp section {<BR>         B  = roots_of_linear_equation(A);</DIV>
<DIV>      }</DIV>
<DIV>  }</DIV>
<DIV> </DIV>
<DIV>  And the time is reduced to 101 hours.  </DIV>
<DIV> </DIV>
<DIV>Salem<BR><BR>--- On <B>Fri, 8/27/10, Carl Alan Joslin <I><carl.joslin@joslinfamily.co.uk></I></B> wrote:<BR></DIV>
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(16,16,255) 2px solid"><BR>From: Carl Alan Joslin <carl.joslin@joslinfamily.co.uk><BR>Subject: Re: [sac-user] My wish list for Release 2.0<BR>To: "sac user mailing list" <sac-user@sac-home.org><BR>Date: Friday, August 27, 2010, 8:39 AM<BR><BR>
<DIV class=plainMail>Where are you using the disk?  Are you saying that the compiler adds the<BR>load_from_database() its self?<BR><BR>I can see that there is the potential to reduce memory usage by delaying<BR>the load_from_database() rather than having it at the start.  There is<BR>no technical reason I can think of that SaC could not move<BR>load_from_database() calls around.  However to be able to do this it<BR>must be statically possible for SaC to work out the memory size of most<BR>of the variables in your program.<BR><BR>This is some what different to what we where discussing.  This is about<BR>moving external calls around so that SaC makes the smallest demands on<BR>memory.<BR><BR>We could take this back to the disk memory discussion.<BR><BR>In this case you have a "database"/disk that you put your arrays into<BR>when they will not be needed for a while then take them back out later<BR>when they are needed again.  Do you
 have an example of a program that<BR>needs to compute large arrays, does something that depends on the values<BR>of the arrays that takes a long time and then needs the original array<BR>again, where the time to compute them is greater than the time to save<BR>them to disk and load them back again.<BR><BR>Carl<BR><BR>On Fri, 2010-08-27 at 05:08 -0700, Salem Reyen wrote:<BR>> Carl,<BR>>  <BR>>   Let me use an (over-simplified) example for prefetching:<BR>>  <BR>> /* Say, the system has 3TB RAM and for matrices A, B, C<BR>> and D, each has size 1TB */<BR>> /* Assume simu takes a long time for large data size */<BR>>  <BR>> A = load_from_database();<BR>> B = simu(A);<BR>> C = simu(B); /* With explicit prefetch support, it can start swaping<BR>> out A while it computes simu(B)  */                        <BR>> D =
 load_from_database(); /* An OS paging is avoided because A is<BR>> already out */<BR>> ...<BR>>  <BR>> BTW, D can also be loaded during the computation of simu(B).<BR>>  <BR>> Salem<BR>>  <BR>>  <BR>>  <BR>>  <BR>>  <BR>>  <BR>> <BR>> <BR>> --- On Fri, 8/27/10, Carl Alan Joslin <<A href="http://us.mc343.mail.yahoo.com/mc/compose?to=carl.joslin@joslinfamily.co.uk" ymailto="mailto:carl.joslin@joslinfamily.co.uk">carl.joslin@joslinfamily.co.uk</A>><BR>> wrote:<BR>> <BR>>         <BR>>         From: Carl Alan Joslin <<A href="http://us.mc343.mail.yahoo.com/mc/compose?to=carl.joslin@joslinfamily.co.uk" ymailto="mailto:carl.joslin@joslinfamily.co.uk">carl.joslin@joslinfamily.co.uk</A>><BR>>         Subject: Re: [sac-user] My wish list for Release
 2.0<BR>>         To: "sac user mailing list" <<A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A>><BR>>         Date: Friday, August 27, 2010, 7:19 AM<BR>>         <BR>>         Well the short answer is no, SaC can not tell the difference<BR>>         between<BR>>         swap/disk and memory so it will not make 20 memory copies over<BR>>         1 disk<BR>>         copy.<BR>>         <BR>>         SaC does do a good job at reducing random access to memory.<BR>>         This was<BR>>   
      done not to help with swap but to help higher up on the memory<BR>>         hierarchy<BR>>         at the cache level.  Random access to memory can also be<BR>>         expensive, as<BR>>         when you read just a byte from memory the processor reads at<BR>>         least the<BR>>         entire cache line into its cache, this then results in another<BR>>         line<BR>>         having to be moved out of the way. <BR>>         <BR>>         I do agree with you that controlling things explicitly does<BR>>         tend to<BR>>     
    result in improved performance.  However I still can not see a<BR>>         use case<BR>>         yet on how explicit handling of the disk/memory boundary will<BR>>         significantly help performance.<BR>>         <BR>>         Avoiding disk usage does seem to have the potential for huge<BR>>         benefits in<BR>>         performance for large working set problems, however I am not<BR>>         sure how<BR>>         yet.<BR>>         <BR>>         <BR>>         Carl<BR>>         <BR>>   
      On Thu, 2010-08-26 at 20:59 -0700, Salem Reyen wrote:<BR>>         > Carl,<BR>>         > <BR>>         >   Since I did not actually test the Roomy, I will not claim<BR>>         it will<BR>>         > provide a better performance. I used Roomy as (not<BR>>         necessarily the<BR>>         > best) example for explicit swap control.  I think the<BR>>         difference<BR>>         > between implicit swap (via OS paging) and explicit swap (via<BR>>         dumping<BR>>         > to a file) is that the explicit swap provides the
 compiler a<BR>>         total<BR>>         > control of data location (to reduce random disk access) and<BR>>         disk swap<BR>>         > minimization.  I agree that SaC provides very aggressive<BR>>         optimization<BR>>         > techniques to reduce the number of memory copies.  But my<BR>>         question is<BR>>         > that can SaC distiguishes between disk copy and memory copy?<BR>>         More<BR>>         > precisely, if there is a choice between 1 disk copy and 20<BR>>         memory<BR>>         > copies, can SaC
 select the later one for a large size data?<BR>>         > <BR>>         > Salem <BR>>         > <BR>>         > <BR>>         > --- On Thu, 8/26/10, Carl Alan Joslin <MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be<BR>>         <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=carl.joslin@joslinfamily.co.uk" ymailto="mailto:carl.joslin@joslinfamily.co.uk">carl.joslin@joslinfamily.co.uk</A>><BR>>   
      > wrote:<BR>>         >         <BR>>         >         From: Carl Alan Joslin <MailScanner has detected a<BR>>         possible fraud attempt from "us.mc343.mail.yahoo.com" claiming<BR>>         to be MailScanner has detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be<BR>>         <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=carl.joslin@joslinfamily.co.uk" ymailto="mailto:carl.joslin@joslinfamily.co.uk">carl.joslin@joslinfamily.co.uk</A>><BR>>         >         Subject: Re: [sac-user] My wish list for Release 2.0<BR>>     
    >         To: "sac user mailing list" <MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be<BR>>         <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A>><BR>>         >         Date: Thursday, August 26, 2010, 11:21 AM<BR>>         >         <BR>>         >     
    I have only had a very quick look at roomy.  Could<BR>>         you explain<BR>>         >         in more<BR>>         >         detail why not just using a 64bit system with a very<BR>>         large<BR>>         >         amount swap<BR>>         >         spread over several disks, will not solve the<BR>>         problem.  SaC<BR>>         >         tries hard<BR>>         >         to minimises access to arrays to a few
 sequential<BR>>         passes of<BR>>         >         each array.<BR>>         >         Because of this I am unsure how you expect to get<BR>>         extra<BR>>         >         performance from<BR>>         >         using roomy over the swap system of your operating<BR>>         system.<BR>>         >         After just a<BR>>         >         couple of minutes looking at this I can only see<BR>>         2^64bits
 of<BR>>         >         address<BR>>         >         space as the main limitation.<BR>>         >         <BR>>         >         Perhaps you could explain what I am not getting with<BR>>         the<BR>>         >         problem.<BR>>         >         <BR>>         >         Carl<BR>>         >         <BR>>         >         On
 Thu, 2010-08-26 at 06:23 -0700, Salem Reyen<BR>>         wrote:<BR>>         >         > I understand that SaC is just at version 1.0 and<BR>>         there are<BR>>         >         more things<BR>>         >         > which can be added.  I don't mind that SaC doesn't<BR>>         provide<BR>>         >         object<BR>>         >         > oriented classes (a useful features for having a<BR>>         cleaner<BR>>         >     
    design for<BR>>         >         > its graphic library),<BR>>         >         > lazy evaluation (to avoid loading gigantic object<BR>>         before its<BR>>         >         actual<BR>>         >         > usage) or eval function (to generate complex math<BR>>         function<BR>>         >         on the fly)<BR>>         >         > because they can be done at user level if SaC is<BR>>         used as an<BR>>   
      >         > intermediate language.  However, there is one<BR>>         missing<BR>>         >         feature that<BR>>         >         > cannot be done at user level:  implicit out of<BR>>         core support.<BR>>         >         That is,<BR>>         >         > the user doesn't have to worry about "out of<BR>>         memory"<BR>>         >         message.  To<BR>>         >     
    > reduce overhead, the compiler can minimize I/O by<BR>>         generating<BR>>         >         code that<BR>>         >         > can prefetch large data from the disk before its<BR>>         use and<BR>>         >         reuse the<BR>>         >         > data from a "cache" to avoid reloading.  Since the<BR>>         speed of<BR>>         >         solid<BR>>         >         > state drives have increased so
 dramatically<BR>>         (250MB/s to<BR>>         >         1.5GB/s per<BR>>         >         > drive), it may be practical to re-visit the "old"<BR>>         topics<BR>>         >         such as I/O<BR>>         >         > minimization and parallel I/O (eg, like the Roomy<BR>>         project<BR>>         >         > <A href="http://roomy.sourceforge.net/" target=_blank>http://roomy.sourceforge.net/</A>). <BR>>         >         > <BR>> 
        >         > Well, I am just rambling ... <BR>>         >         > <BR>>         >         > Salem <BR>>         >         > <BR>>         >         > <BR>>         >         >  <BR>>         >         > <BR>>         >         > _______________________________________________<BR>>         >         > sac-user mailing list<BR>> 
        >         > MailScanner has detected a possible fraud attempt<BR>>         from "us.mc343.mail.yahoo.com" claiming to be MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A><BR>>         >         ><BR>>         <A href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user" target=_blank>http://lists.sac-home.org/mailman/listinfo.cgi/sac-user</A><BR>>         >         <BR>>     
    >         _______________________________________________<BR>>         >         sac-user mailing list<BR>>         >         MailScanner has detected a possible fraud attempt<BR>>         from "us.mc343.mail.yahoo.com" claiming to be MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A><BR>>         ><BR>>            <A href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user"
 target=_blank>http://lists.sac-home.org/mailman/listinfo.cgi/sac-user</A><BR>>         >         <BR>>         > <BR>>         > _______________________________________________<BR>>         > sac-user mailing list<BR>>         > MailScanner has detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A><BR>>         > <A
 href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user" target=_blank>http://lists.sac-home.org/mailman/listinfo.cgi/sac-user</A><BR>>         <BR>>         _______________________________________________<BR>>         sac-user mailing list<BR>>         MailScanner has detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be MailScanner has<BR>>         detected a possible fraud attempt from<BR>>         "us.mc343.mail.yahoo.com" claiming to be <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A><BR>>         <A
 href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user" target=_blank>http://lists.sac-home.org/mailman/listinfo.cgi/sac-user</A><BR>>         <BR>> <BR>> _______________________________________________<BR>> sac-user mailing list<BR>> <A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A><BR>> <A href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user" target=_blank>http://lists.sac-home.org/mailman/listinfo.cgi/sac-user</A><BR><BR>_______________________________________________<BR>sac-user mailing list<BR><A href="http://us.mc343.mail.yahoo.com/mc/compose?to=sac-user@sac-home.org" ymailto="mailto:sac-user@sac-home.org">sac-user@sac-home.org</A><BR><A href="http://lists.sac-home.org/mailman/listinfo.cgi/sac-user"
 target=_blank>http://lists.sac-home.org/mailman/listinfo.cgi/sac-user</A><BR></DIV></BLOCKQUOTE></td></tr></table><br>