কলগ্রাইন্ডের সাথে সিএফডি কোডের প্রোফাইলিং


16

আমি লিখেছি এমন একটি সলভারের প্রোফাইলের জন্য আমি ভ্যালগ্রিন্ড + কলগ্রিন্ড ব্যবহার করছি। ভ্যালগ্র্যান্ড ব্যবহারকারী ম্যানুয়াল হিসাবে বলা হয়েছে, আমি আমার কোডটি সংকলকের জন্য ডিবাগিং বিকল্পগুলির সাথে সংকলন করেছি:

"ডিবাগিং তথ্য ছাড়াই, ভালগ্রাইন্ড সরঞ্জামগুলি করতে সক্ষম হ'ল অনুমান করা হয় কোন নির্দিষ্ট কোডের কোন কোডটি কাজ করে, যা ত্রুটি বার্তা এবং প্রোফাইলিং আউটপুট উভয়ই অকেজো করে তোলে With সম্পর্কিত উত্স কোড লাইন। "

Valgrind ম্যানুয়াল

ডিবাগিং বিকল্পের সাথে সংকলিত হয়ে গেলে কোডগুলি অনেক ধীর গতিতে চলে। সিএফডি কোড, ডিবাগিং ফ্ল্যাগগুলির সাথে সংকলিত হয়ে গেলে এমনকি ছোট মামলার ক্ষেত্রেও ধীরে ধীরে ধীরে ধীরে হয়ে যায়। ভালগ্রাইন্ড এটিকে 40x ধীর করে তোলে (ম্যানুয়াল 1 দেখুন )।

  1. কোড প্রোফাইলিংয়ের জন্য আপনি কোন সরঞ্জামগুলি ব্যবহার করছেন (প্রোফাইলিং, বেঞ্চমার্কিং নয়)?

  2. আপনি কতক্ষণ কোড চালাবেন (পরিসংখ্যান: কত সময় পদক্ষেপ)?

  3. কেসটি বড় হয় (যদি কেসটিতে কেস ফিট হয় তবে সল্ভারটি দ্রুতগতির অর্ডার হয় তবে আমি মেমরি সম্পর্কিত প্রক্রিয়াগুলি মিস করব)?


3
আপনি উভয় ডিবাগিং প্রতীক এবং অপ্টিমাইজেশন সক্ষম সহ কোডটি সংকলন করতে পারেন। তবুও, ভ্যালগ্রিন্ডের মাধ্যমে 40x (যা সমস্ত স্মৃতি অ্যাক্সেসের অনুকরণ করে) অযৌক্তিক নয়।
আরন আহমদিয়া

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

আপনার প্রশ্নটিও কিছুটা বিস্তৃত। আমি আপনার প্রশ্নটি নীচে Q2.1 এবং Q2.2 এ ফোকাস করার জন্য নীচে সম্পাদনা করার পরামর্শ দিচ্ছি, কারণ Q1 সম্পূর্ণ ভিন্ন প্রশ্ন (আপনার পক্ষে আলাদাভাবে জিজ্ঞাসা করার জন্য আমি খুশি, এটি একটি ভাল, তবে এটি "কোন সরঞ্জামগুলির মধ্যে আপনি চান?" এক্স ", যেখানে এক্স ভাল বর্ণিত!) সমস্যাটি সমাধান করার জন্য ব্যবহার করুন, অন্যদিকে Q2 খুব সাধারণ।
আরন আহমদিয়া

আপনার কাছে নাম সম্পাদনা করতে পারেন callgrind, cachegrindঅথবা massif। অনেক লোক ভালগ্রিডকে কেবলমাত্র ডিফল্ট সরঞ্জাম ( memcheck) এর সাথে যুক্ত করে। একটি অনুকরণ ভিত্তিক (বিঘ্ন ভিত্তিক না হয়ে) প্রোফাইলিং সিস্টেম হিসাবে, আপনাকে দীর্ঘ সময় চালানোর দরকার নেই।
জেড ব্রাউন

@ অ্যারন এবং জেড: টিপসের জন্য ধন্যবাদ, আমি প্রশ্নটি সম্পাদনা করেছি। :)
তমরিক

উত্তর:


11

প্রশ্নোত্তর: কোড প্রোফাইলিংয়ের জন্য আপনি কোন সরঞ্জামগুলি ব্যবহার করছেন (প্রোফাইলিং, বেঞ্চমার্কিং নয়)?

