আমি এক শ্রেণীর সংখ্যাগত অপ্টিমাইজেশান সমস্যার সমাধানের জন্য জাভা অ্যাপ্লিকেশনটিতে কাজ করছি - বৃহত্তর স্তরের লিনিয়ার প্রোগ্রামিং সমস্যাগুলি আরও সুনির্দিষ্ট হতে। একটি একক সমস্যা ছোট ছোট subproblems মধ্যে বিভক্ত করা যেতে পারে যে সমান্তরাল সমাধান করতে পারে। যেহেতু সিপিইউ কোরগুলির চেয়ে বেশি সাব-প্রবলেম রয়েছে, তাই আমি একটি এক্সিকিউটর সার্ভিস ব্যবহার করি এবং প্রতিটি সাব-প্রব্লেমকে কলযোগ্য হিসাবে নির্ধারণ করি যা এক্সিকিউটর সার্ভিসে জমা দেওয়া হয়। একটি সাবপ্রব্লেম সমাধানের জন্য একটি দেশীয় গ্রন্থাগার কল করা প্রয়োজন - এই ক্ষেত্রে একটি লিনিয়ার প্রোগ্রামিং সলভার।
সমস্যা
আমি ইউনিক্সে এবং উইন্ডোজ সিস্টেমে ৪৪ টি শারীরিক কোর এবং ২৫g জি মেমরি পর্যন্ত অ্যাপ্লিকেশনটি চালাতে পারি, তবে উইন্ডোজে গণনার সময়গুলি লিনাক্সের চেয়ে বড় সমস্যার চেয়ে বড় আকারের ক্রম। উইন্ডোজ কেবলমাত্র যথেষ্ট পরিমাণে মেমরির প্রয়োজন হয় না, তবে সময়ের সাথে সাথে সিপিইউর ব্যবহার শুরুতে 25% থেকে কয়েক ঘন্টা পরে 5% এ নেমে আসে। উইন্ডোজটিতে টাস্ক ম্যানেজারের একটি স্ক্রিনশট এখানে রয়েছে:
পর্যবেক্ষণ
- সামগ্রিক সমস্যার বৃহত্তর উদাহরণগুলির সমাধানের সময়গুলি কয়েক ঘন্টা থেকে কয়েক দিনের মধ্যে থাকে এবং 32 গিগাবাইট পর্যন্ত মেমোরি (ইউনিক্সে) গ্রাস করে। সাব-প্রবলেমের জন্য সমাধানের সময়গুলি এমএস পরিসরের মধ্যে।
- আমি এই সমস্যাটি ছোট সমস্যাগুলির মুখোমুখি হই না যা সমাধান করতে কয়েক মিনিট সময় নেয়।
- লিনাক্স বাক্সের বাইরে উভয় সকেট ব্যবহার করে, অন্যদিকে উইন্ডোজ আমাকে বিআইওএস-তে স্পষ্টভাবে মেমরি ইন্টারলিভিং সক্রিয় করতে প্রয়োজন যাতে অ্যাপ্লিকেশন উভয় কোর ব্যবহার করে। আমি এটি না করুক কিনা তা সময়ের সাথে সাথে সামগ্রিক সিপিইউ ব্যবহারের অবনতির উপর কোনও প্রভাব ফেলবে না।
- আমি যখন ভিজুয়ালভিএম-এর থ্রেডগুলিতে দেখি তখন সমস্ত পুলের থ্রেড চলছে, কোনওটি অপেক্ষায় নেই অন্যথায়।
- ভিজুয়ালভিএম অনুসারে, 90% সিপিইউ সময় নেটিভ ফাংশন কলের জন্য ব্যয় হয় (একটি ছোট রৈখিক প্রোগ্রাম সমাধান করে)
- অ্যাপ্লিকেশন প্রচুর পরিমাণে বস্তু তৈরি করে এবং ডে-রেফারেন্স দেয় না বিধায় আবর্জনা সংগ্রহ কোনও সমস্যা নয়। এছাড়াও, বেশিরভাগ স্মৃতিটি অফ-হিপ বরাদ্দ করা হয়েছে বলে মনে হয়। লিনাক্সে 4 জি হিপ যথেষ্ট এবং উইন্ডোজে 8 জি সবচেয়ে বড় উদাহরণ রয়েছে।
আমি কি চেষ্টা করেছি
- সমস্ত প্রকারের জেভিএম আরগস, হাই এক্সএমএস, হাই মেটাস্পেস, ইউজনুমা পতাকা, অন্যান্য জিসি।
- বিভিন্ন জেভিএম (হটস্পট 8, 9, 10, 11)।
- বিভিন্ন লিনিয়ার প্রোগ্রামিং সলভারের বিভিন্ন নেটিভ গ্রন্থাগার (সিএলপি, এক্সপ্রেস, সিপ্লেক্স, গুরুবি)।
প্রশ্নাবলি
- দেশীয় কলগুলি ভারী ব্যবহার করে এমন একটি বৃহত মাল্টি-থ্রেড জাভা অ্যাপ্লিকেশনটির লিনাক্স এবং উইন্ডোজের মধ্যে পারফরম্যান্সের পার্থক্যটি কী চালিত করে?
- বাস্তবায়নে আমি এমন কিছু পরিবর্তন করতে পারি যা উইন্ডোজকে সহায়তা করবে উদাহরণস্বরূপ, আমি কি এমন এক এক্সিকিউটারসেবা ব্যবহার করা এড়ানো উচিত যা হাজার হাজার কলয়েবল প্রাপ্ত হয় এবং এর পরিবর্তে কী করা উচিত?
ForkJoinPool
জন্য ম্যানুয়াল শিডিউলিংয়ের চেয়ে বেশি দক্ষ।
ForkJoinPool
পরিবর্তে চেষ্টা করেছেনExecutorService
? আপনার সমস্যা সিপিইউতে আবদ্ধ হলে 25% সিপিইউর ব্যবহার সত্যিই কম।