سؤال

بالنظر إلى القطعة التالية من التعليمات البرمجية، توليد نوع من القاموس التعليمات البرمجية مع CUDA باستخدام Fugust (مكتبة قالب C ++ ل CUDA):

thrust::device_vector<float> dCodes(codes->begin(), codes->end());
thrust::device_vector<int> dCounts(counts->begin(), counts->end());
thrust::device_vector<int> newCounts(counts->size());

for (int i = 0; i < dCodes.size(); i++) {
    float code = dCodes[i];
    int count = thrust::count(dCodes.begin(), dCodes.end(), code);

    newCounts[i] = dCounts[i] + count;

    //Had we already a count in one of the last runs?
    if (dCounts[i] > 0) {
        newCounts[i]--;
    }

    //Remove
    thrust::detail::normal_iterator<thrust::device_ptr<float> > newEnd = thrust::remove(dCodes.begin()+i+1, dCodes.end(), code);
    int dist = thrust::distance(dCodes.begin(), newEnd);
    dCodes.resize(dist);
    newCounts.resize(dist);
}

codes->resize(dCodes.size());
counts->resize(newCounts.size());

thrust::copy(dCodes.begin(), dCodes.end(), codes->begin());
thrust::copy(newCounts.begin(), newCounts.end(), counts->begin());

المشكلة هي أنه لاحظت نسخا متعددة من 4 بايت، باستخدام Profiler Cuda Visual. المنظمة البحرية الدولية هذا يتم إنشاؤها بواسطة

  1. حلقة العداد أنا
  2. برمز تعويم, int عد و قضاء
  3. كل وصول إلى أنا والمتغير المذكورة أعلاه

يبدو أن هذا يبطئ كل شيء (نسخ متتابع من 4 بايت ليس متعة ...).

لذلك، كيف أقول التوجه، يجب معالجة هذه المتغيرات على الجهاز؟ أم أنها بالفعل؟

باستخدام الدفع :: يبدو Device_ptr غير كاف بالنسبة لي، لأنني لست متأكدا مما إذا كانت الحلقة حول تشغيلها على المضيف أو على الجهاز (والذي قد يكون أيضا سبب آخر للإبطاط).

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

المحلول

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

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

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