[gmx-developers] std::vector<Rvec> slowness

Berk Hess hess at kth.se
Wed Mar 23 10:51:38 CET 2016


On 2016-03-23 10:50, Erik Lindahl wrote:
> Hi,
>
> I haven’t followed the discussion in detail, but a long time ago I 
> remember having simliar issues in the kernels when using a list[] of 
> rvec[] (in plain-old-c, no c++) instead of extracting the pointer and 
> handling the multiply-by-3 manually. Could it be something similar 
> here, e.g. that the compiler things it does not know enough about RVec 
> rather than something going from with the outer list?
That would be my guess. The index used in the same loop comes from a 
vector as well and doesn't seem to affect performance.

Berk
>
> Cheers,
>
> Erik
>
>> On 23 Mar 2016, at 10:44, Berk Hess <hess at kth.se 
>> <mailto:hess at kth.se>> wrote:
>>
>> On 2016-03-23 10:42, Mark Abraham wrote:
>>> Hi,
>>>
>>> On Wed, Mar 23, 2016 at 9:44 AM Berk Hess <hess at kth.se> wrote:
>>>
>>>     Hi,
>>>
>>>     Luckily Szilard does thorough testing and noticed a performance
>>>     degradation in change set 25 of
>>>     https://gerrit.gromacs.org/#/c/5232/ The
>>>     only signifcant change with respect to previous sets is replacing C
>>>     pointers by std::vector. I traced the performance difference
>>>     back to a
>>>     single loop, which must have become several factors slower to
>>>     explain
>>>     the time difference. I get the performance back when replacing the
>>>     vector by a pointer extracted with .data(), see below. I looked
>>>     at the
>>>     assembly code from gcc 5.3.1 and the vector case generated 200 extra
>>>     instructions, which makes it difficult to see what the actual
>>>     difference
>>>     is. The pointer case uses a lot of vmovss and vaddss, which the
>>>     vector
>>>     one does much less, but this is only serial SIMD instruction. I
>>>     thought
>>>     that [] in vector might does bounds checking,
>>>
>>>
>>> Definitely not in release builds.
>>>
>>>     but it seems it does not.
>>>     Can anyone explain why the vector case can be so slow?
>>>
>>>     If this is a general issue (with RVec or more?), we need to
>>>     always extra
>>>     a pointer with .data() for use in all inner-loops. This is pretty
>>>     annoying and difficult to enforce.
>>>
>>>     Cheers,
>>>
>>>     Berk
>>>
>>>                             const std::vector<RVec> f_foreign =
>>>     idt_foreign->force
>>>
>>>
>>> This does a copy of the vector, and doesn't seem to be in any 
>>> version of this patch in gerrit. Is this what you meant to write?
>> I tried this. But my original "vectorized" patch set took a pointer 
>> from idt_foreign and did not copy the vector, that gives the same, 
>> slow, performance.
>>
>> Berk
>>>
>>> Mark
>>>
>>>     or
>>>                             const RVec  *f_foreign   =
>>>     idt_foreign->force.data();
>>>
>>>                              int natom = atomList->atom.size();
>>>                              for (int i = 0; i < natom; i++)
>>>                              {
>>>                                  int ind = atomList->atom[i];
>>>                                  rvec_inc(f[ind], f_foreign[ind]);
>>>                              }
>>>     --
>>>     Gromacs Developers mailing list
>>>
>>>     * Please search the archive at
>>>     http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List
>>>     before posting!
>>>
>>>     * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>>>
>>>     * For (un)subscribe requests visit
>>>     https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers
>>>     or send a mail to gmx-developers-request at gromacs.org
>>>     <mailto:gmx-developers-request at gromacs.org>.
>>>
>>>
>>>
>>
>> -- 
>> Gromacs Developers mailing list
>>
>> * Please search the archive at 
>> http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List 
>> before posting!
>>
>> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>>
>> * For (un)subscribe requests visit
>> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers 
>> or send a mail to gmx-developers-request at gromacs.org 
>> <mailto:gmx-developers-request at gromacs.org>.
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-developers/attachments/20160323/80ec32ca/attachment.html>


More information about the gromacs.org_gmx-developers mailing list