c++ - Behavior of reintepret_cast of CUDA pointers? -
निम्न होस्ट फ़ंक्शन को ध्यान में रखते हुए:
uint64_t * SomeDevPtr = ... / * जहां SomeDevPtr एक पॉइंटर है जिसे cudaMalloc () द्वारा आवंटित कुछ डिवाइस मेमोरी एड्रेस पर इंगित किया गया है; * / Uint32_t * SomeDevIntPtr = reintepret_cast & lt; uint32_t * & gt; (SomeDevPtr);
फ़ंक्शन के कारण, cudaMalloc
स्वचालित रूप से कुछ अलगाव आवश्यकताओं को पूरा करेगा (मुझे लगता है कि यह कुछ 128 बाइट मेमोरी सीमा के साथ गठबंधन है), इसलिए मुझे लगता है कि दोनों और
SomeDevPtr
सटीक भौतिक स्मृति पते पर शुरू होना चाहिए, क्या मैं इस पर सही हूं?
मैं बस इसके बारे में सुनिश्चित करना चाहता हूं कि जब मैंने लिखा कुछ फ़ंक्शंस इस पर निर्भर हैं।
ए reinterpret_cast
एक सूचक को सूचक में (अर्थात् नहीं) एक सूचक की अंतर्निहित संख्यात्मक मान (बिट पैटर्न प्रस्तुति) को बदलना चाहिए।
इसलिए जो भी संरेखण परिस्थितियों का अस्तित्व इस तरह के कलाकारों से प्रभावित नहीं होगा।
यह निश्चित रूप से संभव है, एक प्रकार के अनुरूप निर्देशित सूचक को एक प्रकार के रूप में डालना, जो अब उचित संरेखण नहीं है। उदाहरण के लिए, एक उचित संरेखित float
सूचक जो एक समान-विभाज्य-बाय -4 float
ऑफसेट (इंडेक्स) पर नहीं है, को ठीक से float4 < / कोड> सूचक CUDA डिवाइस उपयोग के लिए कुछ CUDA पॉइंटर्स को स्वाभाविक रूप से गठबंधन की आवश्यकता है।
आपको भी रूचि हो सकती है।
Comments
Post a Comment