2010-01-15 16 views
6

मुझे 2 (अधिकांश बार) स्पैर मैट्रिक्स गुणा करना है। वे मैट्रिक्स बहुत कम हैं (लगभग 10k * 10k) और मेरे पास दो ज़ीऑन क्वाड कोर हैं और इस नौकरी के लिए सिर्फ एक धागा है?जावा मैट्रिक्स-गुणा (फास्ट)

मल्टी-थ्रेड मोलिटीप्लिकेशन के लिए कोई तेज़ लाइब्रेरी है? कोई अन्य सलाह?

उत्तर

4

मैं सीईआरएन से Colt का प्रयास करूंगा। यह अब थोड़ा पुराना है, लेकिन आप जो भी कोशिश कर रहे हैं उसके लिए अभी भी उत्कृष्ट पुस्तकालय प्रदान करता है।

समांतर प्रसंस्करण के लिए, नए Parallel Colt को आजमाएं।

+0

बिल्कुल जो मैं पोस्ट करने वाला था। – BobMcGee

+0

क्या आप वाकई मैट्रिक्स 10k * 10k बना सकते हैं? – BigG

+0

निश्चित रूप से, यह केवल 800 एमबी (डबल के लिए) है। सुनिश्चित करें कि आप 64-बिट JVM का उपयोग कर रहे हैं। –

1

इसे जीपीयू पर करें? http://www.nvidia.com/object/io_1254288141829.html

+0

मेरे पास 8 कोर 2,6GHz है और मैं उनमें से केवल – BigG

+0

http://jscience.org/ –

+1

का उपयोग करता हूं यदि आप एकल-परिशुद्धता गुणा कर रहे हैं, तो एक अच्छा ग्राफिक्स कार्ड पर चल रहे एक GPGPU कार्यान्वयन * अभी भी * 8 कोर हराया। जीपीजीपीयू सीपीयू की तुलना में 10x से 100x तेज हो सकता है, क्योंकि इसमें बहुत से स्ट्रीम प्रोसेसर हैं (आधुनिक चिप्स में सैकड़ों)। – BobMcGee

-1

हां, बहु-थ्रेडेड मैट्रिक्स गुणा के लिए पुस्तकालय हैं; Google को आपका मित्र बनने दो। यद्यपि यदि आपके पास केवल एक थ्रेड मल्टीथ्रेडिंग आवश्यक नहीं हो सकता है। 8-कोर मशीन पर आपके पास केवल एक धागा क्यों है? विचार करने के लिए एक लाइब्रेरी जावा ब्लैस इंटरफ़ेस है।

आप निश्चित रूप से सही दृष्टिकोण ले रहे हैं, इसे स्वयं लिखने की कोशिश करने के बजाय लाइब्रेरी की तलाश में हैं।

+0

यह भ्रमित है, लेकिन मेरा मानना ​​है कि ओपी यह कहने की कोशिश कर रहा है कि उसने पहले से ही एल्गोरिदम को बहुप्रचारित नहीं किया है, इसलिए एलए का बहुआयामी कार्यान्वयन सहायक होगा। (?) – Chinasaur

2

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

कोल्ट और समानांतर कोल्ट बहुत धीमी हैं। तो जामा है। ऐसी चीजों के लिए जावा में सबसे अच्छी लाइब्रेरी जेबीएलएस है।

0

क्या आपने Java Matrix Benchmark पर देखा था? यह कई सामान्य जावा रैखिक बीजगणित पैकेजों के बीच प्रदर्शन की तुलना करता है - जिसमें एक जोड़े शामिल है जो देशी कोड का उपयोग/कॉल करता है। मैट्रिक्स गुणा निश्चित रूप से परीक्षण/तुलना की गई चीज़ों में से एक है और नवीनतम बेंचमार्क निष्पादन वास्तव में एक दोहरी क्वाड-कोर इंटेल ज़ीऑन मशीन किया गया था।

आप क्या नहीं देखते हैं कि ये पुस्तकालय स्पैर मैट्रिस का उपयोग करके कैसे प्रदर्शन करते हैं (या यदि वे इसका समर्थन करते हैं)।

शुद्ध जावा कार्यान्वयन के साथ बहुत अच्छा प्रदर्शन प्राप्त करना संभव है, लेकिन यदि आप मैट्रिक्स के साथ सबसे अच्छा प्रदर्शन करना चाहते हैं तो आपको "JVM छोड़ना" होगा।

+0

अब तक ध्यान नहीं दिया गया कि यह प्रश्न 5 साल पुराना था ... – apete

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