প্রশ্ন 2: আপনি কোডটি কতক্ষণ চলতে দিন (পরিসংখ্যান: কত সময় পদক্ষেপ)?

প্রশ্ন 3: কেসগুলি বড় হয় (যদি কেসটিতে কেস ফিট হয় তবে সলভার দ্রুততার মাত্রার অর্ডার হয় তবে আমি মেমরি সম্পর্কিত প্রক্রিয়াগুলি মিস করব)?

আমি এটি কীভাবে করি তার একটি উদাহরণ এখানে।

আমি প্রোফাইলিং (এটি কীভাবে আরও দ্রুত তৈরি করতে হয় তা সনাক্তকরণ) থেকে বেঞ্চমার্কিং (এটি কতক্ষণ সময় নেয়) তা পৃথক করি। প্রোফাইলার দ্রুত হওয়া গুরুত্বপূর্ণ নয়। এটি আপনাকে কী ঠিক করতে হবে তা গুরুত্বপূর্ণ।

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

আমি যে পদ্ধতিটি ব্যবহার করি তা এলোমেলোভাবে বিরতি দেওয়া হয় এবং এখানে একটি সম্পূর্ণ কেস স্টাডি এবং স্লাইড শো রয়েছে । প্রোফাইলার-বাটনেলেকের বিশ্ব দর্শনের অংশটি হ'ল আপনি যদি কিছু না পান তবে খুঁজে পাওয়া যাবার মতো কিছুই নেই, এবং যদি আপনি কিছু খুঁজে পান এবং একটি নির্দিষ্ট শতাংশ গতি অর্জন করেন তবে আপনি বিজয় ঘোষণা করেন এবং প্রস্থান করবেন। প্রোফাইল ফ্যানরা প্রায় কখনই তা বলে না যে তারা কতটা দ্রুতগতি পায় এবং বিজ্ঞাপনগুলি কেবল কৃত্রিমভাবে কনট্রাইভড সমস্যাগুলি সন্ধান করার জন্য নকশাকৃতভাবে দেখায়। এলোমেলোভাবে বিরতি দেওয়া সমস্যাগুলি সহজ বা শক্ত কিনা তা খুঁজে পায়। তারপরে একটি সমস্যা সমাধান করা অন্যকে প্রকাশ করে, ফলে প্রক্রিয়াটি পুনরাবৃত্তি করা যেতে পারে, আরও জটিল গতি অর্জনের জন্য।

অসংখ্য উদাহরণ থেকে আমার অভিজ্ঞতাতে এটি এখানে যায়: আমি একটি সমস্যা খুঁজে পেতে পারি (এলোমেলোভাবে বিরতি দিয়ে) এবং এটি ঠিক করতে পারি, কিছু শতাংশের দ্রুত গতি পেয়ে 30% বা 1.3x বলি। তারপরে আমি এটি আবার করতে পারি, অন্য একটি সমস্যা খুঁজে পেতে এবং এটি ঠিক করতে, আরেকটি স্পিডআপ পেয়ে, সম্ভবত 30% এরও কম, সম্ভবত আরও বেশি। তারপরে আমি আবারও এটি করতে পারি, যতক্ষণ না আমি সত্যিই ঠিক করার মতো অন্য কিছু খুঁজে পাই না। চূড়ান্ত গতিপ্রণালী ফ্যাক্টর হ'ল স্বতন্ত্র কারণগুলির চলমান পণ্য এবং এটি আশ্চর্যরকমভাবে বড় হতে পারে - কিছু ক্ষেত্রে আকারের ক্রম।

