You can try a small trick to see if this is the case.<div><br></div><div>On your main function, before you go to that hot loop (it must be on a separate function), you call into the vector code.</div><div><br></div><div>Eg:</div>
<div><br></div><div>static void Main () {</div><div> new MathNet.Numerics.LinearAlgebra.Double.DenseVector (1); //or whatever type you use.</div><div> method_that_uses_it ();</div><div>}</div><div><br></div><div><br></div>
<div>If this works, then it would be interesting to see how MS get away with it.</div><div><br></div><div><br><div class="gmail_quote">On Tue, Jul 17, 2012 at 10:49 AM, Jonathan Shore <span dir="ltr"><<a href="mailto:jonathan.shore@gmail.com" target="_blank">jonathan.shore@gmail.com</a>></span> wrote:<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"><div>Thanks, I have verified that the indexer below does not inline, even when setting MONO_INLINELIMIT.  Will try to construct a test case.  </div>
<div><br></div><div>I noticed that Vector<T> (from the OSS MathNet.Numerics project) does have 2 statically initialized values.  I am not sure if either of these would block inlining:</div><div><br></div><div><a href="http://mathnetnumerics.codeplex.com/SourceControl/changeset/view/b3dd68f35869#src/Numerics/LinearAlgebra/Generic/Vector.cs" target="_blank">http://mathnetnumerics.codeplex.com/SourceControl/changeset/view/b3dd68f35869#src%2fNumerics%2fLinearAlgebra%2fGeneric%2fVector.cs</a></div>
<div><br></div><div><span style="white-space:pre-wrap"> </span>private static readonly T Zero = default(T);</div><div><span style="white-space:pre-wrap">     </span>private static readonly T One = Common.SetOne<T>();</div>
<div><br></div><div>If these are the blockers and there is no reasonably simple way to address, I may have to switch matrix libraries.   Not being able to have inlined operations on the accessor reduces my performance by about 80% (my previous assessment of 25% was wrong).</div>
<div><div class="h5"><div><br></div><br><div><div>On Jul 16, 2012, at 2:45 PM, Rodrigo Kumpera wrote:</div><br><blockquote type="cite">You can use the MONO_VERBOSE_METHOD env var. <div>It takes a method name but try a method spec to further narrow the massive JIT spew this produces if you have multiple matches.<div>
<div><br><br><div class="gmail_quote">On Mon, Jul 16, 2012 at 3:29 PM, Jonathan Shore <span dir="ltr"><<a href="mailto:jonathan.shore@gmail.com" target="_blank">jonathan.shore@gmail.com</a>></span> wrote:<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"><br><div><div><div>On Jul 16, 2012, at 2:11 PM, Rodrigo Kumpera wrote:</div>
<br></div><blockquote type="cite"><br><br><div class="gmail_quote"><div>On Mon, Jul 16, 2012 at 2:45 PM, Jonathan Shore <span dir="ltr"><<a href="mailto:jonathan.shore@gmail.com" target="_blank">jonathan.shore@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left: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"><div>Hi Rodrigo,</div><div><br></div><div>I have played with the MONO_INLINELIMIT env variable (just discovered in the mono code a couple of days ago).  It solved some of my other inlining issues.   The AggressiveInlining option should be helpful for methods in 4.5 (I'm still on 4.0), though I don't believe the attribute can be used on properties, even though they are effectively methods (or am I wrong here).</div>


</div></blockquote><div><br></div></div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left: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"><div><br></div><div><div>You mentioned "we don't inline methods that call other methods" and suggested might be the case in my code.   I am simply indexing the get method in:</div>

<div>
<div><br></div><div>public override double this[int i]</div><div>{</div><div><span style="white-space:pre-wrap">        </span>get { return _data[i]; }</div><div><span style="white-space:pre-wrap"> </span>set { _data[i]  = value; }</div>


<div>}</div><div><br></div></div><div>I thought that since this is an override, though on a leaf / sealed class, perhaps mono could not handle this case.   Not sure where indexing on this property would hit the "call another method" case.</div>


</div></div></blockquote><div><div><br></div><div>This should probably inline fine. Can you provide a small and complete sample where this does happen? Your problem sounds really odd.</div></div></div></blockquote>
<div><br></div><div>I did not try the MONO_INLINELIMIT with this particular problem.  I manually inlined this one prior to posting and later applied the env variable for a different inlining issue after posting.   It seems like the default limit is perhaps too low (or too low for my application, I am OK with using the env variable however).  </div>

<div><br></div><div>I'll reverse the change and give the env variable a go with the above.   Also, let me check the hierarchy of this class and see whether there is any static construction.   </div><div><br></div><div>

If there is nothing obvious, will try to arrange a test case over the next few days.   Will be a bit tricky to arrange test, possibly, due to the class environment.   With luck, can demonstrate with a simple test.</div><div>

<br></div><div>Finally, how do I see the generated llvm x86 code.  Can I do this with monodis?   I know I can see the IL   Thus far have been testing by noting the runtime.</div><div><br><blockquote type="cite">
<div class="gmail_quote"><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><div>If I understand this better, I can investigate / suggest some new feature re: inlining.</div><div><br></div></div></blockquote><div> </div></div>
</blockquote></div></div><br></div></blockquote></div><br></div></div></div>
</blockquote></div><br></div></div></div></blockquote></div><br></div>