2016-04-21 5 views
7

मेरे पास अध्ययन के लिए code निम्नलिखित है।अपरापी डेटा प्रकार

मेरी गणना फ़ंक्शन अपारपी पर चलने पर अप्रत्याशित परिणाम उत्पन्न करती है।

क्या मेरे कोड या अपारपी के साथ कोई समस्या है?

परिणाम हैं;

Result  Num   Expected 
2026982348 406816880 40681688012 
2026982516 406816881 40681688180 
2026982594 406816882 40681688258 
2026982662 406816883 40681688326 
2026982830 406816884 40681688494 
2026982898 406816885 40681688562 
2026982966 406816886 40681688630 
2026983044 406816887 40681688708 
2026983212 406816888 40681688876 
2026983280 406816889 40681688944 
2026983338 406816890 40681689002 
2026983506 406816891 40681689170 
2026983584 406816892 40681689248 
2026983652 406816893 40681689316 
2026983820 406816894 40681689484 
2026983888 406816895 40681689552 
2026983956 406816896 40681689620 
2026984134 406816897 40681689798 
2026984202 406816898 40681689866 
2026984270 406816899 40681689934 

संपादित करें: अगर मैं executionMode JTP या CPU निर्धारित करते हैं, मैं सच परिणाम (परिणाम == की उम्मीद है), लेकिन GPU मोड पर वहाँ एक समस्या है। मैं विंडोज़ 10 के साथ देर से 2013 मैकबुक समर्थक रेटिना का उपयोग कर रहा हूं।

संपादित 2: मेरी गणना विधि की वापसी रेखा समस्या का कारण बनती है। अगर मैं Long.MAX_VALUE लौटाता हूं, तो यह काम करता है। लेकिन (long) tc * 100 (या ((long) tc) * 100) दे रही है नहीं (जैसे। +४०६८१६८८९००)

+1

डाउनवॉटिंग क्यों? जाहिर है एक समस्या है ... – Hyperion

उत्तर

2

मुझे लगता है कि आप अपने कोड Aparapi Java Kernel Guidelines के खिलाफ जाँच, expecially को अन्य प्रतिबंध और ध्यान दे साइड इफेक्ट्स वर्गों के खबरदार समीक्षा करनी चाहिए।

अपना कोड जितना आसान हो सके उतना आसान रखना याद रखें।

calculate विधि में अपने कोड को देखते हुए, आप मॉड्यूलस (%) ऑपरेटर का विस्तृत उपयोग करते हैं। मैं सुझाव दूंगा कि आप इस ऑपरेटर के साथ कुछ समस्याएं हैं या नहीं, यह जानने के लिए कि आप जेटीपी मोड में जो भी प्राप्त करते हैं और जीपीयू मोड में क्या प्राप्त करते हैं, उसकी तुलना करने में सक्षम होने के लिए प्रत्येक गणना को लॉग इन करने के लिए।

संपादित करें: अपने कैलकुलेट प्रणाली में आप पूर्णांक चर का उपयोग मान, जो 2^31-1, अर्थात् 2147483647 रूप Integer.MAX_VALUE रूप में जाना जाता है जब तक संख्या पकड़ सकता है धारण करने के लिए। यदि आप int value=2147483647; value++; निष्पादित करते हैं तो आप परिणामस्वरूप प्राप्त करेंगे -2147483648 जिसे Integer.MIN_VALUE के नाम से जाना जाता है।

आप वैकल्पिक रूप से कम शुरूआती संख्याओं के साथ अपने प्रोग्राम को आजमा सकते हैं या अपनी परिवर्तनीय घोषणाओं को लंबे समय तक बदल सकते हैं, जो Long.MAX_VALUE, अर्थात् 2^63-1 हो सकता है।

लंबे और int मूल्य दोनों Aparapi द्वारा समर्थित हैं।

+0

यदि आप जेटीपी या सीपीयू मोड में कोड चलाते हैं, तो आप देख सकते हैं कि मुझे सही आउटपुट मिल रहा है। दूसरी ओर, मुझे गुणा के साथ समस्या है। उदाहरण के लिए। मेरे पास संख्या 406816889 है और मुझे 4068168894 मिल जाएगा यदि मैं संख्या * 10 + 4 करता हूं, लेकिन num * 100 + 44 GPU मोड पर 40681688944 नहीं देगा। शायद एक अतिप्रवाह है? – Hyperion

+0

आपके संपादन के लिए, मेरी संख्या अधिकतम 9 अंक है, इसलिए यह समस्या नहीं होनी चाहिए। लेकिन मेरे परिणाम 11 अंक हैं और मैं उन्हें लंबे समय तक रख रहा हूं:/ – Hyperion

+0

क्या आपने लॉग या चर के माध्यम से कोड को डीबग करने का प्रयास किया था? – abarisone

1

हाय मैं नए Aparapi.com और नए जिथब भंडार पर प्राथमिक रखरखाव कर रहा हूं। हम नए प्रोजेक्ट होम पर अधिक सक्रिय हैं और यहां तक ​​कि मेवेन सेंटर में लगभग एक दर्जन रिलीज भी हैं। आप नए अपरापी पर जाने पर विचार करना चाहेंगे।

इसके साथ में मैंने कहा कि मैं नए अपरापी में एक डेवलपर हूं और इस परीक्षण मामले में भाग गया और पुष्टि की कि यह एक वैध अपारपी बग है। मैं देखता हूं कि बग का कारण क्या है और उम्मीद है कि अगली रिलीज से पहले आपके लिए एक बग फिक्स हो सकता है। issue has been reported here यदि आप इसे ट्रैक करना चाहते हैं। नई अपारपी परियोजना के लिए इसे याद रखें ताकि पुराने अपारपी परियोजना में बग फिक्स दिखाई देने की संभावना न हो।

+0

Thx बहुत कुछ! मैं इस मुद्दे पर कुछ पोस्ट करता हूं। – Hyperion

संबंधित मुद्दे