2010-09-11 10 views
14

मैं एक सीपीयू-भारी संख्यात्मक गणना एप पर काम कर रहा हूं। कई विवरणों के बिना, यह एक कम्प्यूटेशनल गणित शोध परियोजना है जिसमें बड़े पूर्णांक x के लिए एक निश्चित फ़ंक्शन f (x) की गणना करना शामिल है।सबसे तेज़ 128 बिट पूर्णांक लाइब्रेरी

अभी 64% बिट्स का उपयोग करके x64 मोड में सी ++ में सबकुछ लागू किया गया है। यह मुझे x < 2^64 ~ 1.8 * 10^19 तक सीमित करता है। मैं आगे बढ़ना चाहता हूं, ऐसा करने के लिए, मुझे एक पुस्तकालय की आवश्यकता है जो 128-बिट अंकगणित करता है। और यह बहुत तेज होना है। विशेष रूप से, पूर्णांक विभाजन तेजी से होना चाहिए। अन्यथा मैं थैंक्सगिविंग तक परिणामों की प्रतीक्षा कर रहा हूं। और मैं पहिया को फिर से नहीं लेना चाहता था।

मुझे विकिपीडिया पर ~ 20 बड़ी पूर्णांक पुस्तकालयों की एक सूची मिली, लेकिन उनमें से अधिकतर मनमाने ढंग से सटीक संख्याओं के लिए लक्षित हैं, जो मेरे कार्य के लिए अधिक है, और मुझे उससे जुड़ी अतिरिक्त लागत की आवश्यकता नहीं है।

क्या किसी को पता है कि लाइब्रेरी 128 बिट पूर्णांक पर सबसे तेज़ काम कर सकती है?

+3

http://www.x86-64.org/pipermail/discuss/2005-August/006412.html – Anycorn

+0

यह दिलचस्प है, उसे नहीं पता था। मैं फिलहाल विंडोज़ में काम कर रहा हूं, लेकिन मैं यूनिक्स में जीसीसी के साथ कोशिश करूंगा। मेरा कोड पोर्टेबल पर्याप्त होना चाहिए। – user434507

+0

आप सिग्विन/जीसीसी या मिनजीडब्ल्यू का उपयोग कर सकते हैं। – alternative

उत्तर

16

आपने अपने प्लेटफ़ॉर्म/पोर्टेबिलिटी आवश्यकताओं का उल्लेख नहीं किया है। यदि आप gcc या clang का उपयोग 64 बिट प्लेटफार्मों पर उपयोग करने के इच्छुक हैं, तो उनके पास एक अंतर्निहित 128 बिट प्रकार हैं जो __uint128_t और __int128_t पर आते हैं। शायद अन्य प्लेटफार्मों में समान प्रकार के एक्सटेंशन हैं।

किसी भी मामले में यह gcc स्रोतों कि चौड़ाई N की दो पूर्णांकों असेंबल चौड़ाई 2N में से एक पूर्णांक के संश्लेषण के लिए आप संबद्ध सामान्य कोड को खोजने के लिए संभव हो जाना चाहिए। यह संभवतः उस उद्देश्य के लिए एक स्टैंडअलोन लाइब्रेरी बनाने के लिए एक अच्छा प्रारंभिक बिंदु होगा।

1

यह सभी के लिए नहीं हो सकता है, लेकिन मैं जो करता हूं वह स्रोत कोड के साथ उच्चतम प्रदर्शन मनमानी पूर्णांक लाइब्रेरी चुनता है और अन्यथा नौकरी के लिए उपयुक्त होता है, और इसे निश्चित पूर्णांक आकारों के लिए हैक करता है। कुछ परिवर्तनीय "nbits" को 128 हार्ड-कोडित में बदलें। यह शायद रनटाइम पर स्मृति आवंटित करता है, तब तक बाइट्स की संख्या को नहीं जानता। डेटा को पढ़ने के साथ हर बार एक पॉइंटर डीरफ्रेंसिंग को सहेजने, डेटा इन-प्लेस के साथ स्ट्रक्चर का उपयोग करने के लिए इसे बदलें। कुछ महत्वपूर्ण लूप हाथ से अनलॉक करें। हार्ड-कोड कुछ और जो महत्वपूर्ण हो सकता है। फिर कंपाइलर प्रोबबी को चीजों को अनुकूलित करने में आसान समय होगा। बेशक, इनमें से अधिकतर फैंसी सिमड का उपयोग करके असेंबली होगी, इस हफ्ते प्रौद्योगिकी जो भी उपयोग में है।

यह मजेदार होगा! लेकिन फिर, एक प्रोग्रामर के रूप में मैंने मशीन कोड और बहुत कम स्तर की सामग्री के साथ शुरुआत की।

लेकिन उन लोगों के लिए जो पागल नहीं हैं, शायद उपलब्ध पुस्तकालयों में से एक टेम्पलेट का उपयोग करता है या कुछ आकार के लिए कोड कस्टम बनाने के कुछ साधन हैं। और, कुछ कंपाइलरों में "लंबा लंबा" पूर्णांक प्रकार होता है जो उपयुक्त हो सकता है।

5

ttmath लाइब्रेरी जो आप चाहते हैं वह करता है।

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