এই সমস্যাটি নিয়ে উদ্বিগ্ন হওয়ার প্রথম বিষয়টি হ'ল কোথায় এবং কখন কোন ডেটা প্রয়োজন। এটি করতে, আমি সাধারণত সমস্যার বোকা, সিরিয়াল সংস্করণ দিয়ে শুরু করি।
X $ / একর এর বেশি মূল্যবান সমস্ত পার্সেল সন্ধান করুন যা অন্য পার্সেলের y ফিট এর মধ্যে রয়েছে যা z $ / একরের চেয়ে কম মূল্যবান।
foreach p in parcels {
if value(p) > x {
foreach q in parcels {
if (dist(p,q) <= y) and (value(q) < z) {
emit(p)
}
}
}
}
এই অ্যালগরিদমটি অনুকূলিত না হলেও এটি সমস্যার সমাধান করবে।
আমি আমার মাস্টার্স থিসিসের জন্য একই ধরণের সমস্যার সমাধান করেছি যা একটি ডেটাসেটের প্রতিটি পয়েন্টের জন্য নিকটতম পার্সেলটি পেয়েছিল। আমি সমাধান বাস্তবায়িত PostGIS , Hadoop এর
, এবং MPI । আমার থিসিসের সম্পূর্ণ সংস্করণটি এখানে রয়েছে , তবে আমি এই বিষয়টির ক্ষেত্রে প্রযোজ্য হিসাবে গুরুত্বপূর্ণ পয়েন্টগুলি সংক্ষিপ্ত করব।
এই সমস্যাটি সমাধান করার জন্য ম্যাপ্রেডিউস একটি ভাল প্ল্যাটফর্ম নয় কারণ এটি একটি পাপ gle পার্সেল প্রক্রিয়া করার জন্য সম্পূর্ণ ডেটাসেট (বা একটি সাবধানে নির্বাচিত সাবসেট) অ্যাক্সেস প্রয়োজন। মানচিত্রে মাধ্যমিক ডেটাসেটগুলি ভালভাবে পরিচালনা করে না।
এমপিআই অবশ্য এটিকে বেশ সহজেই সমাধান করতে পারে। সবচেয়ে শক্ত অংশটি কীভাবে ডেটা বিভক্ত করবেন তা নির্ধারণ করছে। এই বিভাজনটি সেখানে কতটা ডেটা আছে, আপনাকে কত পি পি রোসেসার চালাতে হবে এবং প্রসেসরের প্রতি আপনার কত স্মৃতি রয়েছে তার উপর ভিত্তি করে। সেরা স্কেলিংয়ের জন্য (এবং তাই পারফরম্যান্স) আপনার কাছে একবারে মেমরিতে (আপনার সমস্ত কম্পিউটার জুড়ে) পার্সেল ডেটাসেটের একাধিক কপি থাকা দরকার।
এটি কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য, আমি ধরে নেব যে আপনার প্রতিটি 50 টি কম্পিউটারে 8 টি প্রসেসর রয়েছে। তারপরে আমি প্রতিটি কম্পিউটারকে পার্সেলগুলির 1/50 টি পরীক্ষা করার জন্য দায়িত্ব অর্পণ করব। এই চেকিংটি কম্পিউটারে 8 টি প্রক্রিয়া দ্বারা চালিত হবে, যার প্রত্যেকটিতে পার্সেলের একই 1/50 অংশ এবং পার্সেল ডেটাসেটের 1/8 অংশের একটি অনুলিপি রয়েছে। দয়া করে নোট করুন যে গোষ্ঠীগুলি একটি একক মেশিনে সীমাবদ্ধ নয়, তবে তারা মেশিনের সীমানা অতিক্রম করতে পারে।
প্রক্রিয়াটি পার্সেলগুলির 1/50 তম সেট থেকে পি জন্য পার্সেল এবং 1/8 তম সেট থেকে Q এর জন্য পার্সেলগুলি পাবে, অ্যালগরিদম কার্যকর করবে। অভ্যন্তরীণ লুপের পরে, পার্সেলটি নির্গমন করা উচিত কিনা তা নির্ধারণ করতে একই কম্পিউটারে সমস্ত প্রক্রিয়া একসাথে কথা বলবে।
আমি আমার সমস্যার জন্য এটির সাথে একটি অনুরূপ অ্যালগরিদম প্রয়োগ করেছি। আপনি এখানে উত্স খুঁজে পেতে পারেন ।
এমনকি এই ধরণের নন-অপ্টিমাইজড অ্যালগরিদম দিয়েও আমি প্রভাবশালী ফলাফলগুলি অর্জন করতে সক্ষম হয়েছি যা প্রোগ্রামার সময়ের জন্য অত্যন্ত অনুকূল ছিল (যার অর্থ আমি একটি বোকা সাধারণ অ্যালগরিদম লিখতে পারি এবং গণনাটি এখনও যথেষ্ট দ্রুত হবে)। অপ্টিমাইজ করার জন্য পরবর্তী স্পটটি (যদি আপনার সত্যিই এটি প্রয়োজন হয়), প্রতিটি প্রক্রিয়াটির জন্য দ্বিতীয় ডেটাসেটের (যেখানে আপনি কিউ পাবেন) একটি কোয়াড্রি সূচক সেটআপ করা।
মূল প্রশ্নের উত্তর দিতে। এখানে একটি স্থাপত্য রয়েছে: এমপিআই + জিওওএস OS আমার ক্লাস্টারজিআইএস বাস্তবায়ন থেকে কিছুটা সাহায্য দিন এবং বেশ কিছু করা যায়। এই সমস্ত সফ্টওয়্যার ওপেন সোর্স হিসাবে পাওয়া যায়, তাই লাইসেন্স ফি নেই। আমি নিশ্চিত নই যে এটি উইন্ডোজটির পক্ষে পোর্টেবল (সম্ভবত সাইগউইনের সাথে) যেমন আমি লিনাক্সে কাজ করেছি। এই সমাধানটি ইসি 2, র্যাকস্পেসে বা যে কোনও ক্লাউড উপলভ্য স্থাপন করা যেতে পারে। যখন আমি এটি বিকাশ করেছি তখন আমি একটি বিশ্ববিদ্যালয়ে একটি ডেডিকেটেড গণনা ক্লাস্টার ব্যবহার করছিলাম।