<div dir="ltr"><div><div>Hi Tobias and ImgLib2ers,<br><br></div>the bit types are not thread safe. At some point it said so in the documentation at the top of the files--I think--but I cannot find that note now in the github repository version of the files. Perhaps we removed it: as far as I know, no numeric type is thread safe. Perhaps some may be incidentally thread safe, but they don't have to be. Coordinating multi-threaded access to the same Img requires a special-purpose approach, that can be ameliorated with e.g. proxy types that declare each method as synchronized. Declaring all type methods as synchronized adds overheads to the general case, which is not the best approach.<br><br></div><div>Regarding the lock-free approach: that reads like software transactional memory, and there are implementations out there. I wouldn't want to impose that kind of overhead, either, in the Type classes themselves.<br><br></div><div>As usual with threads, code that accesses a resource must consider the consequences and synchronize access where appropriate.<br><br>Albert<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2014-10-29 19:34 GMT-04:00 Tobias Pietzsch <span dir="ltr"><<a href="mailto:pietzsch@mpi-cbg.de" target="_blank">pietzsch@mpi-cbg.de</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Ok, just looking at the code of <span style="font-family:Monaco;font-size:11px">ApplyManualThresholdTest</span>, I have a hunch of whats going wrong.<div>The test uses</div><div><div style="margin:0px;font-size:11px;font-family:Monaco"><span style="white-space:pre-wrap">         </span><span style="color:#931a68">final</span> Img<BitType> out = bitmap();</div></div><div><br></div><div>I bet that for the new BitType from the Fractions branch nobody considered the possibility that two cursors might simultaneously write to bits of the same underlying long value.</div><div><br></div><div>One solution would be to use locks to synchronize all accesses to the underlying long[] array (this is for BitType, Unsigned12BitType, etc).</div><div>However, I fear that this will slow down things considerably.</div><div><br></div><div>Is anyone familiar enough with the Java Memory Model to provide an educated guess as to whether a lock-free approach would be feasible?</div><div>By lock-free I mean setting the value and then checking whether the value is actually what was expected (and if not, retry).</div><div>I’m cc’ing Albert and the imagej-devel and fiji-devel lists to increase the probability that someone might actually know…</div><div><br></div><div>best regards,</div><div>Tobias</div><div><br><div><div><div>On 30 Oct 2014, at 00:18, Tobias Pietzsch <<a href="mailto:pietzsch@mpi-cbg.de" target="_blank">pietzsch@mpi-cbg.de</a>> wrote:</div><br><blockquote type="cite"><div style="word-wrap:break-word">Hi Curtis,<div><br></div><div>I’m trying to look at it, however I get the following maven error:</div><div><div><br></div><div>pietzsch@tomancak-mac-17:~/workspace/imagej-ops (imglib2-release)$ mvn -U clean install</div><div>[INFO] Scanning for projects...</div><div>Downloading: <a href="http://maven.imagej.net/content/groups/public/net/imagej/pom-imagej/3.2/pom-imagej-3.2.pom" target="_blank">http://maven.imagej.net/content/groups/public/net/imagej/pom-imagej/3.2/pom-imagej-3.2.pom</a></div><div>Downloading: <a href="http://repo.maven.apache.org/maven2/net/imagej/pom-imagej/3.2/pom-imagej-3.2.pom" target="_blank">http://repo.maven.apache.org/maven2/net/imagej/pom-imagej/3.2/pom-imagej-3.2.pom</a></div><div>[ERROR] The build could not read 1 project -> [Help 1]</div><div>[ERROR]</div><div>[ERROR]   The project net.imagej:imagej-ops:0.6.0-SNAPSHOT (/Users/pietzsch/workspace/imagej-ops/pom.xml) has 1 error</div><div>[ERROR]     Non-resolvable parent POM: Could not find artifact net.imagej:pom-imagej:pom:3.2 in imagej.public (<a href="http://maven.imagej.net/content/groups/public" target="_blank">http://maven.imagej.net/content/groups/public</a>) and 'parent.relativePath' points at no local POM @ line 5, column 10 -> [Help 2]</div><div>[ERROR]</div><div>[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.</div><div>[ERROR] Re-run Maven using the -X switch to enable full debug logging.</div><div>[ERROR]</div><div>[ERROR] For more information about the errors and possible solutions, please read the following articles:</div><div>[ERROR] [Help 1] <a href="http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException" target="_blank">http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException</a></div><div>[ERROR] [Help 2] <a href="http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException" target="_blank">http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException</a></div></div><div><br></div><div>How can I fix this?</div><div><br></div><div>best regards,</div><div>Tobias</div><div><br><div><div>On 29 Oct 2014, at 23:37, Curtis Rueden <<a href="mailto:ctrueden@wisc.edu" target="_blank">ctrueden@wisc.edu</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr">Hi Tobi & all,<div><br></div><div>[Added Christian to CC, since this mail is mostly about OPS]</div><div><br></div><div>Still left to do:</div><div><br></div><div><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px">1) Check out the imglib2-release branch of imglib2-tests and fix the compile errors.</span><br style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px">2) Check out the imglib2-release branch of imglib2-script and fix the compile errors.</span><br style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px">3) Check out the imglib2-release branch of imagej-ops and figure out why tests fail now.</span><br></div><div><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px">I spent some hours working on imagej-ops this afternoon. With the latest imglib2 master branch, there is only one remaining test failure. (I guess Tobi's bug-fix fixed the other test failure...)</span></div><div><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px">The problem is really deep, though: the ParallelMapI2I uses multiple cursors simultaneously to iterate over ArrayImgs, and it seems there is a race condition that causes the ApplyManualThresholdTest to intermittently fail.</span></div><div><br></div><div>I have to head out for the day, but if anyone else wants to take a crack at it, I added a WIP to the topic branch that illustrates the issue. Setting a breakpoint on the "WTF" line will stop the code if/when the problem occurs.</div><div><br></div><div><a href="https://github.com/imagej/imagej-ops/commit/86f8452f77680dafbff747a86ffca2be4a993b37#diff-da607cd95c8ebd526929f7ea15a1da91R117" target="_blank">https://github.com/imagej/imagej-ops/commit/86f8452f77680dafbff747a86ffca2be4a993b37#diff-da607cd95c8ebd526929f7ea15a1da91R117</a><br></div><div><br></div><div>On my machine, the problem seems to occur ~40% of the time, depending on the location and quantity of print statements.</div><div><br></div><div><font color="#500050" face="arial, sans-serif">Regards,</font></div><div><font color="#500050" face="arial, sans-serif">Curtis</font></div><div><br></div><div><br></div><div class="gmail_extra"><div class="gmail_quote">On Mon, Oct 27, 2014 at 11:37 AM, Curtis Rueden <span dir="ltr"><<a href="mailto:ctrueden@wisc.edu" target="_blank">ctrueden@wisc.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi Tobi,<span><div><br></div><div>> <span style="font-family:arial,sans-serif;font-size:13px">I fixed the remaining errors.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div></span><div><span style="font-family:arial,sans-serif;font-size:13px">Thanks!</span></div><span><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><div><font face="arial, sans-serif">> Curtis, maybe we can do this via Skype tomorrow (i.e. Monday)?</font></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></div></span><div style="font-family:arial,sans-serif;font-size:13px">I am available every day from ~9:30am - 4:30pm. I am available via GChat (<a href="mailto:ctrueden@gmail.com" target="_blank">ctrueden@gmail.com</a>), IRC (#imagejdev and #fiji-devel on freenode) and Skype (curtis_rueden).</div><span><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">> I’ll continue working on these <span><span>tomorrow</span></span>.</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></span><div style="font-family:arial,sans-serif;font-size:13px">Thanks again! I'll work on documentation today, then.</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Regards,</div><div style="font-family:arial,sans-serif;font-size:13px">Curtis</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 26, 2014 at 6:51 PM, Tobias Pietzsch <span dir="ltr"><<a href="mailto:pietzsch@mpi-cbg.de" target="_blank">pietzsch@mpi-cbg.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word">Hi,<div><span><br><div><div>On 25 Oct 2014, at 01:02, Curtis Rueden <<a href="mailto:ctrueden@wisc.edu" target="_blank">ctrueden@wisc.edu</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr"><div>Tobias asked if there is anything others could do to help, so here is a list (in my opinion of priority order):</div><div><br></div><div>1) Check out the imglib2-release branch of imglib2-tutorials and fix the compile errors.</div></div></blockquote><br></div></span><div>I fixed the remaining errors.</div><div>To run these examples I had to do two additional things (not committed because they shouldn’t be required soon)</div><div><br></div><div>1.) I had to add an empty class net.imglib2.img.basictypeaccess.array.BitArray to make scifio able to open the images.</div><div>This is because at some point scifio does an “instanceof BitArray” check and BitArray isn’t there anymore. These checks should be removed for next scifio version.</div><div><br></div><div>2.) I had to make a SNAPSHOT dependency on imglib2-core because in the current release there is a bug which I fixed in this commit <a href="https://github.com/imglib/imglib2/commit/fc0d3ebcd9256e60961180952c0383c47e63d111" target="_blank">https://github.com/imglib/imglib2/commit/fc0d3ebcd9256e60961180952c0383c47e63d111</a></div><div>So already it is time to release imglib2-core 2.0.2</div><div>It would be absolutely fantastic if you could walk me through how to do that. Curtis, maybe we can do this via Skype tomorrow (i.e. Monday)?</div><span><div><br></div><blockquote type="cite"><div dir="ltr"><div>2) Check out the imglib2-release branch of imglib2-tests and fix the compile errors.<br></div><div>3) Check out the imglib2-release branch of imglib2-script and fix the compile errors.<br></div><div>4) Check out the imglib2-release branch of imagej-ops and figure out why tests fail now.</div></div></blockquote></span></div><div><div dir="ltr"><div><br></div><div>I’ll continue working on these tomorrow.</div><div><br></div></div></div><div>all the best,</div><div>Tobias</div><div><div><br></div><div><div>On 25 Oct 2014, at 01:02, Curtis Rueden <<a href="mailto:ctrueden@wisc.edu" target="_blank">ctrueden@wisc.edu</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr">Hi guys,<div><br></div><div>Here is a status update on the ImgLib2 release.</div><div><br></div><div>The following components are released:</div><div><br></div><div>* imglib2 2.0.1</div><div>* imglib2-algorithm 0.1.0<br></div><div>* imglib2-algorithm-fft 0.1.0</div><div>* imglib2-algorithm-gpl 0.1.0</div><div>* imglib2-ij 2.0.0-beta-27<br></div><div>* imglib2-realtransform 2.0.0-beta-27</div><div>* imagej-common 0.10.0</div><div><br></div><div>The following components are not done yet:</div><div><br></div><div>* imglib2-script 0.1.0</div><div>* imglib2-tests</div><div>* imglib2-tutorials</div><div><div><br></div><div>(Note that for tests and tutorials, it is just a matter of updating the master branch, since we will never cut Maven release of those.)</div><div><br></div></div><div>* imagej-ops 0.6.0</div><div>* imagej-plugins-commands 0.3.0</div><div>* imagej-ui-swing 0.8.0</div><div>* scifio 0.17.0</div><div>* scifio-ome-xml 0.10.0</div><div><br></div><div>And probably others that will become obvious as we proceed further along.</div><div><br></div><div>You can glean much of this same information from the following URL:</div><div>    <a href="http://status.imagej.net/" target="_blank">http://status.imagej.net/</a><br></div><div><br></div><div>Tobias asked if there is anything others could do to help, so here is a list (in my opinion of priority order):</div><div><br></div><div>1) Check out the imglib2-release branch of imglib2-tutorials and fix the compile errors.</div><div>2) Check out the imglib2-release branch of imglib2-tests and fix the compile errors.<br></div><div>3) Check out the imglib2-release branch of imglib2-script and fix the compile errors.<br></div><div>4) Check out the imglib2-release branch of imagej-ops and figure out why tests fail now.</div><div><br></div><div>Any help any of you can contribute toward the above goals would be greatly appreciated! I'll be back on the case on Monday. (I would not worry about the Git history, Tobi -- just fix the errors on each branch.)</div><div><br></div><div>Regards,</div><div>Curtis</div><div><br></div><div>P.S. Thorough docs on the component structure, development best practices, and related stuff will be coming soon to a <a href="http://imagej.net/Architecture" target="_blank">http://imagej.net/Architecture</a> near you.</div><div><br></div></div>
</blockquote></div><br></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>
</blockquote></div><br></div></div></blockquote></div><br></div></div></div></blockquote></div><br><br clear="all"><br>-- <br><div dir="ltr"><a href="http://albert.rierol.net" target="_blank">http://albert.rierol.net</a><div><a href="http://www.janelia.org/lab/cardona-lab" target="_blank">http://www.janelia.org/lab/cardona-lab</a><br><a href="http://www.ini.uzh.ch/~acardona/" target="_blank">http://www.ini.uzh.ch/~acardona/</a></div></div>
</div>