تحتوي أحدث برامج تشغيل وحدات الرسوميات على جميع العناصر الضرورية لبرنامج كودا. يعمل برنامج كودا مع جميع وحدات معالجة الرسومات من إنتاج شركة إنفيديا من سلسلة G8X فصاعدا، بما في ذلك جي-فورس، كوادرو وسلسلة تسلا. يوفر برنامج كودا للمطورين الوصول إلى مجموعة الأوامر الأصلية والذاكرة لعناصر الحساب المتوازي في وحدات معالجة الرسوميات الداعمة لكودا. باستخدام برنامج كودا، تصبح أحدث وحدات معالجة الرسومات من إنفيديا مفتوحة بفعالية وحدة المعالجة المركزية. لكن على عكس وحدات المعالجة المركزية، فإن وحدات معالجة الرسومات لها معمارية متوازية "متعددة النوى"، ولكل نواة القدرة على إجراء الآلاف من العمليات في وقت واحد. وإذا كان البرنامج مناسب لمثل هذا النوع من العمليات، فيمكن لوحدة معالجة الرسوميات عندها تقديم فوائد كبيرة فيما يتعلق بالأداء.
كودا له العديد من المزايا المتفوقة على وحدات معالجة الرسومات التقليدية باستخدام واجهات برمجة التطبيقات.
جدول يوضح أنواع معالجات الرسوميات التي تدعم كودا.
cudaArray* cu_array;
texture<float, 2> tex;
// Allocate array
cudaChannelFormatDesc description = cudaCreateChannelDesc<float>();
cudaMallocArray(&cu_array, &description, width, height);
// Copy image data to array
cudaMemcpy(cu_array, image, width*height*sizeof(float), cudaMemcpyHostToDevice);
// Bind the array to the texture
cudaBindTextureToArray(tex, cu_array);
// Run kernel
dim3 blockDim(16, 16, 1);
dim3 gridDim(width / blockDim.x, height / blockDim.y, 1);
kernel<<<gridDim, blockDim, 0>>>(d_odata, width, height);
cudaUnbindTexture(tex);
__global__ void kernel(float* odata, int height, int width)
{
unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;
unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;
float c = tex2D(tex, x, y);
odata[y*width+x] = c;
}