<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4959296721472542853</id><updated>2012-01-28T13:28:34.550+08:00</updated><category term='Quote'/><category term='Python'/><category term='Development'/><category term='PostgreSQL'/><category term='MySQL'/><category term='Study'/><category term='Mathematics'/><category term='Django'/><category term='Linux'/><category term='Digital Design'/><category term='C/C++'/><category term='Objective-C'/><category term='Processor'/><category term='Computer Architecture'/><category term='Parallel Programming'/><category term='Floating-point'/><category term='iPad'/><category term='Parallel Processor'/><category term='Xilinx ISE'/><category term='Android'/><category term='FPGA'/><category term='Octave'/><category term='Multiplication'/><category term='Books'/><title type='text'>rain of code</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-7403111974715272351</id><published>2011-08-09T23:20:00.002+08:00</published><updated>2011-08-17T23:38:18.345+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Digital Design'/><title type='text'>FPGA Clocking Resources (Xilinx Spartan-6)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-i02dO02YIkM/TkFPSiFuvxI/AAAAAAAAAGs/uJCiqSfRf6w/s1600/cmt1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-i02dO02YIkM/TkFPSiFuvxI/AAAAAAAAAGs/uJCiqSfRf6w/s640/cmt1.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-X7V4CXsDIrU/TkFPUMj1hbI/AAAAAAAAAGw/r6iRk4ePwTs/s1600/cmt2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-X7V4CXsDIrU/TkFPUMj1hbI/AAAAAAAAAGw/r6iRk4ePwTs/s640/cmt2.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pWB-fzaY8kM/TkFPYtLgV7I/AAAAAAAAAG0/L6lnxqm2gx8/s1600/cmt3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-pWB-fzaY8kM/TkFPYtLgV7I/AAAAAAAAAG0/L6lnxqm2gx8/s640/cmt3.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-bs1Yvs-jENI/TkFPbBnSb2I/AAAAAAAAAG4/ULYnoCpgmLU/s1600/cmt4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-bs1Yvs-jENI/TkFPbBnSb2I/AAAAAAAAAG4/ULYnoCpgmLU/s640/cmt4.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Reference:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xilinx.com/support/documentation/user_guides/ug382.pdf"&gt;Spartan-6 FPGA Clocking Resources User Guide&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Other Useful Resources:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; ‪&lt;a href="http://www.youtube.com/watch?v=u1dZH2wDiyQ"&gt;Spartan-6 Clocking Resources - (Ch 1)‬ Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=6biFS_l04tk"&gt;Spartan-6 Clocking Resources - (Ch 2) Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=tu0mm9Wl93s"&gt;Spartan-6 Clocking Resources - (Ch 3) Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=-kEedYviofc"&gt;Spartan-6 Clocking Resources - (Ch 4) Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=sC4s1ANgTYc"&gt;Spartan-6 Clocking Resources - (Ch 5) Video&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-7403111974715272351?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/7403111974715272351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2011/08/fpga-clocking-resources-xilinx-spartan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7403111974715272351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7403111974715272351'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2011/08/fpga-clocking-resources-xilinx-spartan.html' title='FPGA Clocking Resources (Xilinx Spartan-6)'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-i02dO02YIkM/TkFPSiFuvxI/AAAAAAAAAGs/uJCiqSfRf6w/s72-c/cmt1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-1662740906165293963</id><published>2011-08-07T02:49:00.003+08:00</published><updated>2011-08-07T02:55:24.920+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computer Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='Digital Design'/><title type='text'>Start Stealing - Memory Instruction</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1VhEhpUVFYk/Tj2MmLASnkI/AAAAAAAAAGo/-68UWl8eaZA/s1600/-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-1VhEhpUVFYk/Tj2MmLASnkI/AAAAAAAAAGo/-68UWl8eaZA/s640/-1.jpg" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-1662740906165293963?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/1662740906165293963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2011/08/start-stealing-memory-instruction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/1662740906165293963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/1662740906165293963'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2011/08/start-stealing-memory-instruction.html' title='Start Stealing - Memory Instruction'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1VhEhpUVFYk/Tj2MmLASnkI/AAAAAAAAAGo/-68UWl8eaZA/s72-c/-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-3801454193131054470</id><published>2011-07-02T01:31:00.000+08:00</published><updated>2011-08-07T02:55:45.358+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computer Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Digital Design'/><title type='text'>UART Controller: Baud Detector (to avoid glitch)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-h5iFCR5WCq8/Tg4EG-XORGI/AAAAAAAAAGk/Qx0vKUIRk9w/s1600/Baud+detector+-+to+avoid+glitch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-h5iFCR5WCq8/Tg4EG-XORGI/AAAAAAAAAGk/Qx0vKUIRk9w/s640/Baud+detector+-+to+avoid+glitch.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-3801454193131054470?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/3801454193131054470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2011/07/uart-controller-baud-detector-to-avoid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3801454193131054470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3801454193131054470'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2011/07/uart-controller-baud-detector-to-avoid.html' title='UART Controller: Baud Detector (to avoid glitch)'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-h5iFCR5WCq8/Tg4EG-XORGI/AAAAAAAAAGk/Qx0vKUIRk9w/s72-c/Baud+detector+-+to+avoid+glitch.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-1741839780784419305</id><published>2011-06-27T00:00:00.000+08:00</published><updated>2011-08-07T02:55:45.360+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computer Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Digital Design'/><title type='text'>UART Controller: Control Unit (Rx/Tx Buffer)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-wm2w1a_1K-M/TgdXRoRhxHI/AAAAAAAAAGg/4Ki89wDkSgE/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/-wm2w1a_1K-M/TgdXRoRhxHI/AAAAAAAAAGg/4Ki89wDkSgE/s640/1.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-1741839780784419305?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/1741839780784419305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2011/06/uart-controller-control-unit-rxtx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/1741839780784419305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/1741839780784419305'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2011/06/uart-controller-control-unit-rxtx.html' title='UART Controller: Control Unit (Rx/Tx Buffer)'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-wm2w1a_1K-M/TgdXRoRhxHI/AAAAAAAAAGg/4Ki89wDkSgE/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-6677241002311963687</id><published>2011-06-25T00:53:00.000+08:00</published><updated>2011-08-07T02:55:45.363+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computer Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Digital Design'/><title type='text'>UART Controller: Data Flow</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Uq_-tvOfpX0/TgTAgJD2oXI/AAAAAAAAAGc/9nU379iSpkM/s1600/UART+Ctrl+-+Data+Flow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-Uq_-tvOfpX0/TgTAgJD2oXI/AAAAAAAAAGc/9nU379iSpkM/s640/UART+Ctrl+-+Data+Flow.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-6677241002311963687?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/6677241002311963687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2011/06/uart-controller-data-flow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/6677241002311963687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/6677241002311963687'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2011/06/uart-controller-data-flow.html' title='UART Controller: Data Flow'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Uq_-tvOfpX0/TgTAgJD2oXI/AAAAAAAAAGc/9nU379iSpkM/s72-c/UART+Ctrl+-+Data+Flow.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-2262650372153159837</id><published>2011-01-04T01:55:00.109+08:00</published><updated>2011-08-07T02:56:12.045+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computer Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Multiplication'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx ISE'/><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='Floating-point'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Digital Design'/><title type='text'>Floating-point Multiplication Resources on FPGA</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;1. Introduction&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;As I'm thinking of using floating-point operations for my processor other than just integer operations, it's kind of a good idea if I start with feasibility study especially on the resources that are required since I have only a low cost FPGA board with quite limited slices. The one that I have is SP601 board with XC6SLX16 FPGA chip. Table 1.1 shows the resources it has.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/_oilpqLgDfOE/TSMa3_PDxHI/AAAAAAAAAGQ/BiSj3wE26V8/s1600/XC6SLX16+FPGA+Resources.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_oilpqLgDfOE/TSMa3_PDxHI/AAAAAAAAAGQ/BiSj3wE26V8/s1600/XC6SLX16+FPGA+Resources.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;Table 1.1:  &lt;/i&gt;&lt;i&gt;XC&lt;/i&gt;&lt;i&gt;6&lt;/i&gt;&lt;i&gt;SLX&lt;/i&gt;&lt;i&gt;16 &lt;/i&gt;&lt;i&gt;FPGA &lt;/i&gt;&lt;i&gt;Resources&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;style type="text/css"&gt;p { margin-bottom: 0.08in; }&lt;/style&gt;  &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;On the study, I just focus on floating-point multiplication for both single and double precisions using provided IP from Xilinx that is based on IEEE-754 standard. For each precision, I try to compare two types of family optimizations, no-usage which uses logic cells only and full-usage which uses combination of DSP slices and logic cells. Based on the precisions and family optimizations, I collect data for area utilization (slices, FFs and LUTs), selectable latencies, maximum frequency and power consumption. All data are based on software reports, none of them are from hardware measurements.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="font-family: inherit; margin-bottom: 0in; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;For the software, I use ISE WebPack 12.3 installed on Ubuntu 10.10 Linux for 64-bit processor. None of the ISE default settings I have changed for any kind of optimizations and I don't define any constraints other than clock frequency that is required to generate power report. The frequencies are chosen to be lower than maximum achievable frequency reported during synthesizing the design so they won't force ISE to do extra work that may lead to extra area used. I only change Map Property to generate detailed map report so I can get slice utilization by hierarchy.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0in; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;I generate four modules using LogiCore, two single precisions (SPs) and two double precisions (DPs) with no-usage (NU) and full-usage (FU) family optimizations combination so I have SP/NU, SP/FU, DP/NU and DP/FU modules with all handshaking, control and exception signals activated. I encapsulate each module using VHDL and change the signal names so they can be easily modified internally without affecting other components. Another benefit of component encapsulation is when generating area utilization and power consumption reports, I can easily get resources that are used by the component itself. Since I have encapsulated only floating-point multiplication module, all data presented in this study don't include I/O registers, I/O buffers, clock buffer and other logic cells supporting them. As shown in Figure 1.1, &lt;i&gt;dp_mul_ip_PM&lt;/i&gt; is the module generated by LogiCore and &lt;i&gt;dp_mul_1&lt;/i&gt; is the encapsulating component so all &lt;i&gt;fds&lt;/i&gt; as I/O registers and other modules like I/O and clock buffers (are not shown in the figure and located even outside I/O registers) will not be included to be the resources needed by the multiplication component. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="CENTER" style="font-family: inherit; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/TSIErnPrT5I/AAAAAAAAAFQ/uTbIUqylEpI/s1600/dp_rtl_schematic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_oilpqLgDfOE/TSIErnPrT5I/AAAAAAAAAFQ/uTbIUqylEpI/s400/dp_rtl_schematic.png" width="381" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 1.1: Double Precision Floating-point Multiplication RTL Schematic&lt;/i&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;All multiplication components have been simulated using Xilinx ISim provided by ISE WebPack. Figure 1.2 shows simulation waveform of multiplication between 1.5d (0x3FF8000000000000) and 0.3d (0x3FD3333333333333) resulting 0.45d (0x3FDCCCCCCCCCCCCC). The multiplication uses double precisions, full-usage family optimization and 27-latency. At the beginning, after doing synchronous reset (&lt;i&gt;sreset&lt;/i&gt; signal goes HIGH), &lt;i&gt;inready&lt;/i&gt; signal goes LOW for a moment indicates the component is not ready to receive inputs. It's also a good time to prepare both of the inputs (&lt;i&gt;a&lt;/i&gt; and &lt;i&gt;b&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; buses)&lt;/span&gt;&lt;span style="font-size: small;"&gt; to be calculated and when &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;inready&lt;/i&gt; signal goes HIGH, ask the component to start calculating by setting &lt;i&gt;run&lt;/i&gt; signal to HIGH. 27 clocks later, &lt;i&gt;result&lt;/i&gt; bus starts showing calculation result and the result is ready indicated by &lt;i&gt;outready&lt;/i&gt; signal turns HIGH.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;style type="text/css"&gt;p { margin-bottom: 0.08in; }&lt;/style&gt;  &lt;/div&gt;&lt;div align="CENTER" style="font-family: inherit; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIErK-NklI/AAAAAAAAAFM/-YI_mjqzFuc/s1600/dp_l27_testbench.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIErK-NklI/AAAAAAAAAFM/-YI_mjqzFuc/s400/dp_l27_testbench.png" width="400" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="CENTER" style="font-family: inherit; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 1.2: Double Precision Floating-point Multiplication Simulation Waveform&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;2. Precision and Family Optimization Selections&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;When generating multiplication modules using LogiCore, family optimization selections specify whether DSP slices should be used. Only no-usage selection will not use DSP slices at all, instead, it uses only logic cells like LUTs and FFs. The other selections like medium-usage, full-usage and max-usage selections use different number of DSP slices. For full-usage selection, my FPGA uses four DSP slices for single precision and 16 DSP slices for double precision. It means my FPGA supports up to eight single precision or two double precision components when using &lt;/span&gt;&lt;span style="font-size: small;"&gt;full-usage selection&lt;/span&gt;&lt;span style="font-size: small;"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="CENTER" style="font-family: inherit; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIGAr9yARI/AAAAAAAAAFU/jvMQ2n-m_cE/s1600/1+-+DSPs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIGAr9yARI/AAAAAAAAAFU/jvMQ2n-m_cE/s1600/1+-+DSPs.png" /&gt;&lt;/a&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="CENTER" style="font-family: inherit; margin-bottom: 0in;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 2.1: Number of DSP Slices Used by Different Precisions and Family Optimizations&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;style type="text/css"&gt;p { margin-bottom: 0.08in; }&lt;/style&gt;&lt;span style="font-size: small;"&gt;  &amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;Figure 2.2, 2.3 and 2.4 show double precision with no-DSP-usage uses most slices as much as one third of my entire FPGA slices since single precision with full-DSP-usage uses smallest amount of slices. Double precision with full-DSP-usage uses less slices compare to single precision with no-DSP-usage. Figure 2.3 shows that number of FFs can be pushed as low as possible regardless the precision used or family optimization selected.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGA2KHHSI/AAAAAAAAAFY/fdo5BbMz9Mg/s1600/2+-+Slices.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGA2KHHSI/AAAAAAAAAFY/fdo5BbMz9Mg/s1600/2+-+Slices.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 2.2: Number of Slices Used by Different Precisions and Family Optimizations &lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGBPq016I/AAAAAAAAAFc/KpoIduKlb_8/s1600/3+-+FFs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGBPq016I/AAAAAAAAAFc/KpoIduKlb_8/s1600/3+-+FFs.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;i&gt;Figure 2.3: Number of FFs Used by Different Precisions and Family Optimizations&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIGBnOaarI/AAAAAAAAAFg/dk9_iAI1GUA/s1600/4+-+LUTs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIGBnOaarI/AAAAAAAAAFg/dk9_iAI1GUA/s1600/4+-+LUTs.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 2.4: Number of LUTs Used by Different Precisions and Family Optimizations&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Figure 2.5 and 2.6 show double precision with full-DSP-usage has wider latency selections to reach comparable maximum frequency with the others that have about the same maximum latency. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGCbJZi9I/AAAAAAAAAFo/GJsfkE3-OWM/s1600/6+-+Latency.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGCbJZi9I/AAAAAAAAAFo/GJsfkE3-OWM/s1600/6+-+Latency.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 2.5: Number of Selectable Latency for Different Precisions and Family Optimizations&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGCHaGcmI/AAAAAAAAAFk/oEVMLy80wi8/s1600/5+-+Freq.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIGCHaGcmI/AAAAAAAAAFk/oEVMLy80wi8/s1600/5+-+Freq.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 2.6: Frequency of Different Precisions and Family Optimizations&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Figure 2.7 shows power consumption can be push down as low as possible for power critical design and no-DSP-usage can be power-hungry components.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIGCuT3arI/AAAAAAAAAFs/TP1MAryKIus/s1600/7+-+Power.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIGCuT3arI/AAAAAAAAAFs/TP1MAryKIus/s1600/7+-+Power.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 2.7: Power Consumption of Different Precisions and Family Optimizations&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Figure 2.2 to 2.7 show that full-DSP-usage for single or double precision uses much lesser slices while maintaining higher frequency (up to 50 MHz), higher latency selections and lower power consumption (up to 40 mW) compared to no-DSP-usage.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;3. Latency Selections&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Figure 3.1 to 3.4 show that one way to increase maximum frequency is by increasing latency but this will also increase number of FFs used for pipelining. One thing good to know is that multiplication module is able to use full pipeline without having to wait few steps from one calculation to the next like what square-root module does. The full pipeline simulation is shown in Figure 3.5.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;As Spartan-6 slice contains four LUTs and eight FFs, increasing number of FFs do not affect number of slices used by so much. Only when number of FFs increase up to two times number of LUTs, it will start affecting number of slices used noticeably. From Figure 3.1 to 3.4, only components with full-DPS-usage have the number of FFs reach up to 1.5 times of the number of LUTs so for all components the rest of FFs can be shared with other components. But if for some reasons, you want to group every multiplication component without sharing the slices with other components, choosing higher latency is a good idea to increase maximum frequency. Furthermore, for components with full-DSP-usage, increasing latency reduces number of slices. Special case for single precision with no-DSP-usage as shown in Figure 3.1, choosing latency higher than 4 may not beneficial anymore.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIIDEWAAYI/AAAAAAAAAFw/8RYavxW6wJU/s1600/1+-+SP_NU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIIDEWAAYI/AAAAAAAAAFw/8RYavxW6wJU/s1600/1+-+SP_NU.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 3.1: Latency to Area Utilization and Frequency for SP/NU&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIIDVpl3II/AAAAAAAAAF0/5bOc30r9-jo/s1600/2+-+SP_FU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIIDVpl3II/AAAAAAAAAF0/5bOc30r9-jo/s1600/2+-+SP_FU.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 3.2: Latency to Area Utilization and Frequency for SP/FU&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIIDtmpwSI/AAAAAAAAAF4/ytiqaf-QubE/s1600/3+-+DP-NU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIIDtmpwSI/AAAAAAAAAF4/ytiqaf-QubE/s1600/3+-+DP-NU.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 3.3: Latency to Area Utilization and Frequency for DP/NU&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/TSIIEZ_Df0I/AAAAAAAAAF8/K9Lp3sIZOR4/s1600/4+-+DP_FU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_oilpqLgDfOE/TSIIEZ_Df0I/AAAAAAAAAF8/K9Lp3sIZOR4/s1600/4+-+DP_FU.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 3.4: Latency to Area Utilization and Frequency for DP/FU&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIIE4doU3I/AAAAAAAAAGA/9KtarIdT02w/s1600/5+-+dp_fl_l9_tb_fullPipeline.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://4.bp.blogspot.com/_oilpqLgDfOE/TSIIE4doU3I/AAAAAAAAAGA/9KtarIdT02w/s400/5+-+dp_fl_l9_tb_fullPipeline.png" width="400" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 3.5: Full Pipeline Simulation of Multiplication Operation&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Latency selections effecting power are discussed together with frequency selections in section 4.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;4. Frequency Selections&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;As discussed in the introduction, frequencies are chosen to be lower than maximum frequency reported during synthesizing the design so they will not affect area utilization. As shown in Figure 4.1, some missing surfaces (mostly at the low latencies and high frequencies) are because the components can not meet such frequencies.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;For no-DSP-usage, higher frequency increases power consumption and higher latency reduces it. But for full-DSP-usage, both higher frequency and latency just slightly increase power consumption.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/TSIIzHhtckI/AAAAAAAAAGE/iiTKyBa8QWo/s1600/1+-+Logic+Power.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_oilpqLgDfOE/TSIIzHhtckI/AAAAAAAAAGE/iiTKyBa8QWo/s1600/1+-+Logic+Power.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 4.1: Latency and Frequency to Power Consumption&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Clock, IOs and quiescent power consumptions are also increased as frequency is getting higher, as for frequency ranging from 12.5 up to 200MHz, they are about 0.5 to 20mW, 7.5 to 120mW, and 14.96 to 16.37mW respectively.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;5. Future FPGAs&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Spartan-6 and Virtex-6 families are what currently in the market and Artix-7, Kintex-7 and Virtex-7 families are coming. Figure 5.1 and 5.2 show number of slices and DSP slices for each family. As I'm doing my processor only for hobby, I always look out for low cost FPGAs. It seems that even Artix-7 and Kintex-7 will have more slices and much more DSP slices compared to my Spartan-6. It's not really a good sign yet as they haven't put down the price.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIJPc6weSI/AAAAAAAAAGI/D7E5WzeUQXI/s1600/1+-+Slices.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_oilpqLgDfOE/TSIJPc6weSI/AAAAAAAAAGI/D7E5WzeUQXI/s1600/1+-+Slices.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 5.1: Number of Slices for Current and Future FPGA Families&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIJPohQzlI/AAAAAAAAAGM/k17LWl0Qf0A/s1600/2+-+DSPs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_oilpqLgDfOE/TSIJPohQzlI/AAAAAAAAAGM/k17LWl0Qf0A/s1600/2+-+DSPs.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Figure 5.2: Number of DSP Slices for Current and Future FPGA Families&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;6. Conclusion&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul style="font-family: inherit;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Flexibility to use or not to use DSP slices is provided when generating multiplication module using LogiCore.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Different floating-point operations have different maximum DSP slices that can be used.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Full-DSP-usage for single or double precision uses much lesser slices (up to four times) while maintaining higher frequency (up to 20%), higher latency selections and lower power consumption (up to five times) compared to no-DSP-usage.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Increasing latency will also increase frequency and FFs but not so much on the slices. Even when using maximum latency, 25% to 50% of the FFs are not used for all used slices.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;For design that groups every multiplication component without sharing the slices with other components, choosing higher latency is a good idea to achieve higher frequency.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;For no-DSP-usage, increasing latency reduces number of slices used and power consumption.&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;There is a case when choosing latency higher than certain value will not beneficial anymore in term of frequency increment.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Higher frequency is always resulting higher power consumption, just for full-DSP-usage, the increment is not significant.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Future FPGA families will have more slices and much more DSP slices.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;7. References&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: inherit;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.xilinx.com/support/documentation/ip_documentation/floating_point_ds335.pdf"&gt;Xilinx DS335 Floating-Point Operator v5.0, data sheet&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xilinx.com/publications/prod_mktg/Spartan6_Product_Table.pdf"&gt;&lt;span style="font-size: small;"&gt;Spartan-6 FPGAs Product Table&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt; &lt;a href="http://www.xilinx.com/publications/prod_mktg/Virtex6_Product_Table.pdf"&gt;Virtex-6 FPGAs Product Table&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xilinx.com/publications/prod_mktg/Artix7-Product-Table.pdf"&gt;&lt;span style="font-size: small;"&gt;Artix-7 FPGAs Product Table&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.xilinx.com/publications/prod_mktg/Kintex7-Product-Table.pdf"&gt;Kintex-7 FPGAs Product Table&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.xilinx.com/publications/prod_mktg/Virtex7-Product-Table.pdf"&gt;Virtex-7 FPGAs Product Table &lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;8. Useful Tools&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: inherit;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://babbage.cs.qc.edu/IEEE-754/"&gt;IEEE-754 Calculators&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-2262650372153159837?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/2262650372153159837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2011/01/floating-point-multiplication-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/2262650372153159837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/2262650372153159837'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2011/01/floating-point-multiplication-resources.html' title='Floating-point Multiplication Resources on FPGA'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oilpqLgDfOE/TSMa3_PDxHI/AAAAAAAAAGQ/BiSj3wE26V8/s72-c/XC6SLX16+FPGA+Resources.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-986134733435390270</id><published>2010-10-24T17:03:00.001+08:00</published><updated>2010-10-24T17:06:19.771+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx ISE'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>Configuring Target Device (iMPACT) on Ubuntu</title><content type='html'>Today is a lovely day! It marks for the first time I get my FPGA binary file successfully be programmed into my FPGA board using Linux. FYI, I'm using Xlinx ISE WebPack 12.3 and Ubuntu 10.10. I follow step-by-step tutorial from Stube posted on &lt;a href="http://ubuntuforums.org/showthread.php?t=1547435"&gt;Xilinx ISE WebPack 12.2 on Ubuntu 10.04 LTS&lt;/a&gt;. Thanks, Stube!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oilpqLgDfOE/TMPwB3DkdwI/AAAAAAAAAE8/n133hlNJnr0/s1600/iMPACT+on+Ubuntu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_oilpqLgDfOE/TMPwB3DkdwI/AAAAAAAAAE8/n133hlNJnr0/s320/iMPACT+on+Ubuntu.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Downloading FPGA Binary File&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/TMP1ne0g9KI/AAAAAAAAAFA/_OJ8sCrs_Qk/s1600/DSCI1859a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_oilpqLgDfOE/TMP1ne0g9KI/AAAAAAAAAFA/_OJ8sCrs_Qk/s320/DSCI1859a.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;My FPGA and Linux Machine&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-986134733435390270?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/986134733435390270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/10/configuring-traget-device-impact-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/986134733435390270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/986134733435390270'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/10/configuring-traget-device-impact-on.html' title='Configuring Target Device (iMPACT) on Ubuntu'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oilpqLgDfOE/TMPwB3DkdwI/AAAAAAAAAE8/n133hlNJnr0/s72-c/iMPACT+on+Ubuntu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-492534432112801506</id><published>2010-10-24T13:08:00.000+08:00</published><updated>2010-10-24T13:08:21.470+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx ISE'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>Changing Font Size And Font Family On Xilinx ISE Software</title><content type='html'>I'm using Xilinx ISE WebPack 12.3 and Ubuntu 10.10. In order to change the font size and font family, you need &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt; tool installed on your Ubuntu. &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt; is Qt Configuration tool as ISE software on Linux is developed using Qt. I'm using &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt; for Qt version 4 and it's working fine. Open Ubuntu Software Center, find &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt; and install it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oilpqLgDfOE/TMO7sWow2WI/AAAAAAAAAE0/gKDMGWD2SAA/s1600/Ubuntu+Software+Center.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://3.bp.blogspot.com/_oilpqLgDfOE/TMO7sWow2WI/AAAAAAAAAE0/gKDMGWD2SAA/s320/Ubuntu+Software+Center.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Ubuntu Software Center With &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt; Installed&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;After you get &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt; installed, open Terminal and execute &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;qtconfig&lt;/span&gt;. A new Qt Configuration window will pop up. You can go to Font tab and change the font size and font family as you wish. Remember, you need to close the window and choose save in order for your changes to take place.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/TMO9Iv-_hDI/AAAAAAAAAE4/UYPwp1F3S8o/s1600/ISE+Font+Size+Setting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_oilpqLgDfOE/TMO9Iv-_hDI/AAAAAAAAAE4/UYPwp1F3S8o/s320/ISE+Font+Size+Setting.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;qtconfig In Action&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-492534432112801506?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/492534432112801506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/10/changing-font-size-and-font-family-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/492534432112801506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/492534432112801506'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/10/changing-font-size-and-font-family-on.html' title='Changing Font Size And Font Family On Xilinx ISE Software'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oilpqLgDfOE/TMO7sWow2WI/AAAAAAAAAE0/gKDMGWD2SAA/s72-c/Ubuntu+Software+Center.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-3536116148129755497</id><published>2010-09-19T05:27:00.003+08:00</published><updated>2011-06-21T01:36:37.443+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel Processor'/><title type='text'>XMT-PRAM Summary</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/TJUtn9Yui_I/AAAAAAAAADE/gk1-nHT_Eag/s1600/PRAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://1.bp.blogspot.com/_oilpqLgDfOE/TJUtn9Yui_I/AAAAAAAAADE/gk1-nHT_Eag/s400/PRAM.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Reference:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.umiacs.umd.edu/users/vishkin/XMT/CompFrontiers08.pdf"&gt;FPGA-based prototype of a PRAM-on-chip processor&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.umiacs.umd.edu/%7Evishkin/XMT/index.shtml"&gt;Explicit Multi-Threading (XMT): A PRAM-On-Chip Vision&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-3536116148129755497?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/3536116148129755497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/09/xmt-pram-summary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3536116148129755497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3536116148129755497'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/09/xmt-pram-summary.html' title='XMT-PRAM Summary'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oilpqLgDfOE/TJUtn9Yui_I/AAAAAAAAADE/gk1-nHT_Eag/s72-c/PRAM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-974102973541412352</id><published>2010-05-20T23:55:00.004+08:00</published><updated>2011-06-21T01:37:32.298+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel Processor'/><title type='text'>Cell/BE PPU Summary</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_oilpqLgDfOE/S_Vb-VPgx_I/AAAAAAAAACs/zP8BInlSJzQ/s1600/DSCI0007.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5473382048550930418" src="http://1.bp.blogspot.com/_oilpqLgDfOE/S_Vb-VPgx_I/AAAAAAAAACs/zP8BInlSJzQ/s400/DSCI0007.JPG" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 300px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Cell/BE PPU Summary&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-974102973541412352?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/974102973541412352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/05/cellbe-ppu-summary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/974102973541412352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/974102973541412352'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/05/cellbe-ppu-summary.html' title='Cell/BE PPU Summary'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oilpqLgDfOE/S_Vb-VPgx_I/AAAAAAAAACs/zP8BInlSJzQ/s72-c/DSCI0007.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-5999339709234215963</id><published>2010-05-10T00:19:00.004+08:00</published><updated>2010-05-10T00:25:11.604+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='iPad'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>Calculator for iPad</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oilpqLgDfOE/S-bg2hWEfuI/AAAAAAAAACk/975iwlIloFk/s1600/Screen+shot+2010-05-09+at+PM+11.42.15.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_oilpqLgDfOE/S-bg2hWEfuI/AAAAAAAAACk/975iwlIloFk/s400/Screen+shot+2010-05-09+at+PM+11.42.15.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5469306024756543202" /&gt;&lt;/a&gt;&lt;br /&gt;Reference: &lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/drupal/"&gt;Stanford University - CS 193P iPhone Application Development&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-5999339709234215963?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/5999339709234215963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/05/calculator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/5999339709234215963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/5999339709234215963'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/05/calculator.html' title='Calculator for iPad'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oilpqLgDfOE/S-bg2hWEfuI/AAAAAAAAACk/975iwlIloFk/s72-c/Screen+shot+2010-05-09+at+PM+11.42.15.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-906162146062655574</id><published>2010-04-30T23:57:00.008+08:00</published><updated>2011-06-21T01:37:58.319+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>C/C++ vs Objective-C</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oilpqLgDfOE/S9xjkMOrI4I/AAAAAAAAACc/f1LZBiM1v_A/s1600/C+vs+Objective-C.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 323px;" src="http://2.bp.blogspot.com/_oilpqLgDfOE/S9xjkMOrI4I/AAAAAAAAACc/f1LZBiM1v_A/s400/C+vs+Objective-C.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5466353521130152834" /&gt;&lt;/a&gt;Reference : &lt;a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/"&gt;Learning Objective-C: A Primer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-906162146062655574?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/906162146062655574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/04/cc-vs-objective-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/906162146062655574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/906162146062655574'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/04/cc-vs-objective-c.html' title='C/C++ vs Objective-C'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oilpqLgDfOE/S9xjkMOrI4I/AAAAAAAAACc/f1LZBiM1v_A/s72-c/C+vs+Objective-C.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-262739365677010851</id><published>2010-04-19T22:28:00.003+08:00</published><updated>2010-04-19T22:38:19.144+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='iPad'/><title type='text'>Slider!</title><content type='html'>My first and very own iPad application. Slider!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oilpqLgDfOE/S8xp_bkdO2I/AAAAAAAAACE/tbQpcs_yWWY/s1600/Screen+shot+2010-04-19+at+PM+10.26.26.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_oilpqLgDfOE/S8xp_bkdO2I/AAAAAAAAACE/tbQpcs_yWWY/s320/Screen+shot+2010-04-19+at+PM+10.26.26.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5461856986546912098" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;iPhone/iPad Simulator&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-262739365677010851?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/262739365677010851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2010/04/slider.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/262739365677010851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/262739365677010851'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2010/04/slider.html' title='Slider!'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oilpqLgDfOE/S8xp_bkdO2I/AAAAAAAAACE/tbQpcs_yWWY/s72-c/Screen+shot+2010-04-19+at+PM+10.26.26.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-629729560227039290</id><published>2009-12-13T21:27:00.015+08:00</published><updated>2009-12-19T17:25:24.319+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Setting Up PostgreSQL for Django</title><content type='html'>In this tutorial, I'm using Python 2.6, Django 1.1.1 and PostgreSQL 8.3.8.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost mysite]$ python --version&lt;br /&gt;Python 2.6&lt;br /&gt;[eka@localhost mysite]$ django-admin --version&lt;br /&gt;1.1.1&lt;br /&gt;[eka@localhost mysite]$ psql --version&lt;br /&gt;psql (PostgreSQL) 8.3.8&lt;br /&gt;contains support for command-line editing&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After PostgreSQL installed on my Linux, I had gotten &lt;span style="font-style:italic;"&gt;postgres&lt;/span&gt; Linux user setted up for me. Using &lt;span style="font-style:italic;"&gt;postgres&lt;/span&gt; user account, I can do database initialization, user creation, and database creation.&lt;br /&gt;&lt;br /&gt;Following are few steps to get PostgreSQL ready for Django.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Creating Directory for PostgreSQL Data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I create my PostgreSQL at &lt;span style="font-style:italic;"&gt;/usr/local/pgsql/data&lt;/span&gt; directory owned by &lt;span style="font-style:italic;"&gt;postgres&lt;/span&gt; Linux user. To do so you have to login as Linux superuser (&lt;span style="font-style:italic;"&gt;root&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost Documents]$ su&lt;br /&gt;Password: &lt;br /&gt;[root@localhost Documents]# mkdir /usr/local/pgsql/data&lt;br /&gt;[root@localhost Documents]# chown postgres /usr/local/pgsql/data&lt;br /&gt;[root@localhost Documents]# exit&lt;br /&gt;exit&lt;br /&gt;[eka@localhost Documents]$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Initializing Database Cluster, Creating New User and Database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use &lt;span style="font-style:italic;"&gt;initdb&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;createuser&lt;/span&gt;, and &lt;span style="font-style:italic;"&gt;createdb&lt;/span&gt; Linux commands to respectively initialize database cluster, creating new user, and creating new database.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost Documents]$ su postgres&lt;br /&gt;Password: &lt;br /&gt;&lt;br /&gt;bash-4.0$ initdb -D /usr/local/pgsql/data&lt;br /&gt;could not change directory to "/home/eka/Documents"&lt;br /&gt;The files belonging to this database system will be owned by user "postgres".&lt;br /&gt;This user must also own the server process.&lt;br /&gt;&lt;br /&gt;The database cluster will be initialized with locale en_US.UTF-8.&lt;br /&gt;The default database encoding has accordingly been set to UTF8.&lt;br /&gt;The default text search configuration will be set to "english".&lt;br /&gt;&lt;br /&gt;fixing permissions on existing directory /usr/local/pgsql/data ... ok&lt;br /&gt;creating subdirectories ... ok&lt;br /&gt;selecting default max_connections ... 100&lt;br /&gt;selecting default shared_buffers/max_fsm_pages ... 24MB/153600&lt;br /&gt;creating configuration files ... ok&lt;br /&gt;creating template1 database in /usr/local/pgsql/data/base/1 ... ok&lt;br /&gt;initializing pg_authid ... ok&lt;br /&gt;initializing dependencies ... ok&lt;br /&gt;creating system views ... ok&lt;br /&gt;loading system objects' descriptions ... ok&lt;br /&gt;creating conversions ... ok&lt;br /&gt;creating dictionaries ... ok&lt;br /&gt;setting privileges on built-in objects ... ok&lt;br /&gt;creating information schema ... ok&lt;br /&gt;vacuuming database template1 ... ok&lt;br /&gt;copying template1 to template0 ... ok&lt;br /&gt;copying template1 to postgres ... ok&lt;br /&gt;&lt;br /&gt;WARNING: enabling "trust" authentication for local connections&lt;br /&gt;You can change this by editing pg_hba.conf or using the -A option the&lt;br /&gt;next time you run initdb.&lt;br /&gt;&lt;br /&gt;Success. You can now start the database server using:&lt;br /&gt;&lt;br /&gt;    postgres -D /usr/local/pgsql/data&lt;br /&gt;or&lt;br /&gt;    pg_ctl -D /usr/local/pgsql/data -l logfile start&lt;br /&gt;&lt;br /&gt;bash-4.0$ cd /usr/local/pgsql/data/&lt;br /&gt;&lt;br /&gt;bash-4.0$ createuser -P django_user&lt;br /&gt;Enter password for new role: &lt;br /&gt;Enter it again: &lt;br /&gt;Shall the new role be a superuser? (y/n) n&lt;br /&gt;Shall the new role be allowed to create databases? (y/n) y &lt;br /&gt;Shall the new role be allowed to create more new roles? (y/n) n&lt;br /&gt;&lt;br /&gt;bash-4.0$ createdb -O django_user django_db&lt;br /&gt;&lt;br /&gt;bash-4.0$ exit&lt;br /&gt;&lt;br /&gt;[eka@localhost Documents]$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting Up PostgreSQL Information for Django&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After you create Django project followed by Django application, you will have &lt;span style="font-style:italic;"&gt;settings.py&lt;/span&gt; file created for you. You need to put all PostgreSQL information in it. I'm using &lt;span style="font-style:italic;"&gt;psycopg&lt;/span&gt; version 2 as the interpreter between Django and PostgreSQL so I have to put in &lt;span style="font-style:italic;"&gt;postgresql_psycopg2&lt;/span&gt; instead of &lt;span style="font-style:italic;"&gt;postgresql&lt;/span&gt; for the database engine.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost mysite]$ pwd&lt;br /&gt;/home/eka/workspace/programming/django/test_django/mysite&lt;br /&gt;[eka@localhost mysite]$ ls -l&lt;br /&gt;total 24&lt;br /&gt;-rw-r--r--. 1 eka eka    0 2009-11-08 11:36 __init__.py&lt;br /&gt;-rw-r--r--. 1 eka eka  166 2009-11-08 18:55 __init__.pyc&lt;br /&gt;-rwxr-xr-x. 1 eka eka  546 2009-11-08 11:36 manage.py&lt;br /&gt;-rw-r--r--. 1 eka eka 2823 2009-12-13 16:17 settings.py&lt;br /&gt;-rw-r--r--. 1 eka eka 1771 2009-12-05 20:31 settings.pyc&lt;br /&gt;-rw-r--r--. 1 eka eka  542 2009-11-08 11:36 urls.py&lt;br /&gt;-rw-r--r--. 1 eka eka  266 2009-11-08 18:57 urls.pyc&lt;br /&gt;[eka@localhost mysite]$ vim settings.py&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;DATABASE_ENGINE = 'postgresql_psycopg2'       # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.&lt;br /&gt;DATABASE_NAME = 'django_db'                   # Or path to database file if using sqlite3.&lt;br /&gt;DATABASE_USER = 'django_user'                 # Not used with sqlite3.&lt;br /&gt;DATABASE_PASSWORD = 'django_user_pwd'         # Not used with sqlite3.&lt;br /&gt;DATABASE_HOST = 'localhost'                   # Set to empty string for localhost. Not used with sqlite3.&lt;br /&gt;DATABASE_PORT = ''                            # Set to empty string for default. Not used with sqlite3.&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Opening Access for Local PC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As the default, PostgreSQL will not allow local PC to access the database. To allow local PC to access database you have to edit &lt;span style="font-style:italic;"&gt;pg_hba.conf&lt;/span&gt; file inside PostgreSQL data directory and change all &lt;span style="font-style:italic;"&gt;METHOD&lt;/span&gt; column with &lt;span style="font-style:italic;"&gt;trust&lt;/span&gt; value for all &lt;span style="font-style:italic;"&gt;TYPE&lt;/span&gt; column with &lt;span style="font-style:italic;"&gt;local&lt;/span&gt; value. You have to login as Linux superuser (&lt;span style="font-style:italic;"&gt;root&lt;/span&gt;) to do this.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost Documents]$ su&lt;br /&gt;Password: &lt;br /&gt;[root@localhost Documents]# vim /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD&lt;br /&gt;&lt;br /&gt;# "local" is for Unix domain socket connections only&lt;br /&gt;local   all         all                               trust # ident sameuser&lt;br /&gt;# IPv4 local connections:&lt;br /&gt;host    all         all         127.0.0.1/32          trust # ident sameuser&lt;br /&gt;# IPv6 local connections:&lt;br /&gt;host    all         all         ::1/128               trust # ident sameuser&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Don't forget to restart PostgreSQL server if it's already running or start it if it hasn't.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[root@localhost mysite]# /etc/init.d/postgresql start&lt;br /&gt;Starting postgresql service:                               [  OK  ]&lt;br /&gt;[root@localhost mysite]# exit&lt;br /&gt;exit&lt;br /&gt;[eka@localhost mysite]$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Synchronizing Django Database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can now synchronizing Django data to PostgreSQL database using &lt;span style="font-style:italic;"&gt;manage.py&lt;/span&gt; file inside your Django application directory with &lt;span style="font-style:italic;"&gt;syncdb&lt;/span&gt; parameter.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost mysite]$ pwd&lt;br /&gt;/home/eka/workspace/programming/django/test_django/mysite&lt;br /&gt;[eka@localhost mysite]$ ls -l&lt;br /&gt;total 24&lt;br /&gt;-rw-r--r--. 1 eka eka    0 2009-11-08 11:36 __init__.py&lt;br /&gt;-rw-r--r--. 1 eka eka  166 2009-11-08 18:55 __init__.pyc&lt;br /&gt;-rwxr-xr-x. 1 eka eka  546 2009-11-08 11:36 manage.py&lt;br /&gt;-rw-r--r--. 1 eka eka 2835 2009-12-13 17:45 settings.py&lt;br /&gt;-rw-r--r--. 1 eka eka 1777 2009-12-13 17:45 settings.pyc&lt;br /&gt;-rw-r--r--. 1 eka eka  542 2009-11-08 11:36 urls.py&lt;br /&gt;-rw-r--r--. 1 eka eka  266 2009-11-08 18:57 urls.pyc&lt;br /&gt;[eka@localhost mysite]$ ./manage.py syncdb&lt;br /&gt;Creating table auth_permission&lt;br /&gt;Creating table auth_group&lt;br /&gt;Creating table auth_user&lt;br /&gt;Creating table auth_message&lt;br /&gt;Creating table django_content_type&lt;br /&gt;Creating table django_session&lt;br /&gt;Creating table django_site&lt;br /&gt;&lt;br /&gt;You just installed Django's auth system, which means you don't have any superusers defined.&lt;br /&gt;Would you like to create one now? (yes/no): yes&lt;br /&gt;Username (Leave blank to use 'eka'): &lt;br /&gt;E-mail address: ...&lt;br /&gt;Password: &lt;br /&gt;Password (again): &lt;br /&gt;Superuser created successfully.&lt;br /&gt;Installing index for auth.Permission model&lt;br /&gt;Installing index for auth.Message model&lt;br /&gt;[eka@localhost mysite]$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-629729560227039290?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/629729560227039290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/12/setting-up-postgresql-for-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/629729560227039290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/629729560227039290'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/12/setting-up-postgresql-for-django.html' title='Setting Up PostgreSQL for Django'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-8433492281637695346</id><published>2009-11-22T23:00:00.007+08:00</published><updated>2009-12-19T13:06:10.994+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Setting Up MySQL for Django</title><content type='html'>In this tutorial, I'm using Python 2.6, Django 1.1.1 and MySQL 14.14.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost mysite]$ python --version&lt;br /&gt;Python 2.6&lt;br /&gt;[eka@localhost mysite]$ django-admin --version&lt;br /&gt;1.1.1&lt;br /&gt;[eka@localhost mysite]$ mysql --version&lt;br /&gt;mysql  Ver 14.14 Distrib 5.1.37, for redhat-linux-gnu (x86_64) using readline 5.1&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;First of all, you need super user or root access to continue this tutorial. After login as super user, switch to MySQL console using &lt;code&gt;mysql&lt;/code&gt; command to create new user, create new database and grant the new user access to the new database.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost mysql]$ su&lt;br /&gt;Password: &lt;br /&gt;[root@localhost mysql]# mysql&lt;br /&gt;Welcome to the MySQL monitor.  Commands end with ; or \g.&lt;br /&gt;Your MySQL connection id is 55&lt;br /&gt;Server version: 5.1.37 Source distribution&lt;br /&gt;&lt;br /&gt;Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.&lt;br /&gt;&lt;br /&gt;mysql&gt; &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Creating New User&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use CREATE USER command to create new user and SET PASSWORD command to set new password to the new user.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;mysql&gt; SELECT Host,User,Password from mysql.user;&lt;br /&gt;+-----------------------+------+----------+&lt;br /&gt;| Host                  | User | Password |&lt;br /&gt;+-----------------------+------+----------+&lt;br /&gt;| localhost             | root |          | &lt;br /&gt;| localhost.localdomain | root |          | &lt;br /&gt;| 127.0.0.1             | root |          | &lt;br /&gt;| localhost             |      |          | &lt;br /&gt;| localhost.localdomain |      |          | &lt;br /&gt;+-----------------------+------+----------+&lt;br /&gt;5 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; CREATE USER 'eka'@'localhost';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; SET PASSWORD FOR 'eka'@'localhost' = password('eka');&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; SELECT Host,User,Password from mysql.user;&lt;br /&gt;+-----------------------+------+------------------+&lt;br /&gt;| Host                  | User | Password         |&lt;br /&gt;+-----------------------+------+------------------+&lt;br /&gt;| localhost             | root |                  | &lt;br /&gt;| localhost.localdomain | root |                  | &lt;br /&gt;| 127.0.0.1             | root |                  | &lt;br /&gt;| localhost             |      |                  | &lt;br /&gt;| localhost.localdomain |      |                  | &lt;br /&gt;| localhost             | eka  | 7bb7afcb215939e3 | &lt;br /&gt;+-----------------------+------+------------------+&lt;br /&gt;6 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Creating New Database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use CREATE DATABASE command to create new database.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;mysql&gt; SHOW DATABASES;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema | &lt;br /&gt;| mysql              | &lt;br /&gt;| test               | &lt;br /&gt;+--------------------+&lt;br /&gt;3 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; CREATE DATABASE mysite;&lt;br /&gt;Query OK, 1 row affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; SHOW DATABASES;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema | &lt;br /&gt;| mysite             | &lt;br /&gt;| mysql              | &lt;br /&gt;| test               | &lt;br /&gt;+--------------------+&lt;br /&gt;4 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; mysql&gt; SHOW DATABASES;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema | &lt;br /&gt;| mysql              | &lt;br /&gt;| test               | &lt;br /&gt;+--------------------+&lt;br /&gt;3 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; CREATE DATABASE mysite;&lt;br /&gt;Query OK, 1 row affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; SHOW DATABASES;&lt;br /&gt;+--------------------+&lt;br /&gt;| Database           |&lt;br /&gt;+--------------------+&lt;br /&gt;| information_schema | &lt;br /&gt;| mysite             | &lt;br /&gt;| mysql              | &lt;br /&gt;| test               | &lt;br /&gt;+--------------------+&lt;br /&gt;4 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Granting User To Access Databse&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Use GRANT command to grant user specific access to database. In following example, I'll give all accesses to the new user. You can limit user access as you like. The list of all accesses can be found at GRANT documentation.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;&lt;br /&gt;mysql&gt; SHOW GRANTS for 'eka'@'localhost';&lt;br /&gt;+-----------------------------------------------------------------------------------+&lt;br /&gt;| Grants for eka@localhost                                                          |&lt;br /&gt;+-----------------------------------------------------------------------------------+&lt;br /&gt;| GRANT USAGE ON *.* TO 'eka'@'localhost' IDENTIFIED BY PASSWORD '7bb7afcb215939e3' | &lt;br /&gt;+-----------------------------------------------------------------------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; GRANT ALL ON mysite.* TO 'eka'@'localhost';&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; SHOW GRANTS for 'eka'@'localhost';&lt;br /&gt;+-----------------------------------------------------------------------------------+&lt;br /&gt;| Grants for eka@localhost                                                          |&lt;br /&gt;+-----------------------------------------------------------------------------------+&lt;br /&gt;| GRANT USAGE ON *.* TO 'eka'@'localhost' IDENTIFIED BY PASSWORD '7bb7afcb215939e3' | &lt;br /&gt;| GRANT ALL PRIVILEGES ON `mysite`.* TO 'eka'@'localhost'                           | &lt;br /&gt;+-----------------------------------------------------------------------------------+&lt;br /&gt;2 rows in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Editing Django Settings File&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Until now, a new database is ready to use. You then can tell Django to use the new database by editing &lt;code&gt;settings.py&lt;/code&gt; file. The file is inside your new Django project directory. Off course you have to create new project first if you haven't. In following example, I have &lt;code&gt;mysite&lt;/code&gt; as my project name.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;mysql&gt; quit&lt;br /&gt;Bye&lt;br /&gt;[root@localhost mysite]# exit&lt;br /&gt;exit&lt;br /&gt;[eka@localhost mysite]$ ls -l&lt;br /&gt;total 24&lt;br /&gt;-rw-r--r--. 1 eka eka    0 2009-11-08 11:36 __init__.py&lt;br /&gt;-rwxr-xr-x. 1 eka eka  546 2009-11-08 11:36 manage.py&lt;br /&gt;-rw-r--r--. 1 eka eka 2799 2009-11-21 22:49 settings.py&lt;br /&gt;-rw-r--r--. 1 eka eka  542 2009-11-08 11:36 urls.py&lt;br /&gt;[eka@localhost mysite]$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Edit &lt;code&gt;settings.py&lt;/code&gt; file as follow.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;DATABASE_ENGINE = 'mysql'      # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.&lt;br /&gt;DATABASE_NAME = 'mysite1'      # Or path to database file if using sqlite3.&lt;br /&gt;DATABASE_USER = 'eka'          # Not used with sqlite3.&lt;br /&gt;DATABASE_PASSWORD = 'eka'      # Not used with sqlite3.&lt;br /&gt;DATABASE_HOST = 'localhost'    # Set to empty string for localhost. Not used with sqlite3.&lt;br /&gt;DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Synchronizing Database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Telling Django to do synchronization with the new database using &lt;code&gt;python manage.py syncdb&lt;/code&gt; command.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost mysite]$ python manage.py syncdb&lt;br /&gt;Creating table auth_permission&lt;br /&gt;Creating table auth_group&lt;br /&gt;Creating table auth_user&lt;br /&gt;Creating table auth_message&lt;br /&gt;Creating table django_content_type&lt;br /&gt;Creating table django_session&lt;br /&gt;Creating table django_site&lt;br /&gt;&lt;br /&gt;You just installed Django's auth system, which means you don't have any superusers defined.&lt;br /&gt;Would you like to create one now? (yes/no): yes&lt;br /&gt;Username (Leave blank to use 'eka'): eka&lt;br /&gt;E-mail address: eka.a.kurniawan@gmail.com&lt;br /&gt;Password: &lt;br /&gt;Password (again): &lt;br /&gt;Superuser created successfully.&lt;br /&gt;Installing index for auth.Permission model&lt;br /&gt;Installing index for auth.Message model&lt;br /&gt;[eka@localhost mysite]$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's all. Enjoy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-8433492281637695346?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/8433492281637695346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/11/setting-up-mysql-for-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/8433492281637695346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/8433492281637695346'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/11/setting-up-mysql-for-django.html' title='Setting Up MySQL for Django'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-5507395882809970604</id><published>2009-09-29T23:09:00.000+08:00</published><updated>2011-06-21T01:34:25.899+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>Xilinx Spartan-6 FPGA</title><content type='html'>My second FPGA board after Xilinx Spartan-2 in 2004.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oilpqLgDfOE/SsIjm4BR3cI/AAAAAAAAABU/A_rNLTWM53I/s1600-h/DSCI0030.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_oilpqLgDfOE/SsIjm4BR3cI/AAAAAAAAABU/A_rNLTWM53I/s320/DSCI0030.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5386907255068286402" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-5507395882809970604?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/5507395882809970604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/09/xilinx-spartan-6-fpga.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/5507395882809970604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/5507395882809970604'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/09/xilinx-spartan-6-fpga.html' title='Xilinx Spartan-6 FPGA'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oilpqLgDfOE/SsIjm4BR3cI/AAAAAAAAABU/A_rNLTWM53I/s72-c/DSCI0030.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-7169748907636112084</id><published>2009-09-29T23:07:00.000+08:00</published><updated>2011-06-21T01:38:24.726+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Books (0909292307)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oilpqLgDfOE/SsIjFIYUjiI/AAAAAAAAABM/g-T73ge4rfw/s1600-h/DSCI0090.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_oilpqLgDfOE/SsIjFIYUjiI/AAAAAAAAABM/g-T73ge4rfw/s320/DSCI0090.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5386906675344346658" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-7169748907636112084?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/7169748907636112084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/09/books-0909292307.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7169748907636112084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7169748907636112084'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/09/books-0909292307.html' title='Books (0909292307)'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oilpqLgDfOE/SsIjFIYUjiI/AAAAAAAAABM/g-T73ge4rfw/s72-c/DSCI0090.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-868398543788450264</id><published>2009-08-08T01:13:00.005+08:00</published><updated>2009-08-08T01:21:21.256+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='Quote'/><title type='text'>Sieve of Eratosthenes</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight:bold;"&gt;Sieve of Eratosthenes&lt;br /&gt;(κόσκινον Ἐρατοσθένους)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Sift the Twos and sift the Threes,&lt;br /&gt;The Sieve of Eratosthenes.&lt;br /&gt;When the multiples sublime,&lt;br /&gt;The numbers that remain are Prime.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes"&gt;Wikipedia - Sieve of Eratosthenes&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-868398543788450264?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/868398543788450264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/08/sieve-of-eratosthenes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/868398543788450264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/868398543788450264'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/08/sieve-of-eratosthenes.html' title='Sieve of Eratosthenes'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-274549482616151053</id><published>2009-07-30T23:58:00.004+08:00</published><updated>2009-07-31T00:09:31.048+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='Quote'/><title type='text'>Mathematics is Beautiful</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-style:italic;"&gt;""I thought, whatever &lt;span style="font-weight:bold;"&gt;mathematics&lt;/span&gt; is, it's must be &lt;span style="font-weight:bold;"&gt;beautiful&lt;/span&gt;.""&lt;/span&gt;&lt;br /&gt;&lt;a href="http://seedmagazine.com/slideshow/mathematicians/"&gt;&lt;br /&gt;SEED - Mathematics&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-274549482616151053?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/274549482616151053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/07/mathematics-is-beautiful.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/274549482616151053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/274549482616151053'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/07/mathematics-is-beautiful.html' title='Mathematics is Beautiful'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-7437126235064662063</id><published>2009-07-24T16:12:00.012+08:00</published><updated>2009-08-05T20:34:57.019+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Processor'/><title type='text'>Fixing "could not read symbols" on Cell Processor Binary Linking</title><content type='html'>I faced linking problem when I was trying to compile C code into Cell Processor binary file. Actually, I was following an example from a book titled Programming The Cell Processor by Matthew Scarpino.&lt;br /&gt;&lt;br /&gt;Following is the error that I faced.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost ppu_project]$ ppu-ld a.o -o a /usr/lib64/crt1.o /usr/lib64/crti.o /usr/lib/crtn.o --dynamic-linker /lib64/ld64.so.1 -lc&lt;br /&gt;ppu-ld: /usr/lib64/crt1.o: Relocations in generic ELF (EM: 62)&lt;br /&gt;/usr/lib64/crt1.o: could not read symbols: File in wrong format&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Error on Linking Process&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Most of the time, the error is caused by linking different processor type object files. I believe the example works fine if I do it on PS3 which the &lt;code&gt;crt1.o&lt;/code&gt;, &lt;code&gt;crti.o&lt;/code&gt; and &lt;code&gt;crtn.o&lt;/code&gt; are Cell Processor object files. Unfortunately, I haven't get my PS3 yet. I did it on my MacBook Pro (Intel Processor) using Fedora 11.&lt;br /&gt;&lt;br /&gt;For Fedora, Cell SDK provides the Cell Processor object files at:&lt;br /&gt; - &lt;code&gt;/opt/cell/sysroot/usr/lib64/&lt;/code&gt; directory for 64-bit version and&lt;br /&gt; - &lt;code&gt;/opt/cell/sysroot/usr/lib/&lt;/code&gt; directory for 32-bit version&lt;br /&gt;&lt;br /&gt;The linking problem was solved by using appropriate object files.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost ppu_project]$ ppu-ld a.o -o a /opt/cell/sysroot/usr/lib64/crt1.o  /opt/cell/sysroot/usr/lib64/crti.o /opt/cell/sysroot/usr/lib64/crtn.o --dynamic-linker /lib64/ld64.so.1 -lc&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Working Linking Process&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This how I found it. I did one shot compilation process by using following command and it worked.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost ppu_project]$ ppu-gcc a.c -Ihead_dir -o a.out&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;One Shot Compilation Process&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I then tried to spy on how the one shot compilation process done it; with adding &lt;code&gt;-v&lt;/code&gt; compilation option. Look at the words highlighted using blue color.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;[eka@localhost ppu_project]$ ppu-gcc a.c -v -Ihead_dir -o a.out&lt;br /&gt;Using built-in specs.&lt;br /&gt;Target: ppu&lt;br /&gt;Configured with: ../toolchain/gcc/configure --prefix=/opt/cell/toolchain --mandir=/opt/cell/toolchain/man --infodir=/opt/cell/toolchain/info --with-sysroot=/opt/cell/sysroot --with-as=/opt/cell/toolchain/bin/ppu-as --with-ld=/opt/cell/toolchain/bin/ppu-ld --enable-threads --with-system-zlib --disable-checking --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,fortran,ada --disable-nls --enable-clocale=gnu --enable-version-specific-runtime-libs --with-long-double-128 --program-prefix=ppu- --disable-bootstrap --build=i686-pc-linux-gnu --target=ppu&lt;br /&gt;Thread model: posix&lt;br /&gt;gcc version 4.1.1&lt;br /&gt; /opt/cell/toolchain/libexec/gcc/ppu/4.1.1/cc1 -quiet -v -Ihead_dir -D__unix__ -D__gnu_linux__ -D__linux__ -Dunix -D__unix -Dlinux -D__linux -Asystem=linux -Asystem=unix -Asystem=posix a.c -quiet -dumpbase a.c -auxbase a -version -o /tmp/cclPY7x1.s&lt;br /&gt;ignoring nonexistent directory "/opt/cell/sysroot/usr/local/include"&lt;br /&gt;ignoring nonexistent directory "/opt/cell/toolchain/lib/gcc/ppu/4.1.1/../../../../ppu/include"&lt;br /&gt;#include "..." search starts here:&lt;br /&gt;#include &lt;...&gt; search starts here:&lt;br /&gt; head_dir&lt;br /&gt; /opt/cell/toolchain/lib/gcc/ppu/4.1.1/include&lt;br /&gt; /opt/cell/sysroot/usr/include&lt;br /&gt;End of search list.&lt;br /&gt;GNU C version 4.1.1 (ppu)&lt;br /&gt; compiled by GNU C version 4.1.2 20071124 (Red Hat 4.1.2-42).&lt;br /&gt;GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072&lt;br /&gt;Compiler executable checksum: 1a909946e913637678412cf140132c95&lt;br /&gt; /opt/cell/toolchain/bin/ppu-as -a64 -mppc64 -many -V -Qy -o /tmp/ccoiPg2T.o /tmp/cclPY7x1.s&lt;br /&gt;GNU assembler version 2.18.50 (powerpc64-linux) using BFD version (GNU Binutils) 2.18.50.20080408&lt;br /&gt; /opt/cell/toolchain/libexec/gcc/ppu/4.1.1/collect2 --sysroot=/opt/cell/sysroot --eh-frame-hdr -V -Qy -m elf64ppc -dynamic-linker /lib64/ld64.so.1 -o a.out &lt;span style="color: rgb(0, 0, 255);"&gt;/opt/cell/sysroot/usr/lib/../lib64/crt1.o /opt/cell/sysroot/usr/lib/../lib64/crti.o&lt;/span&gt; /opt/cell/toolchain/lib/gcc/ppu/4.1.1/crtbegin.o -L/opt/cell/toolchain/lib/gcc/ppu/4.1.1 -L/opt/cell/sysroot/lib/../lib64 -L/opt/cell/sysroot/usr/lib/../lib64 /tmp/ccoiPg2T.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /opt/cell/toolchain/lib/gcc/ppu/4.1.1/crtsavres.o /opt/cell/toolchain/lib/gcc/ppu/4.1.1/crtend.o /opt/cell/sysroot/usr/lib/../lib64/crtn.o&lt;br /&gt;GNU ld (GNU Binutils) 2.18.50.20080408&lt;br /&gt;  Supported emulations:&lt;br /&gt;   elf64ppc&lt;br /&gt;   elf32ppclinux&lt;br /&gt;   elf32ppc&lt;br /&gt;   elf32ppcsim&lt;br /&gt;   elf32_spu&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;One Shot Compilation Process with -v Option&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Actually, I just found out that, for example, on PS3 (Cell Processor) Linux machine you do linking your code to &lt;code&gt;/usr/spu/lib/&lt;/code&gt;, on MacBook Pro (Intel Processor) Linux machine you have to add &lt;code&gt;/opt/cell/sysroot/&lt;/code&gt; at the beginning so it becomes &lt;code&gt;/opt/cell/sysroot/usr/spu/lib/&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-7437126235064662063?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/7437126235064662063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/07/fixing-could-not-read-symbols-on-cell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7437126235064662063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7437126235064662063'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/07/fixing-could-not-read-symbols-on-cell.html' title='Fixing &quot;could not read symbols&quot; on Cell Processor Binary Linking'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-3960713529167167642</id><published>2009-07-05T14:57:00.007+08:00</published><updated>2009-07-12T23:42:01.364+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Right Click on MacBook Pro Using Fedora 11</title><content type='html'>I'm using Fedora 11 for x86_64 processor type on my MacBook Pro. To do right click, I can simply put two fingers on track-pad and press click.&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://forums.fedoraforum.org/showthread.php?t=212903"&gt;Fedora Forum - 212903&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-3960713529167167642?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/3960713529167167642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/07/right-click-on-macbook-pro-using-fedora.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3960713529167167642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3960713529167167642'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/07/right-click-on-macbook-pro-using-fedora.html' title='Right Click on MacBook Pro Using Fedora 11'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-17917969098396883</id><published>2009-06-13T13:24:00.061+08:00</published><updated>2009-06-15T22:27:42.249+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Developing Android using C/C++ on Mac</title><content type='html'>Before started, I have some notes that you have to aware of.&lt;br /&gt;&lt;br /&gt;Firstly, in this tutorial I will just show you on how to compile and run C/C++ code on Android Emulator. On how to set up your Mac, install repository, and build the code; they have been explained in so amazingly detail at &lt;a href="http://source.android.com/download"&gt;Get Source&lt;/a&gt; web site from &lt;a href="http://source.android.com/"&gt;Android Open Source Project&lt;/a&gt;. Yet, there's still a little tiny problem to overcome but it's not really an issue.&lt;br /&gt;&lt;br /&gt;Secondly, until this time, Android still doesn't support C/C++ GUI API at it's current SDK version yet. To develop GUI using provided API, you can only use Java. Please visit &lt;a href="http://developer.android.com/index.html"&gt;Android Developers&lt;/a&gt; web site for more detail. But, you still have to download and set up the SDK because it contains Android Emulator to run compiled binary file.&lt;br /&gt;&lt;br /&gt;Thirdly, both Android Source Code and Android SDK are not meant for PowerPC processor. They are meant only for Intel/x86 processor.&lt;br /&gt;&lt;br /&gt;Let's start!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Setting Up Your Mac, Installing Repository, and Building the Code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Please visit &lt;a href="http://source.android.com/download"&gt;Get Source&lt;/a&gt; web site and follow the step-by-step guidance.&lt;br /&gt;&lt;br /&gt;The little tiny problem I have described before is that default Python from Mac has no module named &lt;span style="font-family: courier new;"&gt;readline&lt;/span&gt;. According to the guidance at "Troubleshooting" sub section, you have to install another Python version. What I did, I just removed the line that importing &lt;span style="font-family: courier new;"&gt;readline&lt;/span&gt;. So far, it works fine.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Setting Up Android Emulator&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Android Emulator can be found as part of Android SDK. You can get Android SDK from &lt;a href="http://developer.android.com/index.html"&gt;Android Developers&lt;/a&gt; web site. Download the Mac OS X (intel) version and follow the installation procedure. It won't be described here. I did it without any problem.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Preparing the Test Code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Get two following Test Code files &lt;span style="font-family:courier new;"&gt;helloandroid.cpp&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Android.mk&lt;/span&gt; and put them inside &lt;span style="font-family:courier new;"&gt;(android_dir)/external/helloandroid/&lt;/span&gt;. If the directory is not exist, just create it. &lt;span style="font-family:courier new;"&gt;(android_dir)&lt;/span&gt; is a directory contains Android Source Code. Mine is at &lt;span style="font-family:courier new;"&gt;/Volumes/android/androidMaster/&lt;/span&gt;. On my Mac it will be as follow:&lt;br&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:helloandroid ekakurniawan$ pwd&lt;br /&gt;/Volumes/android/androidMaster/external/helloandroid&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:helloandroid ekakurniawan$ ls&lt;br /&gt;Android.mk              helloandroid.cpp&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:helloandroid ekakurniawan$ &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Test Code Location&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Following is the source code of Test Code.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;#include &lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;int&lt;/span&gt; main(&lt;span style="color: rgb(0, 255, 0);"&gt;int&lt;/span&gt; argc, &lt;span style="color: rgb(0, 255, 0);"&gt;char&lt;/span&gt;** argv)&lt;br /&gt;{&lt;br /&gt;    printf(&lt;span style="color: rgb(255, 96, 96);"&gt;"hello android c++&lt;/span&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;    if&lt;/span&gt; (argc &amp;gt; &lt;span style="color: rgb(255, 96, 96);"&gt;1&lt;/span&gt;) {&lt;br /&gt;        printf(&lt;span style="color: rgb(255, 96, 96);"&gt;" - your first input is &lt;/span&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;%s&lt;/span&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;"&lt;/span&gt;, argv[&lt;span style="color: rgb(255, 96, 96);"&gt;1&lt;/span&gt;]);&lt;br /&gt;    }&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;    return&lt;/span&gt; &lt;span style="color: rgb(255, 96, 96);"&gt;0&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;helloandroid.cpp&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Following is the Test Code &lt;span style="font-family: courier new;"&gt;makefile&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;ifeq&lt;/span&gt; (&lt;span style="color: rgb(0, 255, 255);"&gt;$(TARGET_ARCH)&lt;/span&gt;, arm)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;LOCAL_PATH &lt;/span&gt;:= &lt;span style="color: rgb(0, 255, 255);"&gt;$(&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;call&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; my-dir)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;include&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;$(CLEAR_VARS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;LOCAL_SRC_FILES &lt;/span&gt;:= helloandroid.cpp&lt;span style="color: rgb(0, 255, 255);"&gt;&lt;br /&gt;LOCAL_MODULE &lt;/span&gt;:= helloandroid&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;LOCAL_STATIC_LIBRARIES &lt;/span&gt;:= libc&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;include&lt;/span&gt; &lt;span style="color: rgb(0, 255, 255);"&gt;$(BUILD_EXECUTABLE)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;endif&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Android.mk&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Building Test Code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Go to &lt;span style="font-family:courier new;"&gt;(android_dir)&lt;/span&gt; and execute &lt;span style="font-family:courier new;"&gt;make&lt;/span&gt; command. On my Mac, the log of compilation process is as follow:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:androidMaster ekakurniawan$ pwd&lt;br /&gt;/Volumes/android/androidMaster&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:androidMaster ekakurniawan$ ls&lt;br /&gt;Makefile        build           external        kernel          prebuilt&lt;br /&gt;bionic          dalvik          frameworks      out             system&lt;br /&gt;bootable        development     hardware        packages&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:androidMaster ekakurniawan$ make&lt;br /&gt;build/core/product_config.mk:261: WARNING: adding test OTA key&lt;br /&gt;============================================&lt;br /&gt;TARGET_PRODUCT=generic&lt;br /&gt;TARGET_BUILD_VARIANT=eng&lt;br /&gt;TARGET_SIMULATOR=&lt;br /&gt;TARGET_BUILD_TYPE=release&lt;br /&gt;TARGET_ARCH=arm&lt;br /&gt;HOST_ARCH=x86&lt;br /&gt;HOST_OS=darwin&lt;br /&gt;HOST_BUILD_TYPE=release&lt;br /&gt;BUILD_ID=&lt;br /&gt;============================================&lt;br /&gt;build/core/copy_headers.mk:15: warning: overriding commands for target `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'&lt;br /&gt;build/core/copy_headers.mk:15: warning: ignoring old commands for target `out/target/product/generic/obj/include/libpv/getactualaacconfig.h'&lt;br /&gt;target thumb C++: helloandroid &lt;= external/helloandroid/helloandroid.cpp&lt;br /&gt;target Executable: helloandroid (out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates/LINKED/helloandroid)&lt;br /&gt;target Non-prelinked: helloandroid (out/target/product/generic/symbols/system/bin/helloandroid)&lt;br /&gt;target Strip: helloandroid (out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates/helloandroid)&lt;br /&gt;Install: out/target/product/generic/system/app/Mms.apk&lt;br /&gt;Install: out/target/product/generic/system/bin/helloandroid&lt;br /&gt;Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp&lt;br /&gt;Combining NOTICE files: out/target/product/generic/obj/NOTICE.html&lt;br /&gt;gzip -c out/target/product/generic/obj/NOTICE.html &gt; out/target/product/generic/obj/NOTICE.html.gz&lt;br /&gt;Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img&lt;br /&gt;Install system fs image: out/target/product/generic/system.img&lt;br /&gt;Installed file list: out/target/product/generic/installed-files.txt&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:androidMaster ekakurniawan$ &lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Test Code Compilation Process&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The executable file will be located at &lt;span style="font-family:courier new;"&gt;(android_dir)/out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates/&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:helloandroid_intermediates ekakurniawan$ pwd&lt;br /&gt;/Volumes/android/androidMaster/out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:helloandroid_intermediates ekakurniawan$ ls&lt;br /&gt;LINKED          helloandroid    helloandroid.P  helloandroid.o&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:helloandroid_intermediates ekakurniawan$ &lt;/span&gt;&lt;/pre&gt; &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Executable File Location&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Running Test Code using Android Emulator&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;First of all, you have to run Android Emulator and wait until Emulation Phone poped-up on your screen. We will not use the Emulation Phone, we will just use Mac Terminal. Go to Android SDK Tools directory and execute Android Shell using &lt;span style="font-family:courier new;"&gt;adb shell&lt;/span&gt; command.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:tools ekakurniawan$ pwd&lt;br /&gt;/Developer/Applications/android-sdk-mac_x86-1.5_r1/tools&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:tools ekakurniawan$ ls&lt;br /&gt;Jet             android         draw9patch      lib             testhelloworld&lt;br /&gt;NOTICE.txt      apkbuilder      emulator        mksdcard        traceview&lt;br /&gt;adb             ddms            hierarchyviewer sdcard.img&lt;br /&gt;add-accounts.py dmtracedump     hprof-conv      sqlite3&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:tools ekakurniawan$ ./adb shell&lt;br /&gt;# &lt;/span&gt;&lt;/pre&gt;  &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Android Shell&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Please note that we have two consoles now, one is Mac Terminal and the other is Android Shell. Don't be confused.&lt;br /&gt;&lt;br /&gt;We will put executable Test Code inside &lt;span style="font-family:courier new;"&gt;data&lt;/span&gt; directory inside Android Shell and execute it form there. Take a look at following files/directories owner, &lt;span style="font-family: courier new;"&gt;data&lt;/span&gt; directory is owned by &lt;span style="font-family:courier new;"&gt;system&lt;/span&gt;. So far, I can't change the files/directories owned by &lt;span style="font-family:courier new;"&gt;root&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;# ls -l&lt;br /&gt;drwxrwxrwt root     root              2009-06-11 15:15 sqlite_stmt_journals&lt;br /&gt;drwxrwx--- system   cache             2009-05-14 15:57 cache&lt;br /&gt;d--------- system   system            2009-06-11 15:15 sdcard&lt;br /&gt;lrwxrwxrwx root     root              2009-06-11 15:15 etc -&gt; /system/etc&lt;br /&gt;drwxr-xr-x root     root              2009-04-22 04:18 system&lt;br /&gt;drwxr-xr-x root     root              1970-01-01 00:00 sys&lt;br /&gt;drwxr-x--- root     root              1970-01-01 00:00 sbin&lt;br /&gt;dr-xr-xr-x root     root              1970-01-01 00:00 proc&lt;br /&gt;-rwxr-x--- root     root         9075 1970-01-01 00:00 init.rc&lt;br /&gt;-rwxr-x--- root     root         1677 1970-01-01 00:00 init.goldfish.rc&lt;br /&gt;-rwxr-x--- root     root       106568 1970-01-01 00:00 init&lt;br /&gt;-rw-r--r-- root     root          118 1970-01-01 00:00 default.prop&lt;br /&gt;drwxrwx--x system   system            2009-05-14 15:57 data&lt;br /&gt;drwx------ root     root              1970-01-01 00:00 root&lt;br /&gt;drwxr-xr-x root     root              2009-06-11 15:15 dev&lt;br /&gt;&lt;br /&gt;# &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Files and Directories Owner&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Copy external file (executable Test Code) into Android Shell &lt;span style="font-family:courier new;"&gt;data&lt;/span&gt; directory using &lt;span style="font-family:courier new;"&gt;adb push&lt;/span&gt; command from Mac Terminal.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:tools ekakurniawan$ ./adb push /Volumes/android/androidMaster/out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates/helloandroid /data&lt;br /&gt;152 KB/s (5292 bytes in 0.033s)&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:tools ekakurniawan$ &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;    &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Copying File into Android Shell&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;If I copy external file into directory own by &lt;span style="font-family:courier new;"&gt;root&lt;/span&gt;, I will get "Read-only file system" error message as follow.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:tools ekakurniawan$ ./adb push /Volumes/android/androidMaster/out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates/helloandroid /system/etc&lt;br /&gt;failed to copy '/Volumes/android/androidMaster/out/target/product/generic/obj/EXECUTABLES/helloandroid_intermediates/helloandroid' to '/system/etc/helloandroid': Read-only file system&lt;br /&gt;&lt;br /&gt;Eka-Kurniawan:tools ekakurniawan$ &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;"Read-only file system" Error Message&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Finally, go back to Android Shell and execute the Test Code as follow.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;Eka-Kurniawan:tools ekakurniawan$ ./adb shell&lt;br /&gt;# cd /data&lt;br /&gt;&lt;br /&gt;# ls -l&lt;br /&gt;drwxrwx--t system   misc              2009-05-14 15:57 misc&lt;br /&gt;drwxrwx--x shell    shell             2009-05-14 15:57 local&lt;br /&gt;drwxrwx--x system   system            2009-05-14 15:57 data&lt;br /&gt;drwxrwx--x system   system            2009-05-14 15:57 app-private&lt;br /&gt;drwxrwx--x system   system            2009-05-14 15:57 app&lt;br /&gt;drwx------ root     root              2009-05-14 15:57 property&lt;br /&gt;drwxrwxrwx system   system            2009-05-14 15:58 anr&lt;br /&gt;drwxrwx--x system   system            2009-05-14 15:57 dalvik-cache&lt;br /&gt;drwxrwxr-x system   system            2009-05-14 15:58 system&lt;br /&gt;-rwxrwxrwx root     root         5292 2009-06-11 15:00 helloandroid&lt;br /&gt;drwxrwx--- root     root              2009-05-14 15:57 lost+found&lt;br /&gt;&lt;br /&gt;# ./helloandroid&lt;br /&gt;hello android c++&lt;br /&gt;&lt;br /&gt;# ./helloandroid 1234&lt;br /&gt;hello android c++&lt;br /&gt; - your first input is 1234&lt;br /&gt;&lt;br /&gt;# ./helloandroid asdf&lt;br /&gt;hello android c++&lt;br /&gt; - your first input is asdf&lt;br /&gt;&lt;br /&gt;# exit&lt;br /&gt;Eka-Kurniawan:tools ekakurniawan$ &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;     &lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Executing Process and the Output&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Following picture was captured after all of the processes.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oilpqLgDfOE/SjS3iKeMGMI/AAAAAAAAABE/ol2_1i68oyo/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_oilpqLgDfOE/SjS3iKeMGMI/AAAAAAAAABE/ol2_1i68oyo/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5347100455150033090" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Captured Screen after All of the Processes&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-17917969098396883?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/17917969098396883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2009/06/developing-android-using-cc-on-mac.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/17917969098396883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/17917969098396883'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2009/06/developing-android-using-cc-on-mac.html' title='Developing Android using C/C++ on Mac'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oilpqLgDfOE/SjS3iKeMGMI/AAAAAAAAABE/ol2_1i68oyo/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-8019025750788724956</id><published>2008-05-22T18:53:00.002+08:00</published><updated>2010-05-21T00:57:39.468+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>algorithm</title><content type='html'>some quotes from &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/CourseHome/index.htm"&gt;algorithm class at mit&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;you wanna be a good programmer?&lt;br /&gt;you just program every day for two years, you will be an excellent programmer.&lt;br /&gt;&lt;br /&gt;you wanna be a world class programmer?&lt;br /&gt;you can program every day for ten years or,&lt;br /&gt;you can program every day for two years and take an algorithm class.&lt;br /&gt;&lt;br /&gt;-- charles e. leiserson&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;we have both balance our mathematical understanding with our engineering common sense.&lt;br /&gt;&lt;br /&gt;-- charles e. leiserson&lt;/blockquote&gt;&lt;br /&gt;it's not a common &lt;span style="font-style: italic;"&gt;algorithm class&lt;/span&gt;, at least for me! i did not even learn about &lt;a href="http://en.wikibooks.org/wiki/Data_Structures/Asymptotic_Notation"&gt;&lt;span&gt;asymptotic notation&lt;/span&gt;&lt;/a&gt; when i was getting my &lt;span style="font-style: italic;"&gt;algorithm and programming&lt;/span&gt; class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-8019025750788724956?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/8019025750788724956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2008/05/algorithm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/8019025750788724956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/8019025750788724956'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2008/05/algorithm.html' title='algorithm'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-4592554886847907880</id><published>2008-04-26T14:31:00.002+08:00</published><updated>2011-06-21T01:39:51.528+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Octave'/><category scheme='http://www.blogger.com/atom/ns#' term='Mathematics'/><title type='text'>octave: speed optimization - fix matrix looping (080426)</title><content type='html'>with or without following commands on following &lt;a href="http://www.octave.org/"&gt;octave&lt;/a&gt; codes will effect obviously different execution time. from with/without preallocated memory, changing looping sequence, vectorizing, until using specific function will produced different execution time. i have eight cases to be compared, they are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 1&lt;/span&gt;: without preallocated memory&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m1(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 39.3089 seconds.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 2&lt;/span&gt;: preallocated memory with 'm = [];'&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m2 = [];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m2(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 38.7618 seconds.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 3&lt;/span&gt;: preallocated memory with 'm(N, P) = 1;'&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m3(N, P) = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m3(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 0.126078 second.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 4&lt;/span&gt;: preallocated memory with 'm = ones(N, P);'&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m4 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m4(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 0.082219 second.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 5&lt;/span&gt;: changing the looping sequence from 'for i = 1:N' to 'for i = N:-1:1'&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;thanks to &lt;span style="font-style: italic;"&gt;ben abbott&lt;/span&gt; for &lt;a href="http://www.cae.wisc.edu/pipermail/help-octave/2008-May/009137.html"&gt;his answer&lt;/a&gt; to my question related to this optimization. he also suggest me to compare with following code:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m5 = [];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = N:-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m5(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 0.130076 second.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;thanks to &lt;span style="font-style: italic;"&gt;przemek klosowski&lt;/span&gt; for following new cases (case 6 to 8) and idea to add the conclusion.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 6&lt;/span&gt;: nested or more looping with preallocated memory&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m6 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = N:-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = P:-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;        m6(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 15.0053 seconds.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 7&lt;/span&gt;: vectorizing using looping&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m7 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m7(:,&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;) = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;/pre&gt;elapsed time is 0.053149 second.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;case 8&lt;/span&gt;: vectorizing using 'repmat' function&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m8 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;repmat&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;((&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N)', &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;/pre&gt;elapsed time is 0.045707 second.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;conclusion&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;from case 1-4: one way to speed up looping execution is with preallocated memory.&lt;/li&gt;&lt;li&gt;from case 5: another way to speed up looping execution is with changing the looping sequence.&lt;/li&gt;&lt;li&gt;from case 6: looping is very time consuming. so,  avoid of using looping with other commands. this can be different from  case to case.&lt;/li&gt;&lt;li&gt;from case 7: another way to speed up looping execution is with vectorizing. vectorizing can be faster than preallocated memory or changing the looping sequence.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;from case 8: another way to speed up looping execution is using specific function. using specific function can be faster than vectorizing, preallocated memory, or changing the looping sequence.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;overall test code&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# Copyright (C) 2008 by lain.ux&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# l411v.ux@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# www.l411v.com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# This program is free software; you can redistribute it and/or modify &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# it under the terms of the GNU General Public License as published by &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# the Free Software Foundation; version 2 of the License.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# This program is distributed in the hope that it will be useful, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# You should have received a copy of the GNU General Public License &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# along with this program; if not, write to the &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# Free Software Foundation, Inc., &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------[ define matrix size ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;N = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;900&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;P = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1800&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"matrix size: m(%d,%d)\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# -------------------------------------------[ display result function ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; display_result(m, N, P)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"result:\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# checking first column (expected: 1, 1, 1, ..., 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[1,1] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[1,2] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[1,3] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[1,%d] = %d\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,P));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# checking second column (expected: 2, 2, 2, ..., 2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[2,1] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[2,2] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[2,3] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[2,%d] = %d\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P, m(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,P));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# checking Nth column (expected: 900, 900, 900, ..., 900)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[%d,1] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, N, m(N,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[%d,2] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, N, m(N,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[%d,3] = %d\t"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, N, m(N,&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"m[%d,%d] = %d\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, N, P, m(N,P));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# each column of matrix is the sequence 1, 2, ..., N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 1 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 1: without preallocated memory\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m1(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m1, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 2 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 2: preallocated memory with 'm = [];'\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m2 = [];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m2(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m2, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 3 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 3: preallocated memory with 'm(N, P) = 1;'\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m3(N, P) = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m3(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m3, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 4 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 4: preallocated memory with 'm = ones(N, P);'\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m4 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m4(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m4, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 5 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 5: changing the looping sequence "&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"from 'for i = 1:N' to 'for i = N:-1:1'\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m5 = [];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = N:-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m5(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; * &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m5, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 6 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 6: nested or more looping with preallocated memory\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m6 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = N:-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = P:-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;        m6(&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;) = &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m6, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 7 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 7: vectorizing using looping\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m7 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ones&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:P&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    m7(:,&lt;/span&gt;&lt;span style="color: rgb(178, 140, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;) = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endfor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m7, N, P);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(173, 173, 173);"&gt;# ------------------------------------------------------------[ case 8 ]--&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;printf&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"\ncase 8: vectorizing using 'repmat' function\n"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;tic&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;m8 = &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;repmat&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;((&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:N)', &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;toc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;display_result(m8, N, P);&lt;/span&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;execution result&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ octave-3.0.1 -q trick_080426.octave&lt;br /&gt;matrix size: m(900,1800)&lt;br /&gt;&lt;br /&gt;case 1: without preallocated memory&lt;br /&gt;Elapsed time is 39.3089 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 2: preallocated memory with 'm = [];'&lt;br /&gt;Elapsed time is 38.7618 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 3: preallocated memory with 'm(N, P) = 1;'&lt;br /&gt;Elapsed time is 0.126078 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 4: preallocated memory with 'm = ones(N, P);'&lt;br /&gt;Elapsed time is 0.082219 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 5: changing the looping sequence from 'for i = 1:N' to 'for i = N:-1:1'&lt;br /&gt;Elapsed time is 0.130076 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 6: nested or more looping with preallocated memory&lt;br /&gt;Elapsed time is 15.0053 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 7: vectorizing using looping&lt;br /&gt;Elapsed time is 0.053149 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;br /&gt;case 8: vectorizing using 'repmat' function&lt;br /&gt;Elapsed time is 0.045707 seconds.&lt;br /&gt;result:&lt;br /&gt;m[1,1] = 1      m[1,2] = 1      m[1,3] = 1      m[1,1800] = 1&lt;br /&gt;m[2,1] = 2      m[2,2] = 2      m[2,3] = 2      m[2,1800] = 2&lt;br /&gt;m[900,1] = 900  m[900,2] = 900  m[900,3] = 900  m[900,1800] = 900&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-4592554886847907880?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/4592554886847907880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2008/04/octave-speed-optimization-fix-matrix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/4592554886847907880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/4592554886847907880'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2008/04/octave-speed-optimization-fix-matrix.html' title='octave: speed optimization - fix matrix looping (080426)'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-3709513830686560454</id><published>2008-04-18T09:52:00.003+08:00</published><updated>2011-09-28T23:04:10.542+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel Programming'/><title type='text'>openmp c/c++ on intel and linux using sun compiler</title><content type='html'>i have written another &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; topic titled &lt;a href="http://rainofcode.blogspot.com/2008/04/openmp-cc-on-intel-and-linux-using.html"&gt;openmp c/c++ on intel and linux using intel compiler&lt;/a&gt;. this blog is about how to do it again using &lt;span style="font-style: italic;"&gt;sun&lt;/span&gt; compiler. following is the steps:&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;setting &lt;span style="font-style: italic;"&gt;sunstudio&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;sunstudio&lt;/span&gt; is a development packet from &lt;span style="font-style: italic;"&gt;sun microsystems&lt;/span&gt;. it contains &lt;span style="font-style: italic;"&gt;netbeans ide&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;sun c compiler&lt;/span&gt;. we will need both of them to create the project and compile the code.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;getting source code&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;i use a same source code as i use it on &lt;span style="font-style: italic;"&gt;intel&lt;/span&gt; compiler. please find the source code from another blog titled &lt;a href="http://rainofcode.blogspot.com/2008/04/openmp-cc-on-intel-and-linux-using.html"&gt;openmp c/c++ on intel and linux using intel compiler&lt;/a&gt; on &lt;span style="font-style: italic;"&gt;sample code&lt;/span&gt; bulleted list.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;compiling source code&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;after setting up the project and loading the source code in, follow following steps to activate &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature during compilation process.&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;open &lt;span style="font-style: italic;"&gt;project properties&lt;/span&gt; window: on &lt;span style="font-style: italic;"&gt;project&lt;/span&gt; window, right click on project name, and select &lt;span style="font-style: italic;"&gt;properties&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;activate &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature: on &lt;span style="font-style: italic;"&gt;categories&lt;/span&gt; tree box, select &lt;span style="font-style: italic;"&gt;configuration properties&lt;/span&gt; -&lt;span style="font-style: italic;"&gt; c/c++/fortran&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;c compiler&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;general&lt;/span&gt;. on &lt;span style="font-style: italic;"&gt;properties&lt;/span&gt; table box, change &lt;span style="font-style: italic;"&gt;multithreading level&lt;/span&gt; form &lt;span style="font-style: italic;"&gt;none&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt;. click on &lt;span style="font-style: italic;"&gt;ok&lt;/span&gt; button.&lt;/li&gt;&lt;li&gt;build the project: on menu bar, click on &lt;span style="font-style: italic;"&gt;build&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;build main project&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e7_RlKSyGls/SAgtdijIc6I/AAAAAAAAAKI/cHaXsU_5xn4/s1600-h/sun+-+openmp+setting.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5190448556058112930" src="http://1.bp.blogspot.com/_e7_RlKSyGls/SAgtdijIc6I/AAAAAAAAAKI/cHaXsU_5xn4/s320/sun+-+openmp+setting.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;activate openmp compilation feature&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;executing the binary file&lt;/li&gt;&lt;/ul&gt;you need to set maximum stack size with following command. i still don't know how to run the following command on the &lt;span style="font-style: italic;"&gt;sunstudio ide&lt;/span&gt; before i execute the binary file. so i execute the binary file on console.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; overflow: auto; padding: 0.5em;"&gt;$ ulimit -s unlimited&lt;/pre&gt;&lt;br /&gt;you need also to set number of thread to use. i use &lt;span style="font-style: italic;"&gt;intel core 2 duo&lt;/span&gt; processor. it's dual processor so i set it with 2.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; overflow: auto; padding: 0.5em;"&gt;$ export OMP_NUM_THREADS=2&lt;br /&gt;$ export OMP_DYNAMIC=FALSE&lt;/pre&gt;&lt;br /&gt;i name the binary file with &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature, with &lt;span style="font-family: 'courier new';"&gt;sun_openmp&lt;/span&gt;. following is the execution result.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; overflow: auto; padding: 0.5em;"&gt;$ ./sun_openmp&lt;br /&gt;Using time() for wall clock time&lt;br /&gt;Problem size: c(600,2400) = a(600,1200) * b(1200,2400)&lt;br /&gt;Calculating product 5 time(s)&lt;br /&gt;&lt;br /&gt;We are using 2 thread(s)&lt;br /&gt;&lt;br /&gt;Finished calculations.&lt;br /&gt;Matmul kernel wall clock time = 6.00 sec&lt;br /&gt;Wall clock time/thread = 3.00 sec&lt;br /&gt;MFlops = 2880.000000&lt;/pre&gt;&lt;br /&gt;i name the binary file without &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature, with &lt;span style="font-family: 'courier new';"&gt;sun_not_openmp&lt;/span&gt;. following is the execution result.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; overflow: auto; padding: 0.5em;"&gt;$ ./sun_not_openmp&lt;br /&gt;Using time() for wall clock time&lt;br /&gt;Problem size: c(600,2400) = a(600,1200) * b(1200,2400)&lt;br /&gt;Calculating product 5 time(s)&lt;br /&gt;&lt;br /&gt;We are using 1 thread(s)&lt;br /&gt;&lt;br /&gt;Finished calculations.&lt;br /&gt;Matmul kernel wall clock time = 17.00 sec&lt;br /&gt;Wall clock time/thread = 17.00 sec&lt;br /&gt;MFlops = 1016.470588&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;system monitor&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;following captured &lt;span style="font-style: italic;"&gt;kde system guard (performance monitor)&lt;/span&gt; shows &lt;span style="font-style: italic;"&gt;cpu load&lt;/span&gt; of &lt;span style="font-style: italic;"&gt;cpu0&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;cpu1&lt;/span&gt;. both numbers on purple color describe:&lt;br /&gt;(1) single processor working: only &lt;span style="font-style: italic;"&gt;cpu0&lt;/span&gt; is active 100%, the process is finished slower&lt;br /&gt;(2) dual processors working: both &lt;span style="font-style: italic;"&gt;cpu0&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;cpu1&lt;/span&gt; are active 100%, the process is finished faster&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_e7_RlKSyGls/SAgvhijIc7I/AAAAAAAAAKQ/gSCDIVqoOp8/s1600-h/sun+-+system+load+-+edited.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5190450823800845234" src="http://1.bp.blogspot.com/_e7_RlKSyGls/SAgvhijIc7I/AAAAAAAAAKQ/gSCDIVqoOp8/s320/sun+-+system+load+-+edited.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;openmp api user's guide&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;for more deep understanding, please reefer to &lt;a href="http://docs.sun.com/app/docs/doc/819-5270/aewbx?a=browse"&gt;sun studio 12: openmp api user's guide&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-3709513830686560454?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/3709513830686560454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2008/04/openmp-cc-on-intel-and-linux-using-sun.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3709513830686560454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/3709513830686560454'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2008/04/openmp-cc-on-intel-and-linux-using-sun.html' title='openmp c/c++ on intel and linux using sun compiler'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e7_RlKSyGls/SAgtdijIc6I/AAAAAAAAAKI/cHaXsU_5xn4/s72-c/sun+-+openmp+setting.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-7333188737625206111</id><published>2008-04-02T23:59:00.004+08:00</published><updated>2011-06-21T01:39:51.530+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Study'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel Programming'/><title type='text'>openmp c/c++ on intel and linux using intel compiler</title><content type='html'>i'm using &lt;a href="http://www.intel.com/products/processor/core2duo/index.htm"&gt;intel core 2 duo&lt;/a&gt; processor and &lt;a href="http://www.debian.org/"&gt;debian gnu/linux&lt;/a&gt; 4.0. i'm now, in the step of learning &lt;a href="http://www.openmp.org/"&gt;openmp&lt;/a&gt; and i want to know how fast dual processors can run compared to single processor.&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;hardware and software specification&lt;/li&gt;&lt;/ul&gt;following processor information is taken from &lt;span style="font-family:courier new;"&gt;/proc/cpuinfo&lt;/span&gt; file.&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;vendor_id       : GenuineIntel&lt;br /&gt;cpu family      : 6&lt;br /&gt;model           : 15&lt;br /&gt;model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz&lt;br /&gt;stepping        : 6&lt;br /&gt;cpu MHz         : 2400.778&lt;br /&gt;cache size      : 4096 KB&lt;br /&gt;physical id     : 0&lt;br /&gt;siblings        : 2&lt;br /&gt;cpu cores       : 2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;i'm using &lt;a href="http://www.debian.org/"&gt;debian gnu/linux&lt;/a&gt; 4.0.&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ uname -a&lt;br /&gt;Linux l411v 2.6.18-6-686 #1 SMP Sun Feb 10 22:11:31 UTC 2008 i686 GNU/Linux&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;i get and install &lt;a href="http://www.intel.com/cd/software/products/asmo-na/eng/compilers/index.htm"&gt;intel c++ compiler professional edition&lt;/a&gt; for &lt;span style="font-style: italic;"&gt;linux&lt;/span&gt; for non-commercial use.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ icc --version&lt;br /&gt;icc (ICC) 10.1 20080112&lt;br /&gt;Copyright (C) 1985-2007 Intel Corporation.  All rights reserved.&lt;br /&gt;&lt;/pre&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;setting environment&lt;/li&gt;&lt;/ul&gt;set executable path to intel c++ compiler binary directory.&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ export PATH=$PATH:/usr/share/intel/cc/10.1.012/bin/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;set library path to intel c++ dynamic library directory.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ export LD_LIBRARY_PATH=/usr/share/intel/cc/10.1.012/lib&lt;br /&gt;$ echo $LD_LIBRARY_PATH&lt;br /&gt;/usr/share/intel/cc/10.1.012/lib&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;fixing bug&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;i get &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; sample code (&lt;span style="font-family:courier new;"&gt;openmp_sample.c&lt;/span&gt;) after installing &lt;span style="font-style: italic;"&gt;intel&lt;/span&gt; c++ compiler from sample directory. please find the sample code below. to activate &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature, add additional &lt;span style="font-family:courier new;"&gt;-openmp&lt;/span&gt; compiling parameter. i found some errors when compiling the sample code without &lt;span style="font-family:courier new;"&gt;-openmp&lt;/span&gt; compiling parameter. the errors as follow:&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ icc -std=c99 openmp_sample.c&lt;br /&gt;openmp_sample.c(106): warning #161: unrecognized #pragma&lt;br /&gt;     #pragma omp parallel private(i,j,k)&lt;br /&gt;             ^&lt;br /&gt;&lt;br /&gt;openmp_sample.c(109): warning #161: unrecognized #pragma&lt;br /&gt;      #pragma omp single nowait&lt;br /&gt;              ^&lt;br /&gt;&lt;br /&gt;openmp_sample.c(119): warning #161: unrecognized #pragma&lt;br /&gt;      #pragma omp for nowait&lt;br /&gt;              ^&lt;br /&gt;&lt;br /&gt;openmp_sample.c(126): warning #161: unrecognized #pragma&lt;br /&gt;      #pragma omp for nowait&lt;br /&gt;              ^&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;what i need to do just adding preprocessor to block all &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; features on the sample code. so change from:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;  #pragma omp parallel private(i,j,k)&lt;br /&gt;&lt;/pre&gt;to:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;#ifdef _OPENMP&lt;br /&gt;  #pragma omp parallel private(i,j,k)&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;compile and run&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:courier new;"&gt;ulimit&lt;/span&gt; command controls the user resources available to a process started by the shell. you need set the stack size to an appropriate size; otherwise, the application will generate a segmentation fault. following command sets the maximum stack size to unlimited.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ ulimit -s unlimited&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;compile with &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature and static linking mode:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ icc -std=c99 -openmp -static openmp_sample.c&lt;br /&gt;openmp_sample.c(119): (col. 5) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.&lt;br /&gt;openmp_sample.c(126): (col. 5) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.&lt;br /&gt;openmp_sample.c(106): (col. 3) remark: OpenMP DEFINED REGION WAS PARALLELIZED.&lt;br /&gt;&lt;br /&gt;$ ls -l&lt;br /&gt;total 1092&lt;br /&gt;-rwxr-xr-x 1 lain lain 1105135 2008-04-02 11:48 a.out&lt;br /&gt;-rw-r--r-- 1 lain lain    4702 2008-04-02 11:06 openmp_sample.c&lt;br /&gt;&lt;br /&gt;$ ./a.out&lt;br /&gt;&lt;br /&gt;Using time() for wall clock time&lt;br /&gt;Problem size: c(600,2400) = a(600,1200) * b(1200,2400)&lt;br /&gt;Calculating product 5 time(s)&lt;br /&gt;&lt;br /&gt;We are using 2 thread(s)&lt;br /&gt;&lt;br /&gt;Finished calculations.&lt;br /&gt;Matmul kernel wall clock time = 6.00 sec&lt;br /&gt;Wall clock time/thread = 3.00 sec&lt;br /&gt;MFlops = 2880.000000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;compile with &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature and dynamic linking mode:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ icc -std=c99 -openmp openmp_sample.c&lt;br /&gt;openmp_sample.c(124): (col. 5) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.&lt;br /&gt;openmp_sample.c(133): (col. 5) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.&lt;br /&gt;openmp_sample.c(107): (col. 3) remark: OpenMP DEFINED REGION WAS PARALLELIZED.&lt;br /&gt;&lt;br /&gt;$ ls -l&lt;br /&gt;total 44&lt;br /&gt;-rwxr-xr-x 1 lain lain 34087 2008-04-02 12:01 a.out&lt;br /&gt;-rw-r--r-- 1 lain lain  4702 2008-04-02 11:06 openmp_sample.c&lt;br /&gt;&lt;br /&gt;$ ./a.out&lt;br /&gt;Using time() for wall clock time&lt;br /&gt;Problem size: c(600,2400) = a(600,1200) * b(1200,2400)&lt;br /&gt;Calculating product 5 time(s)&lt;br /&gt;&lt;br /&gt;We are using 2 thread(s)&lt;br /&gt;&lt;br /&gt;Finished calculations.&lt;br /&gt;Matmul kernel wall clock time = 6.00 sec&lt;br /&gt;Wall clock time/thread = 3.00 sec&lt;br /&gt;MFlops = 2880.000000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;compile without &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature and static linking mode:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ icc -std=c99 -static openmp_sample.c&lt;br /&gt;&lt;br /&gt;$ ls -l&lt;br /&gt;total 512&lt;br /&gt;-rwxr-xr-x 1 lain lain 509458 2008-04-02 11:49 a.out&lt;br /&gt;-rw-r--r-- 1 lain lain   4702 2008-04-02 11:06 openmp_sample.c&lt;br /&gt;&lt;br /&gt;$ ./a.out&lt;br /&gt;Using time() for wall clock time&lt;br /&gt;Problem size: c(600,2400) = a(600,1200) * b(1200,2400)&lt;br /&gt;Calculating product 5 time(s)&lt;br /&gt;&lt;br /&gt;We are using 1 thread(s)&lt;br /&gt;&lt;br /&gt;Finished calculations.&lt;br /&gt;Matmul kernel wall clock time = 17.00 sec&lt;br /&gt;Wall clock time/thread = 17.00 sec&lt;br /&gt;MFlops = 1016.470588&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;compile without &lt;span style="font-style: italic;"&gt;openmp&lt;/span&gt; feature and dynamic linking mode:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;$ icc -std=c99 openmp_sample.c&lt;br /&gt;&lt;br /&gt;$ ls -l&lt;br /&gt;total 32&lt;br /&gt;-rwxr-xr-x 1 lain lain 23570 2008-04-02 12:03 a.out&lt;br /&gt;-rw-r--r-- 1 lain lain  4702 2008-04-02 11:06 openmp_sample.c&lt;br /&gt;&lt;br /&gt;$ ./a.out&lt;br /&gt;Using time() for wall clock time&lt;br /&gt;Problem size: c(600,2400) = a(600,1200) * b(1200,2400)&lt;br /&gt;Calculating product 5 time(s)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We are using 1 thread(s)&lt;br /&gt;&lt;br /&gt;Finished calculations.&lt;br /&gt;Matmul kernel wall clock time = 17.00 sec&lt;br /&gt;Wall clock time/thread = 17.00 sec&lt;br /&gt;MFlops = 1016.470588&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;conclusion&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;| openmp  | number of | linking | file size |  time to  |    mega      |&lt;br /&gt;| feature |  thread   |  mode   |  (byte)   |  finish   |    flops     |&lt;br /&gt;|         |           |         |           | (seconds) |              |&lt;br /&gt;+---------+-----------+---------+-----------+-----------+--------------+&lt;br /&gt;|   yes   |     2     | static  | 1,105,135 |     6     | 2,880.000000 |&lt;br /&gt;|   yes   |     2     | dynamic |    34,087 |     6     | 2,880.000000 |&lt;br /&gt;|   no    |     1     | static  |   509,458 |    17     | 1,016.470588 |&lt;br /&gt;|   no    |     1     | dynamic |    23,570 |    17     | 1,016.470588 |&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;system monitor&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;following captured &lt;span style="font-style: italic;"&gt;kde system guard (performance monitor)&lt;/span&gt; shows &lt;span style="font-style: italic;"&gt;cpu load&lt;/span&gt; of &lt;span style="font-style: italic;"&gt;cpu0&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;cpu1&lt;/span&gt;. both numbers on purple color describe:&lt;br /&gt;(1) single processor working: only &lt;span style="font-style: italic;"&gt;cpu0&lt;/span&gt; is active 100%, the process is finished slower&lt;br /&gt;(2) dual processors working: both &lt;span style="font-style: italic;"&gt;cpu0&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;cpu1&lt;/span&gt; are active 100%, the process is finished faster&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e7_RlKSyGls/R_3b3DZxzUI/AAAAAAAAAJA/U5IEIUhKEwE/s1600-h/openmp+-+system+load+%28kde%29+-+edited+small.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_e7_RlKSyGls/R_3b3DZxzUI/AAAAAAAAAJA/U5IEIUhKEwE/s320/openmp+-+system+load+%28kde%29+-+edited+small.png" alt="" id="BLOGGER_PHOTO_ID_5187544084653395266" border="0" /&gt;&lt;/a&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;sample code&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:courier new;"&gt;openmp_sample.c&lt;/span&gt; file:&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 0.5em; overflow: auto;"&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Copyright (C) 2006-2007 Intel Corporation. All Rights Reserved.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * The source code contained or described herein and all&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * documents related to the source code ("Material") are owned by&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Intel Corporation or its suppliers or licensors. Title to the&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Material remains with Intel Corporation or its suppliers and&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * licensors. The Material is protected by worldwide copyright&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * laws and treaty provisions.  No part of the Material may be&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * used, copied, reproduced, modified, published, uploaded,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * posted, transmitted, distributed,  or disclosed in any way&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * except as expressly provided in the license provided with the&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Materials.  No license under any patent, copyright, trade&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * secret or other intellectual property right is granted to or&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * conferred upon you by disclosure or delivery of the Materials,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * either expressly, by implication, inducement, estoppel or&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * otherwise, except as expressly provided in the license&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * provided with the Materials.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * [DESCRIPTION]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Each element of the product matrix c[i][j] is &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * computed from a unique row and&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * column of the factor matrices, a[i][k] and b[k][j].&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * In the multithreaded implementation, each thread can&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * concurrently compute some submatrix of the product without&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * needing OpenMP data or control synchronization.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * The algorithm uses OpenMP* to parallelize the outer-most loop,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * using the "i" row index.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Both the outer-most "i" loop and middle "k" loop are manually&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * unrolled by 4.  The inner-most "j" loop iterates one-by-one&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * over the columns of the product and factor matrices.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * [COMPILE]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Use the following compiler options to compile both multi- and &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * single-threaded versions.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Parallel compilation:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  You must set the stacksize to an appropriate size; otherwise,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  the application will generate a segmentation fault. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  Linux* and Mac OS* X: appropriate ulimit commands are shown for &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  bash shell.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  Windows*: /Qstd=c99 /Qopenmp /F256000000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  Linux*:   ulimit -s unlimited&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *            -std=c99 -openmp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  Mac OS* X:  ulimit -s 64000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *            -std=c99 -openmp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; * Serial compilation:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  Use the same command, but omit the -openmp (Linux and Mac OS X)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *  or /Qopenmp (Windows) option.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt; */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#include &amp;lt;float.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#include &amp;lt;math.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#ifdef _OPENMP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#include &amp;lt;omp.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define bool _Bool&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define true 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define false 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// Matrix size constants&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// Be careful to set your shell's stacksize limit to a high value if you&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// wish to increase the SIZE.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define SIZE     4800     // Must be a multiple of 8.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define M        SIZE/8&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define N        SIZE/4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define P        SIZE/2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#define NTIMES   5        // product matrix calculations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; main(&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;double&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; a[M][N], b[N][P], c[M][P], walltime;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  bool nthr_checked=false;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  time_t start;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; i, j, k, l, i1, i2, i3, k1, k2, k3, nthr=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"Using time() for wall clock time&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"Problem size: c(%d,%d) = a(%d,%d) * b(%d,%d)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         M, P, M, N, N, P);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"Calculating product %d time(s)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, NTIMES);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// a is identity matrix&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (i=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; i&amp;lt;M; i++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (j=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; j&amp;lt;N; j++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      a[i][j] = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1.0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// each column of b is the sequence 1,2,...,N&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (i=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; i&amp;lt;N; i++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (j=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; j&amp;lt;P; j++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      b[i][j] = i+&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1.&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  start = time(NULL);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#ifdef _OPENMP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#pragma omp parallel private(i,j,k)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (l=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; l&amp;lt;NTIMES; l++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#ifdef _OPENMP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#pragma omp single nowait&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (!nthr_checked) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#ifdef _OPENMP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      nthr = omp_get_num_threads();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      printf( &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;We are using %d thread(s)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, nthr);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      nthr_checked = true;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// Initialize product matrix&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#ifdef _OPENMP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#pragma omp for nowait&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (i=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; i&amp;lt;M; i++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (j=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; j&amp;lt;P; j++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;        c[i][j] = &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0.0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// Parallelize by row.  The threads don't need to synchronize at&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// loop end, so "nowait" can be used.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#ifdef _OPENMP&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#pragma omp for nowait&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (i=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; i&amp;lt;M; i++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (k=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; k&amp;lt;N; k++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// Each element of the product is just the sum 1+2+...+n&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (j=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;; j&amp;lt;P; j++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;          c[i][j]  += a[i][k]  * b[k][j];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  } &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// #pragma omp parallel private(i,j,k)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  } &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// l=0,...NTIMES-1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  walltime = time(NULL) - start;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;Finished calculations.&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"Matmul kernel wall clock time = %.2f sec&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, walltime);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"Wall clock time/thread = %.2f sec&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;, walltime/nthr);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  printf(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"MFlops = %f&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      (&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;double&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;)(NTIMES)*(&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;double&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;)(N*M*&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;)*(&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;double&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;)(P)/walltime/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1.0e6&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-7333188737625206111?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/7333188737625206111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2008/04/openmp-cc-on-intel-and-linux-using.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7333188737625206111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/7333188737625206111'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2008/04/openmp-cc-on-intel-and-linux-using.html' title='openmp c/c++ on intel and linux using intel compiler'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_e7_RlKSyGls/R_3b3DZxzUI/AAAAAAAAAJA/U5IEIUhKEwE/s72-c/openmp+-+system+load+%28kde%29+-+edited+small.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-6604505587619451214</id><published>2008-03-29T14:41:00.002+08:00</published><updated>2010-05-21T00:55:16.659+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>syntax highlighting on blog</title><content type='html'>since &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;syntax highlighter&lt;/a&gt; doesn't support &lt;span style="font-style: italic;"&gt;vhdl&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;verilog&lt;/span&gt; code yet, so i manually convert the &lt;span style="font-style: italic;"&gt;highlighted text file&lt;/span&gt; into &lt;span style="font-style: italic;"&gt;html file&lt;/span&gt;. following the steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;open your code using &lt;a href="http://en.wikipedia.org/wiki/KWrite"&gt;kwrite&lt;/a&gt; and set the highlighting color as your flavor by selecting "Settings &gt; Configure Editor..." and clicking on "Fonts &amp;amp; Colors"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e7_RlKSyGls/R-4oGG8N4FI/AAAAAAAAAHw/KsF2lZ6gM5M/s1600-h/img1_edit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_e7_RlKSyGls/R-4oGG8N4FI/AAAAAAAAAHw/KsF2lZ6gM5M/s320/img1_edit.png" alt="" id="BLOGGER_PHOTO_ID_5183124306557526098" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;export your code into &lt;span style="font-style: italic;"&gt;html file&lt;/span&gt; by clicking on "File &gt; Export as HTML..." and "Save"&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_e7_RlKSyGls/R-3qFW8N4EI/AAAAAAAAAHo/Jt8JysJUdcg/s1600-h/img2_edit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_e7_RlKSyGls/R-3qFW8N4EI/AAAAAAAAAHo/Jt8JysJUdcg/s320/img2_edit.png" alt="" id="BLOGGER_PHOTO_ID_5183056123951702082" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;copy the &lt;span style="font-style: italic;"&gt;html source&lt;/span&gt; of your &lt;span style="font-style: italic;"&gt;html file&lt;/span&gt; by opening your &lt;span style="font-style: italic;"&gt;html file&lt;/span&gt; with your internet browser and clicking on "View &gt; Page Source" (if you are using &lt;a href="http://en.wikipedia.org/wiki/Mozilla_Firefox"&gt;mozilla firefox&lt;/a&gt;). copy from tag &amp;lt;pre&amp;gt; to &amp;lt;/pre&amp;gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e7_RlKSyGls/R-4pWW8N4GI/AAAAAAAAAH4/C-3fFd_D31w/s1600-h/img3_edit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_e7_RlKSyGls/R-4pWW8N4GI/AAAAAAAAAH4/C-3fFd_D31w/s320/img3_edit.png" alt="" id="BLOGGER_PHOTO_ID_5183125685242028130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_e7_RlKSyGls/R-4qo28N4HI/AAAAAAAAAIA/UjQNrIjVUo4/s1600-h/img4_edit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_e7_RlKSyGls/R-4qo28N4HI/AAAAAAAAAIA/UjQNrIjVUo4/s320/img4_edit.png" alt="" id="BLOGGER_PHOTO_ID_5183127102581235826" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;paste it into your new posting blog in side "Edit Html" tab box and click back on "Compose" tab box to see the result.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_e7_RlKSyGls/R-4tFW8N4II/AAAAAAAAAII/lkbhTfZ32vg/s1600-h/img5_edit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_e7_RlKSyGls/R-4tFW8N4II/AAAAAAAAAII/lkbhTfZ32vg/s320/img5_edit.png" alt="" id="BLOGGER_PHOTO_ID_5183129791230763138" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;add border to make it beautiful by changing &lt;span style="font-style: italic;"&gt;html&lt;/span&gt; tag &amp;lt;pre&amp;gt; with following settings.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 1em; overflow: auto; background-color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;&amp;lt;pre&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt; style=&lt;/span&gt;&lt;span style="color: rgb(170, 0, 0);"&gt;"border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 1em; overflow: auto; background-color: rgb(0, 0, 0);"&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;done! following examples of highlighted &lt;span style="font-style: italic;"&gt;vhdl&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;verilog&lt;/span&gt; code&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 1em; overflow: auto; background-color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;library&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; IEEE&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;use&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; IEEE&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;STD_LOGIC_1164&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ALL&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;use&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; IEEE&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;STD_LOGIC_ARITH&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ALL&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;use&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; IEEE&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;STD_LOGIC_UNSIGNED&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;ALL&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;entity&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Const_Unit &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;is&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   Port &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;Imm &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;in&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;std_logic_vector&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;15&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;downto&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         CS &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;in&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;std_logic&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         Const &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;out&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;std_logic_vector&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;31&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;downto&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Const_Unit&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;architecture&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Behavioral &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;of&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Const_Unit &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;is&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;-- pass the 16 lsb value.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   Const&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;15&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;downto&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Imm&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;15&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;downto&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;process&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;CS&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Imm&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;CS &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'0'&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;-- unsign value&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         Const&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;31&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;downto&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;16&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; X&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"0000"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;-- sign value (sign extension)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;in&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;31&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;downto&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;16&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;            Const&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Imm&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;15&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;loop&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;process&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; Behavioral&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;code: highlighted vhdl code&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(64, 64, 64); margin: 0em; padding: 1em; overflow: auto; background-color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;`timescale 1ns / 1ns&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;`include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"../inc/ctr.h"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;module&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; ctr(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// input&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   clk, rst,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// output&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   out&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// i/os&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;input&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;                      clk,        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// clock&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;                              rst;        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// reset&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;output&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; [&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;`WIDTH&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;]        out;        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// output&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// internal signals&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;wire&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;                       clk,        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// clock&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;                              rst;        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// reset&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;reg&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;    [&lt;/span&gt;&lt;span style="color: rgb(0, 255, 64);"&gt;`WIDTH&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;]        out;        &lt;/span&gt;&lt;span style="color: rgb(221, 221, 221);"&gt;// output&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;always&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; @(&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;posedge&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; clk &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;posedge&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; rst) &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt; (rst)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         out &amp;lt;= &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;         out &amp;lt;= out + &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 51);"&gt;   &lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;endmodule&lt;/span&gt;&lt;/pre&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;code: highlighted verilog code&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-6604505587619451214?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/6604505587619451214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2008/03/syntax-highlighting-on-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/6604505587619451214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/6604505587619451214'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2008/03/syntax-highlighting-on-blog.html' title='syntax highlighting on blog'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_e7_RlKSyGls/R-4oGG8N4FI/AAAAAAAAAHw/KsF2lZ6gM5M/s72-c/img1_edit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4959296721472542853.post-8096120279647411811</id><published>2007-11-24T22:07:00.007+08:00</published><updated>2010-05-21T00:58:07.791+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parallel Processor'/><title type='text'>opensparc for hobby (setting ide)</title><content type='html'>the first time i knew and directly downloaded &lt;a href="http://www.opensparc.net/"&gt;&lt;span style="font-style: italic;"&gt;opensparc&lt;/span&gt;&lt;/a&gt; source code was eight months ago. i grab it just for hobby so i don't have any plan to buy any expensive &lt;span style="font-style: italic;"&gt;ide&lt;/span&gt;, simulator, synthesizer, or loader. i don't even want to put it into a die. i want to grab it using open source or free software and load it (part of it) into an &lt;span style="font-style: italic;"&gt;fpga&lt;/span&gt; board.&lt;br /&gt;&lt;br /&gt;what did i do so far are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;joining related project&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;i join &lt;span style="font-style: italic;"&gt;opensparc-t1&lt;/span&gt; &lt;a href="http://s1.sunsource.net/"&gt;&lt;span style="font-style: italic;"&gt;s1&lt;/span&gt;&lt;/a&gt; project and &lt;a href="http://fpga.sunsource.net/"&gt;&lt;span style="font-style: italic;"&gt;fpga&lt;/span&gt;&lt;/a&gt; project.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;finding open source software&lt;/li&gt;&lt;/ul&gt;i'm currently using &lt;a href="http://www.debian.org/"&gt;&lt;span style="font-style: italic;"&gt;debian&lt;/span&gt; &lt;span style="font-style: italic;"&gt;gnu&lt;/span&gt;/&lt;span style="font-style: italic;"&gt;linux&lt;/span&gt; 4.0&lt;/a&gt; for the operating system, &lt;a href="http://www.eclipse.org/"&gt;&lt;span style="font-style: italic;"&gt;eclipse&lt;/span&gt; 3.3.1.1&lt;/a&gt; and &lt;a href="http://veditor.sourceforge.net/"&gt;&lt;span style="font-style: italic;"&gt;verilog editor&lt;/span&gt; 0.5.2&lt;/a&gt; for the &lt;span style="font-style: italic;"&gt;ide&lt;/span&gt;, &lt;a href="http://www.icarus.com/eda/verilog/"&gt;&lt;span style="font-style: italic;"&gt;icarus verilog 0.8&lt;/span&gt;&lt;/a&gt; for the simulator, &lt;a href="http://home.nc.rr.com/gtkwave/"&gt;&lt;span style="font-style: italic;"&gt;gtkwave&lt;/span&gt; 1.3.81&lt;/a&gt; for the waveform viewer of the simulation result. for the synthesizer, i have tried &lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; using &lt;span style="font-style: italic;"&gt;icarus verilog&lt;/span&gt; but it fail.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e7_RlKSyGls/R0hyCIsBgQI/AAAAAAAAAGg/hDIgof6ldKo/s1600-h/s1_core_eclipse.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_e7_RlKSyGls/R0hyCIsBgQI/AAAAAAAAAGg/hDIgof6ldKo/s320/s1_core_eclipse.png" alt="" id="BLOGGER_PHOTO_ID_5136480756033487106" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;eclipse ide for verilog editor on debian gnu/linux 4.0&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;i have added &lt;span style="font-style: italic;"&gt;opensparct1.1.5&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; as &lt;span style="font-style: italic;"&gt;eclipse&lt;/span&gt; project. i also set the &lt;span style="font-style: italic;"&gt;eclipse&lt;/span&gt; to automatically run some external tools for &lt;span style="font-style: italic;"&gt;s1&lt;/span&gt; project to build &lt;span style="font-style: italic;"&gt;icarus&lt;/span&gt; simulation, run &lt;span style="font-style: italic;"&gt;icarus&lt;/span&gt; simulation, and display test waveform.&lt;br /&gt;&lt;br /&gt;in the following example, i extract the &lt;span style="font-style: italic;"&gt;s1&lt;/span&gt;&lt;span style="font-style: italic;"&gt; core&lt;/span&gt; under &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core/&lt;/span&gt; directory.&lt;br /&gt;&lt;br /&gt;following steps show you how to set the external tools to build &lt;span style="font-style: italic;"&gt;icarus&lt;/span&gt; simulation:&lt;br /&gt;+ select &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;external tools&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;open external tools dialog...&lt;/span&gt;&lt;br /&gt;+ &lt;span&gt;on the &lt;/span&gt;left box, double click &lt;span style="font-style: italic;"&gt;program&lt;/span&gt;&lt;br /&gt;+ on the right box, fill in:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- name: s1 - build &lt;span&gt;icarus&lt;/span&gt; simulation&lt;br /&gt;+ on &lt;span style="font-style: italic;"&gt;main&lt;/span&gt; tab, fill in:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- location: &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core/tools/bin/build_icarus&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location of &lt;span style="font-style: italic;"&gt;build_icarus&lt;/span&gt; script)&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- working directory: ${workspace_loc:/s1_core}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(&lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; working directory)&lt;br /&gt;+ on &lt;span style="font-style: italic;"&gt;environment&lt;/span&gt; tab:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- click on &lt;span style="font-style: italic;"&gt;new...&lt;/span&gt; button&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- fill in variable name with &lt;span style="font-style: italic;"&gt;FILELIST_ICARUS&lt;/span&gt;, value with &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core/hdl/filelist.icarus&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location to &lt;span style="font-style: italic;"&gt;filelist.icarus&lt;/span&gt; file)&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- click on &lt;span style="font-style: italic;"&gt;new...&lt;/span&gt; button again&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- fill in variable name with &lt;span style="font-style: italic;"&gt;S1_ROOT&lt;/span&gt;, value with &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location to &lt;span style="font-style: italic;"&gt;filelist.icarus&lt;/span&gt; file)&lt;br /&gt;+ please make sure that the directories and environment variables are correct. one mistake can destroy your data. it because the &lt;span style="font-style: italic;"&gt;s1&lt;/span&gt; script execute "rm -rf *" command.&lt;br /&gt;+ click on &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;close&lt;/span&gt; button&lt;br /&gt;+ the new setting will appear at &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;external tools&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;s1 - build icarus simulation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;following steps show you how to set the external tools to run &lt;span style="font-style: italic;"&gt;icarus&lt;/span&gt; simulation:&lt;br /&gt;+ select &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;external tools&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;open external tools dialog...&lt;/span&gt;&lt;br /&gt;+ &lt;span&gt;on the &lt;/span&gt;left box, double click on &lt;span style="font-style: italic;"&gt;program&lt;/span&gt;&lt;br /&gt;+ on the right box, fill in:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- name: s1 - run &lt;span style="font-style: italic;"&gt;icarus&lt;/span&gt; simulation&lt;br /&gt;+ on &lt;span style="font-style: italic;"&gt;main&lt;/span&gt; tab, fill in:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- location: &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core/tools/bin/run_icarus&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location to &lt;span style="font-style: italic;"&gt;run_icarus&lt;/span&gt; script)&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- working directory: ${workspace_loc:/s1_core}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(&lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; working directory)&lt;br /&gt;+ on &lt;span style="font-style: italic;"&gt;environment&lt;/span&gt; tab:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- click on &lt;span style="font-style: italic;"&gt;new...&lt;/span&gt; button&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- fill in variable name with &lt;span style="font-style: italic;"&gt;S1_ROOT&lt;/span&gt;, value with &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location to &lt;span style="font-style: italic;"&gt;filelist.icarus&lt;/span&gt; file)&lt;br /&gt;+ click on &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;close&lt;/span&gt; button&lt;br /&gt;+ the new setting will appear at &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;external tools&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;s1 - run icarus simulation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;following steps show you how to set the external tools to display test waveform:&lt;br /&gt;+ select &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;external tools&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;open external tools dialog...&lt;/span&gt;&lt;br /&gt;+ &lt;span&gt;on the &lt;/span&gt;left box, double click on &lt;span style="font-style: italic;"&gt;program&lt;/span&gt;&lt;br /&gt;+ on the right box, fill in:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- name: s1 - display test waveform&lt;br /&gt;+ on &lt;span style="font-style: italic;"&gt;main&lt;/span&gt; tab, fill in:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- location: &lt;span style="font-style: italic;"&gt;/usr/bin/gtkwave&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location of &lt;span style="font-style: italic;"&gt;gtkwave&lt;/span&gt; application)&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- working directory: ${workspace_loc:/s1_core}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(&lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; working directory)&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- arguments: &lt;span style="font-style: italic;"&gt;run/sim/icarus/trace.vcd&lt;/span&gt; &lt;span style="font-style: italic;"&gt;tools/src/gtkwave.sav&lt;/span&gt;&lt;br /&gt;+ on &lt;span style="font-style: italic;"&gt;environment&lt;/span&gt; tab:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- click on &lt;span style="font-style: italic;"&gt;new...&lt;/span&gt; button&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;___&lt;/span&gt;- fill in variable name with &lt;span style="font-style: italic;"&gt;S1_ROOT&lt;/span&gt;, value with &lt;span style="font-style: italic;"&gt;.../openSparc/s1_core&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;_____&lt;/span&gt;(location to &lt;span style="font-style: italic;"&gt;filelist.icarus&lt;/span&gt; file)&lt;br /&gt;+ click on &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;close&lt;/span&gt; button&lt;br /&gt;+ the new setting will appear at &lt;span style="font-style: italic;"&gt;run&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;external tools&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;s1 - display test waveform&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;the default font setting form &lt;span style="font-style: italic;"&gt;eclipse&lt;/span&gt; is too big for me, so i change it from &lt;span style="font-style: italic;"&gt;window&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;preferences...&lt;/span&gt; than select &lt;span style="font-style: italic;"&gt;general&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;appearance&lt;/span&gt; - &lt;span style="font-style: italic;"&gt;colors and fonts&lt;/span&gt;. some other &lt;span style="font-style: italic;"&gt;gtk&lt;/span&gt; default font can be changed also. read this blog on how to &lt;a href="http://blog.xam.dk/archives/81-Making-Eclipse-look-good-on-Linux.html"&gt;make &lt;span style="font-style: italic;"&gt;eclipse&lt;/span&gt; look good on &lt;span style="font-style: italic;"&gt;linux&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;finding free software&lt;/li&gt;&lt;/ul&gt;i have installed &lt;a href="http://www.xilinx.com/"&gt;&lt;span style="font-style: italic;"&gt;xilinx ise webpack&lt;/span&gt; 9.2i &lt;/a&gt;on my &lt;span style="font-style: italic;"&gt;debian&lt;/span&gt; &lt;span style="font-style: italic;"&gt;gnu&lt;/span&gt;/&lt;span style="font-style: italic;"&gt;linux&lt;/span&gt; 4.0 box. i need only to install a new library and it just work. as the default, &lt;span style="font-style: italic;"&gt;debian&lt;/span&gt; comes with &lt;span style="font-style: italic;"&gt;libstdc++6&lt;/span&gt;, but &lt;span style="font-style: italic;"&gt;xilinx ise webpack 9.2i&lt;/span&gt; requires &lt;span style="font-style: italic;"&gt;libstdc++5&lt;/span&gt;. just install the old library without removing the new one.&lt;br /&gt;&lt;br /&gt;the synthesis works fine but you can't find any &lt;span style="font-style: italic;"&gt;fpga&lt;/span&gt; board that is supported by &lt;span style="font-style: italic;"&gt;xilinx ise webpack&lt;/span&gt; edition that can feed &lt;span style="font-style: italic;"&gt;opensparc t1&lt;/span&gt;or even &lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;/span&gt;in. the default simulator (just a simple simulator) form &lt;span style="font-style: italic;"&gt;xilinx ise webpack&lt;/span&gt; also can't simulate &lt;span style="font-style: italic;"&gt;s1 core&lt;/span&gt; test.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_e7_RlKSyGls/R0hxXIsBgPI/AAAAAAAAAGY/Fc-gl0oxrpk/s1600-h/s1_core_ise.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_e7_RlKSyGls/R0hxXIsBgPI/AAAAAAAAAGY/Fc-gl0oxrpk/s320/s1_core_ise.png" alt="" id="BLOGGER_PHOTO_ID_5136480017299112178" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;xilinx ise webpack on debian gnu/linux 4.0&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4959296721472542853-8096120279647411811?l=rainofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rainofcode.blogspot.com/feeds/8096120279647411811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rainofcode.blogspot.com/2007/11/opensparc-for-hobby-setting-ide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/8096120279647411811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4959296721472542853/posts/default/8096120279647411811'/><link rel='alternate' type='text/html' href='http://rainofcode.blogspot.com/2007/11/opensparc-for-hobby-setting-ide.html' title='opensparc for hobby (setting ide)'/><author><name>Eka A. Kurniawan</name><uri>http://www.blogger.com/profile/08674587261485713818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/_oilpqLgDfOE/TJWUoELsAeI/AAAAAAAAAD0/gxxE8-Xwm0A/S220/Screen+shot+2010-09-19+at+PM+12.41.02.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_e7_RlKSyGls/R0hyCIsBgQI/AAAAAAAAAGg/hDIgof6ldKo/s72-c/s1_core_eclipse.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
