ওজিআর / জিডিএল থ্রেডিংয়ের ফলে কম কোর ব্যবহার হয়


13

আমি ওজিআর / জিডিএল ব্যবহার করে কিছু রাস্টার ডেটা প্রক্রিয়া করার চেষ্টা করছি এবং আমার মেশিনে সমস্ত কোরগুলির সম্পূর্ণ ব্যবহার পেতে পারে বলে মনে হচ্ছে না। আমি যখন কেবলমাত্র একটি একক কোরটিতে প্রক্রিয়াটি চালাই, তখন আমি সেই কোরটির 100% ব্যবহার করি। আমি যখন মাল্টিকোরগুলিতে বিভক্ত হওয়ার চেষ্টা করি (নীচের উদাহরণে, এক্স অফসেটগুলি ছাঁটাই করে এবং একটি সারিতে রেখে), আমি আমার 8 টি কোরের প্রতি করুণাময় ব্যবহার পাই। দেখে মনে হচ্ছে এটি প্রতিটি কোর জুড়ে কেবলমাত্র 100% ব্যবহার করে (উদাহরণস্বরূপ 12.5% ​​প্রতিটিতে)।

আমি উদ্বিগ্ন ছিলাম যে একই ডেটাসোর্সটি ব্যবহার করা বাধা ছিল, তবে আমি তখন প্রতিটি কোরের জন্য অন্তর্নিহিত রাস্টার ফাইলটি নকল করে দিয়েছিলাম ... এবং মূল ব্যবহারটি এখনও বকাবকি। এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে ওগার বা জিডাল একরকম একটি অটল শেয়ার্ড রিসোর্সের মতো আচরণ করছে তবে আমি সে সম্পর্কে অনলাইনে কিছুই খুঁজে পাচ্ছি না। কোন সাহায্যের অনেক প্রশংসা হবে!

এটি "সহায়ক" ফাংশন যা প্রতিটি কর্মী থ্রেডের অভ্যন্তরে চলে:

def find_pixels_intersect_helper(datasource, bounds_wkt, x_min, x_max):
    bounds = ogr.CreateGeometryFromWkt(bounds_wkt)
    rows_to_write = []
    for x_offset in range(x_min, x_max):
        for y_offset in range(datasource.RasterYSize):
            pxl_bounds_wkt = pix_to_wkt(datasource, x_offset, y_offset)
            pxl_bounds = ogr.CreateGeometryFromWkt(pxl_bounds_wkt)
            if pxl_bounds.Intersect(bounds):
                rows_to_write.append(['%s_%s' % (x_offset, y_offset), pxl_bounds.Centroid().ExportToWkt()])

অসম্ভব, তবে আপনি কি পরীক্ষা করে দেখেছেন মেমোরি বাধা কি না?
lynxlynxlynx

@lynxlynxlynx - হ্যাঁ স্মৃতি অবশ্যই বাধা নয়। সারাদিন এই জিনিসটি ট্র্যাক করার চেষ্টা করা হয়েছে ... এটি বেশ অদ্ভুত।
সর্বোচ্চ

এটি হতে পারে যে আপনি যে রাস্টার ড্রাইভারটি ব্যবহার করছেন তা কেবল একবারে একাধিক থ্রেড থেকে কল করার জন্য ডিজাইন করা হয়নি। তথ্যসূত্র: মেল
-আরচাইভ.

উত্তর:


10

ঠিক আছে. সেদিনটি ছিল আমার জীবনের একটি দিন যা আমি আর কখনও ফিরে পাব না। দেখা যাচ্ছে যে সমস্যাটি আমি উপরে পোস্ট করা কোডটিতে ছিল না। পুরোপুরি ঠিক আছে। দেখা যাচ্ছে যে এটি থ্রেডিংয়ের কেস h থ্রেড বনাম মাল্টিপ্রসেসিং Pপ্রসেস।

পাইথন ডকুমেন্টেশনে যেমন উল্লেখ করা হয়েছে :

মাল্টিপ্রসেসিং প্যাকেজটি স্থানীয় এবং দূরবর্তী উভয়ই সম্মিলন সরবরাহ করে, কার্যকরভাবে থ্রেডের পরিবর্তে সাব-প্রসেসগুলি ব্যবহার করে গ্লোবাল ইন্টারপ্রেটার লককে সাইড-স্টেপিং করে। এর কারণে, মাল্টিপ্রসেসিং মডিউল প্রোগ্রামারকে কোনও প্রদত্ত মেশিনে সম্পূর্ণরূপে একাধিক প্রসেসর লাভ করতে দেয়

সুতরাং, থ্রেডিং h থ্রেড আইও-নিবিড় ক্রিয়াকলাপের জন্য, মাল্টিপ্রসেসিং P প্রসেসটি সিপিইউ নিবিড় ক্রিয়াকলাপের জন্য। আমি মাল্টিপ্রসেসিংয়ে চলেছি ro প্রসেস এবং সবকিছু দুর্দান্ত কাজ করে।

মাল্টিপ্রসেসিং.প্রসেস কীভাবে ব্যবহার করবেন তা শিখতে এই টিউটোরিয়ালটি দেখুন


আমি কেবল এটিই পরামর্শ দিতে যাচ্ছিলাম, আপনি নিশ্চিত করছেন যে কোন বাস্তবায়ন ( তৃতীয় পক্ষের বাস্তবায়নগুলিও রয়েছে ) আপনি ব্যবহার করছেন :) আমি সম্প্রতি একটি ঝরঝরে বিল্ডিং ছায়া সরঞ্জামের গতি বাড়ানোর জন্য এটি ব্যবহার করেছি: পোর্ট "বিল্ডিং শ্যাডো উত্পাদন" অ্যাভিনিউ আর্কজিআইএস 10
blah238

+1 আমি পোস্ট করতে যাচ্ছিলাম যে আপনার জিডিএল-ডেভেল মেলিং তালিকায় একটি শব্দ থাকা উচিত; তবে আমি এখন খুশী আপনি না! ভবিষ্যতের রেফারেন্সের জন্য এটিকে কাঠবিড়ালি করে দেওয়া হয়েছে।
MerseyViking

এফডাব্লুআইডাব্লু (সম্ভবত খুব বেশি নয়), আমি কোথাও পড়েছি যে লোকেরা বিশ্বব্যাপী ইন্টারপ্রেটার লক (জিআইএল) সমস্যা সমাধানের চেষ্টা করার জন্য তহবিল সংগ্রহ করছে। আমি মনে করি এটি 3.x এর জন্য হবে think
canisrufus
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.