__builtin_prefetch, сколько читается?

Я пытаюсь оптимизировать некоторые C++ (RK4), используя

__builtin_prefetch

Я не могу понять, как сделать предварительную выборку всей структуры.

Я не понимаю, как считывается const void *addr. Я хочу, чтобы загружались следующие значения from и to.

for (int i = from; i < to; i++)
{
    double kv = myLinks[i].kv;
    particle* from = con[i].Pfrom;
    particle* to = con[i].Pto;
    //Prefetch values at con[i++].Pfrom & con[i].Pto;
    double pos = to->px- from->px;
    double delta = from->r + to->r - pos;
    double k1 = axcel(kv, delta, from->mass) * dt; //axcel is an inlined function
    double k2 = axcel(kv, delta + 0.5 * k1, from->mass) * dt;
    double k3 = axcel(kv, delta + 0.5 * k2, from->mass) * dt;
    double k4 = axcel(kv, delta + k3, from->mass) * dt;
    #define likely(x)       __builtin_expect((x),1)
    if (likely(!from->bc))
    {
            from->x += (( k1 + 2 * k2 + 2 * k3 + k4) / 6);
    }
}

Ссылка: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/

16
задан Mikhail 8 November 2018 в 04:04
поделиться