1. C++ / Говнокод #7887

    +149

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    for(int i=0;i<size1;i+=4)
          {
            float4 boxMax(plist[i+0].Box().vmax[axis], plist[i+1].Box().vmax[axis], plist[i+2].Box().vmax[axis], plist[i+3].Box().vmax[axis]);
            float4 boxMin(plist[i+0].Box().vmin[axis], plist[i+1].Box().vmin[axis], plist[i+2].Box().vmin[axis], plist[i+3].Box().vmin[axis]);
    
            register __m128 a = _mm_and_ps(_mm_cmplt_ps(boxMax, vSplit), one);
            register __m128 b = _mm_and_ps(_mm_cmpgt_ps(boxMin, vSplit), one);
            
            register __m128 left  = _mm_sub_ps(one, b); // left  = 1 - b; same as not(b) 
            register __m128 right = _mm_sub_ps(one, a); // right = 1 - a; same as not(a) 
    
            summLeft += (left.m128_i32[0] + left.m128_i32[1] + left.m128_i32[2] + left.m128_i32[3]);
            summRight+= (right.m128_i32[0] + right.m128_i32[1] + right.m128_i32[2] + right.m128_i32[3]);
          }

    http://www.gamedev.ru/code/forum/?id=141592
    История про то, как Пятачок оптимизировал простой цикл:

    for(int i=0;i<plist.size();i++)
    {
    if(plist[i].Box().vmax[axis] < split)
    summLeft++;
    else if(plist[i].Box().vmin[axis] > split)
    summRight++;
    else
    {
    summLeft++;
    summRight++;
    }
    }

    Запостил: CPPGovno, 18 Сентября 2011

    Комментарии (15) RSS

    • >Жил был пятачок и написал он такой код:
      Ответить
    • В чем говно-то?
      Использовал SSE - молодец.
      А насчет того, что оно тупит - нужно разобраться.
      Может unaligned обращения к памяти или еще какой нюанс.
      Ответить
      • Да тут алгоритм нужно оптимизировать, а не оптимизировать простой цикл, переписывая на ассемблер.
        Ответить
        • но ведь что бы переписать алгоритм, нужно думать!...
          Ответить
    • __m128? Какая архитектура?
      Ответить
    • не говнокод, вообще не смешно. Возможно что алгоритм писал один разработчик, а машинную оптимизацию проводил другой. TC вероятно никогда не работал над большими в командах больше 10 разработчиков
      Ответить
      • > Возможно что алгоритм писал один разработчик, а машинную оптимизацию проводил другой
        Пройдите по ссылке, если вам интересно. Это не так.
        Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий