<?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-1510388362849608800</id><updated>2011-04-21T11:11:12.852-07:00</updated><category term='weekly'/><category term='plan'/><title type='text'>Summer of Code with Graphite</title><subtitle type='html'>This is a blog on GCC development during my Google Summer of Code 2009.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-8791391177269390089</id><published>2009-07-25T08:11:00.001-07:00</published><updated>2009-07-25T08:11:02.202-07:00</updated><title type='text'>We've got our (Graphite) Developers' Maillist.</title><content type='html'>Some bit long since my last post here, cause most of the questions/status I have posted to gcc-graphite maillist. Yes, we got our maillist. If you are interested in next year&amp;#39;s Google Summer of Code and like to work with great Graphite Developers, keep your eyes on our maillist, and if you have any questions about Graphite, just leave a post to us there. Did I mentioned that our maillist is: &lt;a href="http://groups.google.de/group/gcc-graphite?hl=en"&gt;http://groups.google.de/group/gcc-graphite?hl=en&lt;/a&gt; ? You&amp;#39;ll find it&amp;#39;s really great to work with Graphite and Graphite developers! ;-)&lt;br&gt; &lt;br&gt;Status about about autopar in Graphite:&lt;br&gt;1. It now works. &lt;br&gt;    Autopar in Graphite can triggered by flag -fgraphite-force-parallel -ftree-parallelize-loops=4(thread number). Dependency checking is done during Graphite pass and code generation part will be done in autopar pass.&lt;br&gt; 2. It now can parallel loops with if statement.&lt;br&gt;3. It now can work with some of the triangle loops.&lt;br&gt;     Yes, some of the triangle loops we can&amp;#39;t parallel restricted by the SCoP detection part. It will raise &amp;quot;number of iterations not known.&amp;quot; For details, you could refer to&lt;a href="http://groups.google.de/group/gcc-graphite/browse_thread/thread/7850455305927673?hl=en#"&gt; this post&lt;/a&gt;.&lt;br&gt; 4. It now only works with innermost loop. Due to a &lt;a href="http://gcc.gnu.org/wiki/AutoparRelated"&gt;tests&lt;/a&gt;(the bottom of this page) for the runtime of autopar, it seems that we should always parallel the outermost first. The support for outerloop code generation will be soon developed by Razya.&lt;br&gt; &lt;br&gt;Currently, I&amp;#39;m working on passing alias information and use this information to filter unnecessary dependency checking between 2pdrs. You can refer to &lt;a href="http://groups.google.de/group/gcc-graphite/browse_thread/thread/7bffbe9037b5adf4?hl=en#"&gt;this page&lt;/a&gt; and &lt;a href="http://groups.google.de/group/gcc-graphite/browse_thread/thread/ac0c34265284c9ef?hl=en#"&gt;this page&lt;/a&gt;. Now in Graphite, it is implemented in a &lt;a href="http://groups.google.de/group/gcc-graphite/browse_thread/thread/e7f41a0ec857c4e9?hl=en#"&gt;conservative way&lt;/a&gt;. &lt;br&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1510388362849608800-8791391177269390089?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/8791391177269390089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=8791391177269390089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/8791391177269390089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/8791391177269390089'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/07/weve-got-our-graphite-developers.html' title='We&apos;ve got our (Graphite) Developers&apos; Maillist.'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-607211102767316761</id><published>2009-05-25T20:07:00.001-07:00</published><updated>2009-05-25T20:07:45.276-07:00</updated><title type='text'>Data dependency algorithms under polyhedral model vs. normal  algorithms</title><content type='html'>&lt;p class="line867"&gt;&lt;strong&gt;Theoretically&lt;/strong&gt;[1]: &lt;span class="anchor" id="line-13"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="line874"&gt;Data dependency algorithms in trunk is mostly with I test and Omega test. Both of them &lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;are limited. Here is a comparison between them. &lt;span class="anchor" id="line-16"&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Precise level &lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;ol type="1"&gt;&lt;li&gt;I test (GCD test and Banerjee test): Only evaluates the ability to prove or disprove dependence between statements. &lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;Omega test: Can give a precise level (Tell which iteration of statements are in dependent), but less precise when there is one or more integer symbolic constant are present. &lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Polyhedral dependence: Give the right precision level ( Will tell which iteration of statements are in dependent). &lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt;&lt;/li&gt;&lt;li class="gap"&gt;Triangle loops &lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;&lt;ol type="1"&gt;&lt;li&gt;I test and Omega test: Can not handle. &lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Polyhedral dependence: Can handle. &lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt;&lt;/li&gt;&lt;li class="gap"&gt;conditionals with boolean expressions of affine inequalities &lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;ol type="1"&gt;&lt;li&gt;I test and Omega test: Can not handle. &lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;Polyhedral dependence: Can handle. &lt;span class="anchor" id="line-28"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-29"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li class="gap"&gt;Cost &lt;span class="anchor" id="line-30"&gt;&lt;/span&gt;&lt;ol type="1"&gt;&lt;li&gt;I test: It cost less and is always preferred because they capture most dependency under a low computational cost. &lt;span class="anchor" id="line-31"&gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;Omega test: Worst exponential complexities, but works good in practice. &lt;span class="anchor" id="line-32"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Polyhedral dependence: High cost.  &lt;span class="anchor" id="line-33"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="line874"&gt;Reference: &lt;span class="anchor" id="line-35"&gt;&lt;/span&gt;[1] Violated Dependence Analysis by Nicolas Vasilache, Albert Cohen, Cedric Bastoul, Sylvain Girbal. &lt;span class="anchor" id="line-36"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-37"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="line867"&gt;&lt;strong&gt;Practically (Implement in Graphite)&lt;/strong&gt;: &lt;span class="anchor" id="line-38"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-39"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-40"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;/* FIXME: Need to be added.  */&lt;/pre&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1510388362849608800-607211102767316761?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/607211102767316761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=607211102767316761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/607211102767316761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/607211102767316761'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/05/data-dependency-algorithms-under.html' title='Data dependency algorithms under polyhedral model vs. normal  algorithms'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-2351093424453466346</id><published>2009-05-19T05:54:00.001-07:00</published><updated>2009-05-19T05:54:37.418-07:00</updated><title type='text'>Testing result of run-time after loop-parallelization</title><content type='html'>It&amp;#39;s unlucky that blogger is unavailable  now in China that I could only &lt;br&gt;using gladder to get access. But it&amp;#39;s lucky that blogger has a email &lt;br&gt;post functionality, so, it&amp;#39;s fine.&lt;br&gt;&lt;br&gt;I have tested some simple loops which parallelized by autopar&lt;br&gt; to see how much promotion we can got. This test results now&lt;br&gt;is available in gcc wiki:&lt;br&gt;&lt;a href="http://gcc.gnu.org/wiki/AutoparRelated"&gt;http://gcc.gnu.org/wiki/AutoparRelated&lt;/a&gt;.&lt;br&gt;Mainly include:&lt;br&gt;&lt;br&gt;1. One nested loop, number of threads vs. run-time, with&lt;br&gt;    not all the code parallel.&lt;br&gt;2. One nested loop, number of threads vs. run-time, almost&lt;br&gt;   all code got parallel.&lt;br&gt;3. Two nested loops, with innermost parallel, number of threads&lt;br&gt;    vs. run-time. (It got worse after parallel.)&lt;br&gt; 4. Two nested loops, with outer loop parallel, number of threads&lt;br&gt;    vs. run-time. (It&amp;#39;s better).&lt;br&gt;&lt;br&gt;The 4 figures include comparing of:&lt;br&gt; - Runtime of openmp directive inserted c code.&lt;br&gt; - Runtime of Graphite autoparallel c code.&lt;br&gt;  - Runtime of non-parallel c code.&lt;br&gt;&lt;br&gt;For this week, I&amp;#39;m planning to do some work with&lt;br&gt;the already-done data dependency work. Maybe firstly write&lt;br&gt;some test cases for the data dependency checking to see what&lt;br&gt; kinds of loops we could/want parallelize.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1510388362849608800-2351093424453466346?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/2351093424453466346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=2351093424453466346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/2351093424453466346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/2351093424453466346'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/05/testing-result-of-run-time-after-loop.html' title='Testing result of run-time after loop-parallelization'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-893913929918009048</id><published>2009-05-07T02:46:00.000-07:00</published><updated>2009-05-07T06:12:47.914-07:00</updated><title type='text'>Tips for reading code</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Using cscope instead of grep&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In gcc code base, the definition of a function is always writen like:&lt;br /&gt;&lt;pre&gt;int&lt;br /&gt;some_func(int *)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;So that when you wanner find a certain definition, you can use something like:&lt;br /&gt;&lt;pre&gt;grep *.c ^some_func&lt;br /&gt;&lt;/pre&gt;This is not always convenient especially when you want to find definition in a code based not styled like gcc style. With &lt;a href="http://cscope.sourceforge.net/"&gt;cscope&lt;/a&gt;, you can do more...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Find global definition&lt;/li&gt;&lt;li&gt;Find functions calling a function&lt;/li&gt;&lt;li&gt;Find egrep pattern (I like this, it's super nice)&lt;/li&gt;&lt;li&gt;More...&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;Sometimes it doesn't work when using cscope finding definition in gcc.&lt;/span&gt;&lt;br /&gt;Yes, this happens when you trying to find the definition of struct which marked by GTY(()), which is related to a sophisticated memory management techniques. But whenever their is a question, there is always a solution just not far away. We can simply find these definitions with cscope's &lt;span style="font-style: italic;"&gt;finding egrep pattern&lt;/span&gt; method, then you can find patterns like &lt;code&gt;struct GTY ((chain_next ("%h.next"))) loop&lt;/code&gt;. It's easy, hmm :)&lt;br /&gt;Cscope supported emacs and it's integrated in a kind interface. But I think it'll be better if it can do something like etags works in emacs -- Go back as farther from where I start the find command as it can do... I like this very much, you may want to go back to your place after you read the definition's definition's definition...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Sometimes we need to use find+grep&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sometimes it's more convenient to using unix's super good cmd tool like find grep etc. to search the code base.&lt;br /&gt;If you want to find in gcc/testsuite 's expect file (*.exp) a certain pattern, say DEFAULT_CFLAGS. You can simply use:&lt;br /&gt;find . -iname "*.exp" -exec grep DEFAULT_CFLAGS {} \;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;code&gt;^L&lt;/code&gt; :)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1510388362849608800-893913929918009048?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/893913929918009048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=893913929918009048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/893913929918009048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/893913929918009048'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/05/tips-for-reading-code.html' title='Tips for reading code'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-6890326074447379577</id><published>2009-05-04T07:51:00.000-07:00</published><updated>2009-05-04T08:14:54.278-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weekly'/><title type='text'>write testsuites for autopar's code generation part</title><content type='html'>After triggering autopar's code generation part after Graphite, I write some testcases for judging whether this part works correctly. Now the simple tests is located at &lt;code&gt;testsuites/gcc.dg/graphite/graphite_autopar&lt;/code&gt;. These test cases will PASS all the 9 checkings (3 checkings per test). Unfortunately, the reduction tests (I didn't include in the testsuites) will fail when collecting reduction information. I'll work with Razya to findout why.&lt;br /&gt;&lt;br /&gt;Basic plans:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Regression test for the patch(split autopar) for trunk.&lt;/li&gt;&lt;li&gt;Try to merge/update Graphite's autopar code generation part with trunk (This part need some time, maybe I'll try to findout if we can do this appropriately first).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Testsuites of autopar in trunk didn't actually run (just compile and analysis dump file), so maybe I'll submit a patch for that.&lt;br /&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/1510388362849608800-6890326074447379577?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/6890326074447379577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=6890326074447379577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/6890326074447379577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/6890326074447379577'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/05/write-testsuites-for-autopars-code.html' title='write testsuites for autopar&apos;s code generation part'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-6248301761849708893</id><published>2009-04-26T05:57:00.000-07:00</published><updated>2009-04-28T20:42:52.798-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weekly'/><title type='text'>Split autopar in a more clearer way</title><content type='html'>&lt;span style=";font-family:lucida grande;font-size:130%;"  &gt;&lt;br /&gt;1. Testing the reason why autopar failed after Graphite pass&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I test with flag:&lt;code&gt;&lt;br /&gt;set args -O2 -fgraphite -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-final_cleanup ../../gcc/testsuite/gcc.dg/autopar/parallelization-1.c&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;the autopar part will fail at function &lt;code&gt;parallelize_loops&lt;/code&gt;:&lt;br /&gt;&lt;pre src="c"&gt; FOR_EACH_LOOP (li, loop, 0)&lt;br /&gt;{&lt;br /&gt;htab_empty (reduction_list);&lt;br /&gt;if ((/* Do not bother with loops in cold areas.  */&lt;br /&gt; optimize_loop_nest_for_size_p (loop)&lt;br /&gt; /* Or loops that roll too little.  */&lt;br /&gt; || expected_loop_iterations (loop) &lt;= n_threads                                       &lt;br /&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ &lt;/pre&gt;The &lt;code&gt;expected_loop_iterations (loop)&lt;= n_threads&lt;/code&gt; fails.  I think this might be caused by the not correct &lt;code&gt;edge-&gt;count&lt;/code&gt; and &lt;code&gt;edge-&gt;frequency&lt;/code&gt; when &lt;code&gt;create_empty_loop_on_edge&lt;/code&gt; in &lt;code&gt;translate_clast&lt;/code&gt;. And &lt;code&gt;optimize_loop_nest_for_size_p (loop)&lt;/code&gt; failed at some testcase, this might be caused by not correctly update of loop-&gt;header-&gt;frequency in Graphite.&lt;br /&gt;&lt;pre src="c"&gt;/* TODO: Fix frequencies and counts.  */&lt;br /&gt;freq = EDGE_FREQUENCY (entry_edge);&lt;br /&gt;cnt = entry_edge-&gt;count;&lt;br /&gt;&lt;/pre&gt;So in the patch splitting autopar in a more clearer way We simply bypass this checking. It should be fixed maybe later.&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:lucida grande;font-size:130%;"  &gt;2. Prepare the patch for splitting autopar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In a previous patch, I simply mark all the innermost loop parallel (introduce a bool flag can_be_parallel in loop structure). In this patch, we simply bypass the failed checking when this flag is set. And split autopar in a more clearer way : 1. Checking data dependency part 2. Code generation part&lt;br /&gt;Now it is something like:&lt;br /&gt;&lt;pre src="c"&gt;  FOR_EACH_LOOP (li, loop, 0)&lt;br /&gt;{&lt;br /&gt;htab_empty (reduction_list);&lt;br /&gt;if (/* Do not bother with loops in cold areas.  */&lt;br /&gt;optimize_loop_nest_for_size_p (loop)&lt;br /&gt;/* And of course, the loop must be parallelizable.  */&lt;br /&gt;|| !can_duplicate_loop_p (loop)&lt;br /&gt;|| loop_has_blocks_with_irreducible_flag (loop)&lt;br /&gt;/* FIXME: the check for vector phi nodes could be removed.  */&lt;br /&gt;|| loop_has_vector_phi_nodes (loop))&lt;br /&gt;continue;&lt;br /&gt;&lt;br /&gt;/* FIXME: Bypass this check as graphite doesn't update the&lt;br /&gt;count and frequency correctly now  */&lt;br /&gt; if (!loop-&gt;can_be_parallel&lt;br /&gt;    &amp;amp;&amp;amp; (expected_loop_iterations (loop) &lt;= n_threads&lt;br /&gt;       /* Do not bother with loops in cold areas.  */&lt;br /&gt;         || optimize_loop_nest_for_size_p (loop)))                       &lt;br /&gt;  continue;                  &lt;br /&gt;if (!try_get_loop_niter (loop, &amp;amp;niter_desc))                         &lt;br /&gt;  continue;                       &lt;br /&gt;if (!try_create_reduction_list (loop, reduction_list))                         &lt;br /&gt;  continue;                       &lt;br /&gt;if (!loop-&gt;can_be_parallel &amp;amp;&amp;amp; !loop_parallel_p (loop))&lt;br /&gt;  continue;&lt;br /&gt;changed = true;&lt;br /&gt;gen_parallel_loop (loop, reduction_list, n_threads, &amp;amp;niter_desc);&lt;br /&gt;&lt;/pre&gt;&lt;span style=";font-family:lucida grande;font-size:130%;"  &gt;3. Plan&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Regression test for this patch on trunk&lt;/li&gt;&lt;li&gt;Write testcases for code generation part, make sure it works correct after Graphite&lt;br /&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/1510388362849608800-6248301761849708893?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/6248301761849708893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=6248301761849708893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/6248301761849708893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/6248301761849708893'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/04/split-autopar-in-more-clearer-way.html' title='Split autopar in a more clearer way'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1510388362849608800.post-2152961382704972010</id><published>2009-04-21T18:19:00.000-07:00</published><updated>2009-04-22T02:30:18.787-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plan'/><title type='text'>A general plan for this project</title><content type='html'>&lt;p class="first"  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;I will be working with great &lt;a href="http://gcc.gnu.org/wiki/Graphite"&gt;Graphtie&lt;/a&gt; developers this summer, try to implement the project &lt;span style="font-style: italic;"&gt;parallel code generation&lt;/span&gt; in Graphite, you can find a short description about this project &lt;a href="http://gcc.gnu.org/wiki/Graphite/SoC"&gt;here&lt;/a&gt;. And also you can find my application &lt;a href="http://sites.google.com/site/forafilestorage/Home/gsoc_graphite.pdf?attredirects=0"&gt;here&lt;/a&gt; where I removed the personal information.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="first"  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;This blog will mainly focus on this summer project: 1. plans 2. what I have done 3. related Graphite internals&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="first" face="arial"&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;A general plan for what I will be doing for the next few weeks during summer of code:&lt;/span&gt;&lt;/p&gt;  &lt;ol  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Mark the innermost loop parallel &lt;span style="font-style: italic;"&gt;[done]&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Try to schedule autopar pass after Graphite, and enable code generation if flag_graphite_force_parallel is set  &lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;There should be some discussion with Razya about her plan about the autopar part&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;But before that, I'll try to schedule autopar first&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;I may try to write testcases for the loops that should be parallel, from easy to hard, and check autopar's code generation part, make sure this works correctly as we expected.  &lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The testcases is important. There should be some detailed discussion maybe with Sebastian and Konrad. To see what kind of loop we can/decide to handle.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Check autopar's code generation with flag_graphite_force_parallel set with these testcases, report bugs if it goes wrong.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Try to write code for deciding if a loop can be parallel with data dependency test under this polyhedral model.  &lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Try to understand the interface of data dependency test&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Write code, if data dependency success, mark the loop parallel&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1510388362849608800-2152961382704972010?l=summergraphite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://summergraphite.blogspot.com/feeds/2152961382704972010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1510388362849608800&amp;postID=2152961382704972010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/2152961382704972010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1510388362849608800/posts/default/2152961382704972010'/><link rel='alternate' type='text/html' href='http://summergraphite.blogspot.com/2009/04/general-plan-for-this-project.html' title='A general plan for this project'/><author><name>Li Feng</name><uri>http://www.blogger.com/profile/06107067267016846510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
