سؤال

أنا أستخدم Atom_inc في إحدى نواة بلدي. أكثر أو أقل من هذا القبيل:

kernel exampleKernel(
  global volatile int * x, 
  global const int   maxX,
  global const int * buf1, 
  global const int * buf2
  )
{
  if(x < maxX)
  {
    int y = atom_inc(x);
    buf2[y] = buf1[get_global_id(0)];
  }
}

لكنه يعطيني خطأ cl_out_of_resources عندما أسميه. استبدال Atom_inc (x) مع 0 يحل هذه المشكلة ... ولكنه يجعل النواة عديمة الفائدة.

أي أفكار ما الذي يمكن أن يسبب هذا الخطأ؟

تحرير: لقد قمت بتضمين هذه الامتدادات في البرنامج:

#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable

edit2: في الواقع أقوم بتهيئة x مع:

kernel.setArgs(0,0);

هل يجب علي استخدام كائن ذاكرة في هذا المكان؟

تحيات طيبة ، فلوريان

هل كانت مفيدة؟

المحلول

آه ... حسنًا ... يبدو أن عليك استخدام كائنات الذاكرة في هذه الحالة.

كان الحل هنا هو إنشاء مخزن مؤقت One OpenCl Element ووضعه كوسيطة أولى.

سأترك هذا السؤال والإجابة هنا حتى لا يرتكب الآخرون نفس الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top