অন্তর্ভুক্ত: কেবল এই শেষ পয়েন্টটি বর্ণনা করার জন্য। স্লাইড শো এবং সমস্ত ফাইল সহ এখানে একটি বিশদ উদাহরণ রয়েছে যা দেখায় যে কীভাবে 730x এর দ্রুতগতি সমস্যা অপসারণের একটি সিরিজে অর্জন করা হয়েছিল। প্রথম সংস্করণটি প্রতি ইউনিট 2700 মাইক্রোসেকেন্ড নিয়েছিল। সমস্যা এটিকে সরানো হয়েছিল, সময়টি 1800 এ নামিয়ে আনা হয়েছিল এবং 1.5x (2700/1800) দ্বারা অবশিষ্ট সমস্যার শতাংশ বৃদ্ধি করা হয়েছিল। তখন বি সরানো হয়েছিল। এই প্রক্রিয়াটি ছয়টি পুনরাবৃত্তির মাধ্যমে অব্যাহত ছিল, ফলস্বরূপ প্রায় 3 টি আকারের গতিবেগের আদেশ orders তবে প্রোফাইলিং কৌশলটি সত্যই কার্যকর হতে হবে, কারণ যদি এই সমস্যাগুলির কোনওটি না পাওয়া যায়, যেমন আপনি যদি এমন একটি জায়গায় পৌঁছে যান যেখানে আপনি ভুলভাবে ভাবেন যে আরও কিছু করা যায় না, প্রক্রিয়াটি থেমে থাকে।

বড় গতিবেগ পেতে একাধিক সমস্যা অপসারণের বর্ণনা Description

অন্তর্ভুক্ত: এটিকে অন্য উপায়ে বলতে গেলে, ক্রমাগত সমস্যাগুলি সরানো হওয়ায় মোট স্পিডআপ ফ্যাক্টরের একটি গ্রাফ এখানে রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

সুতরাং কিউ 1 এর জন্য, একটি সাধারণ টাইমার পর্যাপ্ত পরিমাণে বেঞ্চমার্কিংয়ের জন্য। "প্রোফাইলিং" এর জন্য আমি এলোমেলোভাবে বিরতি ব্যবহার করি।

প্রশ্ন 2: আমি এটিকে পর্যাপ্ত কাজের চাপ দিয়েছি (বা এটির চারপাশে একটি লুপ রেখেছি) তাই এটি বিরতি দেওয়ার জন্য যথেষ্ট দীর্ঘ চলে।

Q3: যে কোনও উপায়ে, এটিকে বাস্তবিকভাবে বড় কাজের চাপ দিন যাতে আপনি ক্যাশের সমস্যাগুলি মিস না করেন। এগুলি কোডটিতে নমুনা হিসাবে প্রদর্শিত হবে মেমরিটি আনছে।


মাইক, ভিজ্যুয়াল আইডিইর অনুপস্থিতিতে কীভাবে র্যান্ডম বিরতি দেওয়া যায় তার জন্য আপনার কী পছন্দ আছে? এই প্রক্রিয়াটি কোনও উপায়ে স্বয়ংক্রিয় করা যায়?
ম্যাথু এমমেট

@ ম্যাথুজ: আমি বুঝতে পারি যে এর মতো সরঞ্জাম রয়েছে pstackএবং lsstackতবে আমি এটি সত্যই ডিবাগিংয়ের সাথে একটি সাধারণ প্রক্রিয়া হিসাবে বিবেচনা করি। সুতরাং আমি যদি সেরা ডিবাগারটি বহন করতে পারি তবে gdbতা কাজটি করে। কোনও ডিবাগার দিয়ে আপনি ডেটা পরীক্ষা করতে পারেন এবং স্ট্যাক যখন একা আপনাকে যথেষ্ট পরিমাণে না বলে তা পার্থক্য আনতে পারে।
মাইক ডুনলাভে

9

দরিদ্র মানুষের প্রোফাইলার মূলত একটি হল gdbস্ক্রিপ্ট নমুনা কল স্ট্যাক। আপনার এখনও ডিবাগিং প্রতীক থাকা দরকার। এটি এখনও ধীর, তবে এটি কোড চালানোর জন্য এটি ভার্চুয়াল মেশিন বাস্তবায়িত করে না বলে প্রায়শই দ্রুত callgrindএবং কাজের পক্ষে পর্যাপ্ত থাকে।

আমি বিনয়ী সাফল্যের সঙ্গে কণা পদার্থবিজ্ঞানের বিশ্লেষক সালে রান করেছি (অর্থাত আমি প্রদর্শিত যে কোড না কোন ভয়ঙ্কর হট স্পট এবং অপ্টিমাইজেশান একটি ভাল অ্যালগোরিদম প্রয়োজন চালু ছিল)।


