ऐसा लगता है जब एक नया थ्रस्ट वेक्टर बनाने सभी तत्वों को डिफ़ॉल्ट द्वारा 0 कर रहे हैं - मैं सिर्फ पुष्टि करने के लिए कि हमेशा ऐसा हो जाएगा चाहते हैं।कैसे जोर :: device_vector में तत्वों की डिफ़ॉल्ट निर्माण से बचने के लिए?
यदि हां, तो वहाँ भी बाईपास निर्माता के लिए एक रास्ता है अतिरिक्त गति के लिए इस व्यवहार के लिए जिम्मेदार है (क्योंकि कुछ वैक्टर के लिए मैं एक प्रारंभिक मूल्य, जैसे के लिए उन्हें जरूरत नहीं है अगर उनकी कच्चे संकेत किया जा रहा है उत्पादन के रूप में CUBLAS को पारित)?
8
A
उत्तर
7
thrust::device_vector
तत्वों यह सिर्फ std::vector
की तरह इसकी आपूर्ति संभाजक का उपयोग कर, शामिल निर्माण करती है। जब वेक्टर एक तत्व बनाने के लिए कहता है तो आवंटक क्या करता है इसे नियंत्रित करना संभव है।
वेक्टर तत्व के डिफ़ॉल्ट-प्रारंभ से बचने के लिए एक कस्टम संभाजक का उपयोग करें:
// uninitialized_allocator is an allocator which
// derives from device_allocator and which has a
// no-op construct member function
template<typename T>
struct uninitialized_allocator
: thrust::device_malloc_allocator<T>
{
// note that construct is annotated as
// a __host__ __device__ function
__host__ __device__
void construct(T *p)
{
// no-op
}
};
// to make a device_vector which does not initialize its elements,
// use uninitialized_allocator as the 2nd template parameter
typedef thrust::device_vector<float, uninitialized_allocator<float> > uninitialized_vector;
आप अभी भी एक कर्नेल लांच की लागत का कारण बन जाएगा uninitialized_allocator::construct
आह्वान करने के लिए, लेकिन वह गिरी नो-सेशन जो संन्यास ले लेंगे हो जाएगा जल्दी जल्दी। आप वास्तव में रुचि रखते हैं कि सरणी भरने के लिए आवश्यक मेमोरी बैंडविड्थ से परहेज करना है, जो यह समाधान करता है।
वहाँ एक पूरा उदाहरण कोड here है।
ध्यान दें कि इस तकनीक का 1.7 या बेहतर थ्रस्ट की आवश्यकता है।
संबंधित मुद्दे
- 1. मानक कंटेनर में तत्वों के डिफ़ॉल्ट निर्माण से बचने
- 2. जोर से :: device_vector कच्चे सूचक और वापस?
- 3. सीकेएडिटर और तत्वों से बचने
- 4. अनावश्यक सहयोग निर्माण से बचने के लिए फैक्टरीगर्ल में 'डिफ़ॉल्ट' विशेषता का उपयोग करना
- 5. जोर
- 6. सूची तत्वों (वैश्विक काम से बचने)
- 7. वेग में # से बचने के लिए कैसे
- 8. जोर :: स्थिर स्मृति में डिवाइस_वेक्टर
- 9. मेमोरी लीक से बचने के लिए जावास्क्रिप्ट में डीओएम तत्वों का निपटान कैसे करें
- 10. अस्तित्व antipattern, कैसे से बचने के लिए
- 11. डबल कोट से बचने के लिए कैसे?
- 12. कैसे से बचने के लिए अपरिभाषित ऑफसेट
- 13. मर्ज से बचने के लिए कैसे TortoiseGit
- 14. Jasper में शून्य मान से बचने के लिए कैसे रिपोर्ट
- 15. से बचने के लिए $ डॉलर साइन CMake
- 16. एंड्रॉयड में ProgressDialog से बचने के लिए कैसे
- 17. रूबी प्रतीक में डैश से बचने के लिए कैसे?
- 18. sqlalchemy में कैशिंग से बचने के लिए कैसे?
- 19. जोर पुस्तकालय का उपयोग कर push_back
- 20. कैसे से बचने के लिए */* आशय फिल्टर में माइम प्रकार
- 21. Django टेम्पलेट्स में ऑटो से बचने के लिए कैसे?
- 22. Magento में mysql से बचने के लिए कैसे?
- 23. knitr में बैकटिक्स से बचने के लिए कैसे?
- 24. कैसे PHP में गतिशील गुण से बचने के लिए
- 25. फोर्स रेजर यूआरएल से बचने के लिए
- 26. सी ++ अज्ञात ऑब्जेक्ट्स से बचने के लिए कैसे करें
- 27. रेजे की स्थिति से बचने के लिए Django 1.6 लेनदेन
- 28. से बचने के लिए और एक यूआरएल
- 29. सीआरटीपी गतिशील बहुरूपता से बचने के लिए
- 30. मैपिंग: कुंजी से बचने के लिए nohlsearch
बहुत अच्छा। पहले एसएलएल के लिए लिखित डीबग आवंटन ओवरलोड होने के बावजूद, मैं अंतिम निर्माण कॉल भूल गया था। खुदाई रखना चाहिए था। +1 :) – leander
असल में - मैं उलझन में हूं। मैं 'insert' करने के लिए अपने उदाहरण जंजीरों में है कि' resize' में गलत हूँ, जो 'fill_insert', जो' फिर uninitialized_fill_n' में समाप्त होता है के लिए बारी जंजीरों में? तो क्या आपको अभी भी नए 'स्टोरेज_ टाइप' क्षेत्र की स्थापना करते समय 'निर्माण' को अनदेखा करने के बावजूद प्रतियां मिल रही हैं? ... जाहिर है, मुझे डीबगर में इसके माध्यम से कदम उठाने की ज़रूरत है, लेकिन मैं नहीं देख रहा हूं कि डिफ़ॉल्ट/मूल्य प्रारंभिक 'x' डिफ़ॉल्ट तर्क से अंतिम' uninitialized_fill_n' कैसे टाला जा सकता है। – leander
आप सबसे हाल ही में जोर के साथ एक डिबगर में से निकलने के लिए आवश्यकता हो सकती है। यह एक जटिल प्रेषण है। –