मैंने पावरपीसी पर एक अच्छी मेमोरी रणनीति की खोज में कई प्रतिलिपि कार्य लिखे हैं। कैश संकेतों (डीसीबी *) के साथ Altivec या fp रजिस्टरों का उपयोग बड़े डेटा के लिए एक साधारण बाइट कॉपी लूप पर प्रदर्शन को दोगुना करता है। शुरुआत में उस से प्रसन्नता हुई, मैंने यह देखने के लिए एक नियमित memcpy में फेंक दिया कि यह कैसे तुलना की गई ... मेरे सर्वोत्तम से 10x तेज! मुझे memcpy को फिर से लिखने का कोई इरादा नहीं है, लेकिन मुझे इससे सीखने की उम्मीद है और कई सरल छवि फ़िल्टरों को तेज़ करने की उम्मीद है जो अपना अधिकांश समय स्मृति में और स्मृति से आगे बढ़ते हैं।ऐप्पल की पावरपीसी इतनी तेजी से क्या बनाता है?
शार्क विश्लेषण से पता चलता है कि उनके आंतरिक पाश डीसीबीटी का उपयोग प्रीफेच करने के लिए करता है, जिसमें 4 वेक्टर पढ़ते हैं, फिर 4 वेक्टर लिखते हैं। प्रति पुनरावृत्ति 64 बाइट्स तक पहुंचने के लिए मेरे सर्वोत्तम कार्य को बदलने के बाद, memcpy का प्रदर्शन लाभ अभी भी शर्मनाक है। मैं बैंडविड्थ को मुक्त करने के लिए डीसीबीजे का उपयोग कर रहा हूं, ऐप्पल कुछ भी नहीं उपयोग करता है, लेकिन दोनों कोड स्टोर पर संकोच करते हैं।
prefetch dcbt future dcbt distant future load stuff lvx image lvx image + 16 lvx image + 32 lvx image + 48 image += 64 prepare to store dcbz filtered dcbz filtered + 32 store stuff stvxl filtered stvxl filtered + 16 stvxl filtered + 32 stvxl filtered + 48 filtered += 64 repeat
क्या किसी के पास कुछ विचार हैं कि क्यों इसी तरह के कोड में नाटकीय प्रदर्शन अंतर है? मुझे असली छवि फ़िल्टरों को मारना अच्छा लगेगा जो भी गुप्त सॉस memcpy उपयोग कर रहा है!
अतिरिक्त जानकारी: सभी डेटा वेक्टर गठबंधन है। मैं छवि की फ़िल्टर की गई प्रतियां बना रहा हूं, मूल को प्रतिस्थापित नहीं कर रहा हूं। कोड पावरपीसी जी 4, जी 5, और सेल पीपीयू पर चलता है। सेल एसपीयू संस्करण पहले से ही बहुत तेज है।
कैशग्रिंड बिल्कुल पीपीसी/डार्विन पर काम नहीं करता है। –
@ निक, क्या आप वाकई हैं? http://en.wikipedia.org/wiki/Valgrind "संस्करण 3.4.0 के रूप में, वालग्रिंड x86, x86-64 और PowerPC पर लिनक्स का समर्थन करता है" –
@Andreas: यह * linux * पर काम करता है, लेकिन निश्चित रूप से डार्विन नहीं। केवल समर्थित (और मुश्किल) डार्विन x86 है। –