मुझे ठीक-ट्यूनिंग कैश-सचेत डेटा संरचनाओं में दिलचस्पी है (उदाहरण के लिए Michael Spiegel's dissertation या हर्ली एट अल के hopscotch hashing में लॉक-फ्री स्किप पेड़) के साथ-साथ false sharing को रोकने में भी देखें। समवर्ती सरणी प्रसंस्करण के दौरान। मुझे पहले से ही पता है कि "sun.arch.data.model" संपत्ति के माध्यम से JVM पॉइंटर आकार को कैसे ढूंढें, लेकिन मैं L1 कैश में कैश लाइनों के आकार को निर्धारित करने का कोई तरीका नहीं ढूंढ पाया।जावा प्रक्रिया के भीतर से मुझे एल 1 कैश लाइनों का आकार कैसे मिल सकता है?
ध्यान दें कि यह जानकारी महत्वपूर्ण नहीं है, क्योंकि मैं केवल एल 1 लाइन आकार के लिए रूढ़िवादी अनुमानों का उपयोग करना जारी रख सकता हूं (64 बाइट्स जब ठीक-ट्यूनिंग कैश-सचेत डेटा संरचनाएं, या झूठी साझाकरण को रोकने के दौरान 256 बाइट्स); हालांकि अगर एल 1 कैश गुणों को हासिल करना आसान है तो मैं इसका उपयोग भी कर सकता हूं।
मुझे लगता है कि यह (बहुत रोचक, मैं भी रोमांचक कहूंगा) कार्य को लागू करने के लिए बहुत अधिक लागत होगी। मैं यहां आलसी चीज करूंगा: सीपीयू मॉडल के लिए हार्डकोड कैश आकार, और यह निर्धारित करें - क्योंकि यह आसान हो सकता है। हालांकि, यह गलत हो सकता है यदि JVM किसी प्रकार के वीएम के अंदर चलाया जाता है जो वास्तविक CPU मॉडल को छुपाता है, जबकि आपका समाधान उस परिदृश्य के लिए सही आकार का उपयोग करेगा ... – ppeterka
रेखा का आकार रेखा का आकार है; यह किस अर्थ में 64 ** और ** 256 है? –
@OliCharlesworth यदि मुझे सटीक रेखा आकार नहीं पता है तो मैं जो कुछ हासिल करने की कोशिश कर रहा हूं उसके आधार पर अलग-अलग अनुमानों का उपयोग करता हूं, उदाहरण के लिए यदि मैं कैश-सचेत डेटा संरचना को ठीक-ठीक कर रहा हूं तो मैं 64 बाइट्स के निचले अनुमान का उपयोग करूंगा क्योंकि इस प्रकार डेटा संरचना अभी भी अच्छी तरह से प्रदर्शन करेगी यदि वास्तविक रेखा का आकार 64 बाइट्स से बड़ा है, और यदि मैं हूं झूठी साझाकरण को रोकने के बाद मैं 256 बाइट्स के उच्च अनुमान का उपयोग करूंगा क्योंकि वास्तविक लाइन आकार 256 बाइट से कम होने पर यह अभी भी अच्छा प्रदर्शन करेगा। –