1
+ প্রমাণের অনুপস্থিতি অনুপস্থিতির প্রমাণ নয় :) এই দরিদ্র ব্যক্তির প্রোফাইলার যা করতে হবে তা হ'ল কম ট্রেস নেওয়া এবং সেগুলি ভেঙে ফেলা উচিত নয়, তবে আপনাকে সেগুলি দেখতে দিন। সাধারণ ফাংশন সময় অনুমানের তুলনায় মানব চোখগুলি দরকারী নিদর্শনগুলি সনাক্তকরণে অনেক বেশি ভাল এবং আপনি যদি কিছু 2 টি নমুনায় উন্নতি করতে পারেন তবে তা উল্লেখযোগ্যভাবে সহায়তা করবে। এটি ভগ্নাংশ এক্সটি সংরক্ষণ করবে মোড 2 / এন এর সাথে বিটা বিতরণ, যেখানে এন আপনি কতগুলি ট্রেস পরীক্ষা করেছেন এবং স্পিডআপ ফ্যাক্টরটি 1 / (1-এক্স) হবে, যা বড় হতে পারে।
মাইক ডুনলাভে

2

উপলভ্য দুর্দান্ত উত্তরগুলিতে যোগ করার জন্য, ভাতগুলিতে একটি সরঞ্জাম বিকাশ করা হয়েছে যা স্ট্যাকের নমুনাটি স্বয়ংক্রিয় করে এবং সুতরাং খুব কম ওভারহেড থাকে:

http://hpctoolkit.org/


এটি দেখতে দুর্দান্ত লাগছে, যদিও (দুঃখিত) আমি আমার শিখার টুপি এখানে রেখেছি। আমি সংকলক-অনুকূলিত কোডটি টিউন করি না কারণ ম্যাঙ্গলেড কোডটিতে কী চলছে তা দেখা মুশকিল। আমি যে জিনিসগুলি ছাঁটাই করছি সেগুলি অপটিমাইজারের সাথে ডিল করতে পারে না - যেমন কল করা expএবং logবারবার একই যুক্তি সহ, বা ম্যাট্রিক্স অপারেশনগুলি তাদের সমস্ত সময় ডিকোডিংয়ের বিকল্পগুলিতে ব্যয় করে। আমি যতদূর পারি টিউন করি, তারপরে -O3 চালু করুন।
মাইক ডুনলাভে

সরঞ্জামগুলি হ'ল সরঞ্জামগুলি এবং সেগুলি কেবল তখন কার্যকর হয় যদি ব্যবহারকারী তাদের সীমাবদ্ধতাগুলি জানে এবং বুঝতে পারে। আমি মনে করি না যে কোনও "নিখুঁত প্রোফাইলার" থাকবে যা ব্যবহারকারীকে সমীকরণ থেকে সম্পূর্ণভাবে তার আউটপুট বুঝতে এবং তথ্য কীভাবে ব্যবহার করতে হবে তা বোঝার ক্ষেত্রে সরিয়ে ফেলবে।
রিড.এচচসন

1

অ্যালিনিয়া এমএপি একটি বাণিজ্যিকভাবে বিকশিত এবং সমর্থিত স্যাম্পলিং প্রোফাইলার এবং তাই - পূর্ববর্তী উত্তরে প্রস্তাবিত এইচপিসি টুলকিটের মতো - আপনি ইচ্ছা করলে উত্পাদন আকারের চাকরীতে চালাতে পারেন।

এই জাতীয় সরঞ্জাম সিপিইউ বাধা বা দুর্বল এমপিআই যোগাযোগের দিকে ইঙ্গিত করে, তবে পুরো কাজটি লেখার সম্পূর্ণ নজরদারি অবাক করার বিষয়গুলি খুঁজে পেতে অমূল্য হতে পারে।

প্রত্যাশিত অঞ্চলগুলিতে প্রায়শই লো-হ্যাং পারফরম্যান্স ফলগুলি থাকে যা কোনও সিএফডি কোডের মূল কার্নেলের বাইরে থাকে। এলোমেলোনাযুক্ত স্ট্যাকের নমুনা হ'ল - জিডিবি দিয়ে ম্যানুয়ালি করা হয়েছে বা এইচপিসি টুলকিট এবং অ্যালিনিয়া এমএপির মতো সরঞ্জামগুলি - সেগুলি সন্ধানের সর্বোত্তম উপায়। পারফরম্যান্সে কিছু গুরুত্বপূর্ণ হলে তা প্রদর্শিত হবে।

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