私は単純なパーティクルシステムを作成しました。私は計算能力2.1のデバイスを持っています。カーネルを最適化するために私は何を変更できますか?cuda - カーネル最適化
変数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);
}
これは、一般性に陥ることなく答えるのが本当に難しいでしょう。 「[CUDAパートI(PDF)の最適化](http://developer.download.nvidia.com/CUDA/training/NVIDIA_GPU_Computing_Webinars_CUDA_Optimization_April-2009.pdf)」および「[CUDAパートIIの最適化(PDF)]」を参照してください。 PDF)](http://developer.download.nvidia.com/CUDA/training/NVIDIA_GPU_Computing_Webinars_Further_CUDA_Optimization.pdf)」を参照してください。その他の優れたリソースは、「超並列プロセッサのプログラミング」と「例によるCUDA」です。 – Bart