বাছাই করুন - সমান্তরাল সমান্তরাল নয়


9

আমি क्रमवारी -u সহ এগ্রিপ দিয়ে কোনও ফাইল থেকে টানা লাইনের একটি সেটকে অনন্য করে দেওয়ার চেষ্টা করছি, তারপরে সেগুলি গণনা করুন। লাইনগুলির প্রায় 10% (বর্ণমালা [এটিসিজি] থেকে সমস্ত 100 টি অক্ষর দীর্ঘ) নকল করা হয়েছে। দুটি ফাইল রয়েছে, প্রতিটি প্রায় 3 টি জিগ, 50% প্রাসঙ্গিক নয়, তাই সম্ভবত 300 মিলিয়ন লাইন।

LC_ALL=C  grep -E  <files> |  sort --parallel=24  -u | wc -m

এলসি_এলএল = সি এর মধ্যে এবং গ্রেটকে ত্বরান্বিত করতে -x ব্যবহারের মধ্যবর্তী স্থানে ধীরতম অংশটি সাজানো। ম্যান পেজগুলি পড়ার ফলে - সমান্তরাল = এন পৌঁছেছিল, কিন্তু পরীক্ষায় একেবারে কোনও উন্নতি হয়নি। শীর্ষের সাথে কিছুটা খনন করে দেখানো হয়েছিল যে - সমান্তরাল = ২৪ এর সাথেও, সাজানোর প্রক্রিয়াটি কেবল একবারে একটি প্রসেসরের উপর চলে।

মোট ৪৪ টি লজিকাল প্রসেসর দিয়ে আমার কাছে 6 টি কোর এবং ২ টি থ্রেড / কোর সহ 4 টি চিপস রয়েছে। Lscpu দেখুন কারণ / proc / cpuinfo খুব দীর্ঘ হবে।

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                48
On-line CPU(s) list:   0-47
Thread(s) per core:    2
Core(s) per socket:    6
Socket(s):             4
NUMA node(s):          8
Vendor ID:             AuthenticAMD
CPU family:            21
Model:                 1
Stepping:              2
CPU MHz:               1400.000
BogoMIPS:              5199.96

আমি কী মিস করছি? প্রক্রিয়াটি আইও-সীমাবদ্ধ থাকলেও, আমি কি যাইহোক সমান্তরাল প্রক্রিয়াকরণটি দেখতে পাচ্ছি না? বাছাই প্রক্রিয়াটি যে কোনও নির্দিষ্ট সময়ে প্রকৃতপক্ষে প্রসেসরের 99% ব্যবহার করে, সুতরাং এটি ঘটলে আমার সমান্তরালতা দেখতে সক্ষম হওয়া উচিত। স্মৃতি কোনও উদ্বেগের বিষয় নয়, আমার সাথে খেলতে 256 জিবি রয়েছে এবং এর কোনওটিই অন্য কোনও কিছুর দ্বারা ব্যবহৃত হয় না।

আমি কোনও ফাইলে পাইপিং গ্রেপ আবিষ্কার করেছি তারপরে ফাইলটি বাছাই করে পড়া:

 LC_ALL=C  grep -E  <files>  > reads.txt ; sort reads.txt  -u | wc -m

default, file 1m 50s
--parallel=24, file 1m15s
--parallel=48, file 1m6s
--parallel=1, no file 10m53s
--parallel=2, no file 10m42s
--parallel=4 no file 10m56s

others still running

এই মানদণ্ডগুলি করার ক্ষেত্রে এটি বেশ পরিষ্কার যে পাইপযুক্ত ইনপুট বাছাই করার সময় একেবারেই সমান্তরাল হয় না। কোনও ফাইল পড়ার অনুমতি দেওয়ার সাথে সাথে নির্দেশ অনুযায়ী লোডকে বিভক্ত করে।


কি sortযা বন্টন হয়? মানকটি sortসেই বিকল্পটি জানে না।
অট--

uname -a"3.13.0-46-জেনেরিক # 79-উবুন্টু জন্য SMP" দেয় এবং lsb_release -aদাবি 14.04.2 কোডনাম বিশ্বাসভাজন, এবং যে GNU coreutils অংশ অনুযায়ী সাজানোর সংস্করণ man sort
জেরেমি কেম্বল

এটা আমার মনে হচ্ছে এখানে অংশ হতে পুনরায় পড়তে প্রয়োজন আছেন: gnu.org/software/coreutils/manual/html_node/...
Hannu

আমি নিশ্চিত না যে আপনি @ হান্নুতে যা পাচ্ছেন তা আমি বুঝতে পেরেছি, আপনি কি আরও নির্দিষ্ট করে বলতে পারেন? সাজান - সমান্তরাল = 2 সমান্তরাল হয় না। 4 বা 8. 8 টিও নয়, এনআরপিওসি 48 টির মতো ফিরিয়ে দেয় should
জেরেমি কেম্বল

1
আমি বলব ... এর জন্য কোর্টিল ব্যবহার করবেন না। Amusingly আমরা অনুরূপ প্রশ্ন ছিল এবং ভাল .... প্রত্যেক অন্যান্য পদ্ধতি ভাল কাজ করে superuser.com/a/485987/10165
মজুর গিক

উত্তর:


21

সাজানোর কোনও থ্রেড তৈরি হয় না যদি না এটি প্রয়োজন হয় এবং ছোট ফাইলগুলির জন্য এটি কেবলমাত্র অত্যধিক ওভারহেড। এখন দুর্ভাগ্যক্রমে বাছাই একটি পাইপের সাথে একটি ছোট ফাইলের মতো আচরণ করে। আপনি যদি 24 থ্রেডে পর্যাপ্ত ডেটা ফিড করতে চান তবে আপনাকে একটি বৃহত অভ্যন্তরীণ বাফার ব্যবহার করার জন্য বাছাই করতে হবে (বড় ফাইলগুলির সাথে সাজানোর পরে সেটি স্বয়ংক্রিয়ভাবে ঘটে)। এটি আমাদের প্রবাহে উন্নত করা উচিত (কমপক্ষে ডকুমেন্টেশনে)। সুতরাং আপনি কিছু চাইবেন:

(export LC_ALL=C; grep -E  <files> | sort -S1G --parallel=24 -u | wc -m)

দ্রষ্টব্য আমি সমস্ত প্রক্রিয়াগুলির জন্য LC_ALL = C সেট করেছি, যেহেতু তারা এই ডেটা দিয়ে সমস্ত উপকার করবে)।

বিটিডাব্লু আপনি এর মতো কিছু দিয়ে সাজানোর থ্রেডগুলি পর্যবেক্ষণ করতে পারেন:

watch -n.1 ps -C sort -L -o pcpu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.