cuda - оптимизация ядра - PullRequest
       40

cuda - оптимизация ядра

0 голосов
/ 08 августа 2011

Я создал простую систему частиц.У меня есть устройство с возможностью вычислений 2.1.Что я могу изменить, чтобы оптимизировать ядро?

Я предполагаю, что переменные tPos и tVel хранятся в регистрах.

__global__ void particles_kernel(float4 *vbo, float4 *pos, float4 *vel)
{
     int tid = blockIdx.x * blockDim.x + threadIdx.x;

     float4 tPos = pos[tid];
     float4 tVel = vel[tid];

     tPos.x += tVel.x;
     tPos.y += tVel.y;
     tPos.z += tVel.z;

     if(tPos.x < -2.0f)
     {
         tVel.x = -tVel.x;
     }
     else if(tPos.x > 2.0f)
     {
         tVel.x = -tVel.x;
     }


     if(tPos.y < -2.0f)
     {
         tVel.y = -tVel.y;
     }
     else if(tPos.y > 2.0f)
     {
         tVel.y = -tVel.y;
     }


     if(tPos.z < -2.0f)
     {
         tVel.z = -tVel.z;
     }
     else if(tPos.z > 2.0f)
     {
         tVel.z = -tVel.z;
     }


     pos[tid] = tPos;
     vel[tid] = tVel;


     vbo[tid] = make_float4(tPos.x, tPos.y, tPos.z, tPos.w);
}

1 Ответ

1 голос
/ 08 августа 2011

Если я что-то упустил, ваш код сжатия может быть упрощен следующим образом:

if (fabsf(tVel.x) > 2.0f) tVel.x = -tVel.x;
if (fabsf(tVel.y) > 2.0f) tVel.y = -tVel.y;
if (fabsf(tVel.z) > 2.0f) tVel.z = -tVel.z;

Однако, учитывая относительно небольшой объем вычислений, это изменение, вероятно, не улучшит производительность, поскольку код, по-видимому, связан с памятью (вы просматриваете данные). Может быть, в вашем приложении есть дополнительные вычисления, которые вы можете объединить с этими вычислениями для увеличения плотности вычислений?

...