مرجع
آخر الزيارات

كودا

350 كلمة•0 مشاهدة•🗒️ منذ 8 ساعات
باختصار: CUDA تلفظ كودا هي اختصار لعبارة Compute Unified Device Architecture هي معمارية للحوسبة المتوازية وضعتها شركة إنفيديا. في هذه المقالة 7 أقسام: «// Copy image data to array»، «cudaUnbindTexture(tex);» و«مزايا» وغيرها.
المحتويات
  1. // Copy image data to array
  2. cudaUnbindTexture(tex);
  3. مزايا
  4. مثال
  5. // Allocate array
  6. dim3 blockDim(16, 16, 1);
  7. وحدات معالجة الرسوميات المدعومة

في البداية، CUDA تلفظ كودا هي اختصار لعبارة Compute Unified Device Architecture هي معمارية للحوسبة المتوازية وضعتها شركة إنفيديا. كودا هو محرك الحساب في وحدة معالجة الرسومات التي يستطيع المبرمجون التحكم بها باستخدام لغات البرمجة القياسية. يستعمل المبرمجون عادة 'سي لكودا' ('C for CUDA') لبرمجة خوارزميات ليتم تنفيذها على وحدات معالجة الرسوميات. تدعم معمارية كودا مجموعة واسعة من واجهات الحساب بما في ذلك أوبن سي أل، دايركت كومبيوت كما يوجد مغلفات تنتجها أطراف أخرى تدعم بايثون، فورتران، جافا وماتلاب. وفيما يلي تفاصيل أوسع عن ذلك.

وفي السياق ذاته، تحتوي أحدث برامج تشغيل وحدات الرسوميات على جميع العناصر الضرورية لبرنامج كودا. يعمل برنامج كودا مع جميع وحدات معالجة الرسومات من إنتاج شركة إنفيديا من سلسلة G8X فصاعدا، بما في ذلك جي-فورس، كوادرو وسلسلة تسلا. يوفر برنامج كودا للمطورين الوصول إلى مجموعة الأوامر الأصلية والذاكرة لعناصر الحساب المتوازي في وحدات معالجة الرسوميات الداعمة لكودا. باستخدام برنامج كودا، تصبح أحدث وحدات معالجة الرسومات من إنفيديا مفتوحة بفعالية وحدة المعالجة المركزية. لكن على عكس وحدات المعالجة المركزية، فإن وحدات معالجة الرسومات لها معمارية متوازية "متعددة النوى"، ولكل نواة القدرة على إجراء الآلاف من العمليات في وقت واحد. وإذا كان البرنامج مناسب لمثل هذا النوع من العمليات، فيمكن لوحدة معالجة الرسوميات عندها تقديم فوائد كبيرة فيما يتعلق بالأداء.

// Copy image data to array

  • // Bind the array to the texture
  • cudaBindTextureToArray(tex, cu_array);
  • // Run kernel

ومن ناحية أخرى، cudaMemcpy(cu_array, image, width*height*sizeof(float), cudaMemcpyHostToDevice);

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;
  • }
  • مراجع
  • وصلات خارجية

مزايا

  • قراءة مبعثرة للذاكرة.
  • الذاكرة المشتركة. قراءة وكتابة أسرع إلى وحدة معالجة الرسوميات
  • الدعم الكامل للعمليات سواء على الأعداد الصحيحة أو على البتات.

ومن ناحية أخرى، كودا له الكثير من المزايا المتفوقة على وحدات معالجة الرسومات التقليدية باستخدام واجهات برمجة التطبيقات.

مثال

  • هذا مثال في لغة C++ يحمل صورة في مصفوفة في وحدة المعالجة المركزية:
  • cudaArray* cu_array;
  • texture tex;

// Allocate array

cudaChannelFormatDesc description = cudaCreateChannelDesc;

cudaMallocArray(&cu_array, &description, width, height);

dim3 blockDim(16, 16, 1);

kernel<>(d_odata, width, height);

dim3 gridDim(width / blockDim.x, height / blockDim.y, 1);

وحدات معالجة الرسوميات المدعومة

جدول يوضح أنواع معالجات الرسوميات التي تدعم كودا.

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.