আমি কি আমার প্রোগ্রামের জন্য 1 টি প্রসেসর কোর রাখতে পারি?


12

জিপিআইও পিনগুলিতে উচ্চ -> নিম্ন এবং কম -> উচ্চ সংকেত প্রান্তের মধ্যে সময়ের পার্থক্যটি আমার কাছে করতে হবে। আমি সহজ প্রোগ্রাম লিখেছি যা এটি করে। কিছুক্ষন এটি চালানোর পরে আমি ফলাফলটি (0,01 এর বিভিন্নতা) নিয়ে বেশ খুশি হয়েছি। তবে সময়ে সময়ে 0,5 এর ত্রুটি ছিল। আমি ভাবছিলাম যে এটি অন্য সময়ে চলমান কিছু সিস্টেম প্রক্রিয়ার কারণে হতে পারে। সুতরাং আমার প্রশ্নটি হ'ল:

আমি কি কেবলমাত্র আমার প্রোগ্রামের জন্য একটি প্রসেসর কোর সংরক্ষণ করতে পারি এবং অন্য 3 টি সিস্টেমের জন্য কোর দিতে পারি?

আমি রাস্পবিয়ান জেসি লাইট ব্যবহার করছি, তাই আমি মনে করি এটি চালানোর জন্য 3 টি কোর যথেষ্ট হবে।


4
আমি ধরে নিয়েছি আপনি জিপিআইও পিনের স্থিতির জন্য একটি লুপে ভোট দিচ্ছেন। অপারেটিং সিস্টেমটি কীভাবে আপনার প্রোগ্রামটি কার্যকর করার সিদ্ধান্ত নিয়েছে এটি অত্যন্ত সংবেদনশীল, এটি সিপিইউ ব্যস্ত রাখতে বেশিরভাগ সময় ব্যয় করবে এবং বাস্তবে কার্যকর কিছু না করে। আপনি প্রদত্ত জিপিআইও পিনটিতে একটি বাধাপ্রাপ্ত সেট আপ করার কোনও উপায়টি দেখতে চাইতে পারেন, যা আপনি জিপিআইও পিনের সিগন্যাল প্রান্তগুলির মধ্যে আপনার প্রোগ্রামকে ঘুমাতে দিতে পারেন।
ফ্লোরিয়ান ক্যাসেলালেন

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

@ ফ্লোরিয়ান RPI.GPIO- এ একটি ফাংশন রয়েছে যা বাধা দেওয়ার মতো। প্রান্তটি সনাক্ত না হওয়া অবধি এটি প্রোগ্রামটিকে অবরুদ্ধ করবে (উত্স: উত্স : forfor.net/p/raspberry-gpio-python/wiki/Inputs )।
নন স্ট্যান্ডার্ডমোডেল

@ স্নেকডোক আমি জানি যে মাইক্রোকন্ট্রোলার আরও ভাল। আমি এড়াতে আশা করছিলাম, কারণ আমার মাইক্রোসেকেন্ড যথার্থতা প্রয়োজন নেই। এক সেকেন্ডের 1/100 যথেষ্ট পরিমাণের চেয়ে বেশি। এছাড়াও আমার ঠিক সময়ের পার্থক্য প্রয়োজন, তাই যদি দেরি হয় তবে আমি আশা করি যে এটি শুরু এবং থামার জন্য একই রকম হবে। যদি এটি কাজ না করে তবে ডেটা সঞ্চয় করতে আমাকে আরপিআই-র সাথে সংযুক্ত মাইক্রোকন্ট্রোলারের সাথে যেতে হবে।
নন স্ট্যান্ডার্ডমোডেল

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

উত্তর:


13

একটি কোর উত্সর্গ করা সম্ভবত অতিরিক্ত ওভারকিল।

আমি আপনাকে আমার pigpio গ্রন্থাগার চেষ্টা করার পরামর্শ দিচ্ছি । ডিফল্টরূপে এটি জিপিআইও স্তরকে 10 এর মধ্যে পরিবর্তিত করবে।

দ্রুত পরীক্ষা হিসাবে আমি আপনাকে এই পাইথন উদাহরণটি দেখার পরামর্শ দিচ্ছি , যা জিপিআইওতে সর্বশেষ রূপান্তরের পরে যে কোনও জিপিআইও স্তরের রূপান্তর এবং মাইক্রোসেকেন্ডে সময় মুদ্রণ করবে।

জিসি লাইটে পিগপিও ডিফল্টরূপে ইনস্টল করা হয় না। হয় লিঙ্কযুক্ত সাইট থেকে সর্বশেষতম ইনস্টল করুন অথবা সংগ্রহস্থলগুলিতে পুরানো সংস্করণ ইনস্টল করুন।

sudo apt-get install pigpio python-pigpio python3-pigpio

pigpio - Library for Raspberry Pi GPIO control
python-pigpio - Python module which talks to the pigpio daemon (Python 2)
python3-pigpio - Python module which talks to the pigpio daemon (Python 3)

আমি আপনার pigpio গ্রন্থাগার চেষ্টা করব। এখনই আমাকে অন্য একটি প্রকল্প শেষ করতে হবে, তবে আমি এটিতে ফিরে যাব। আমি কয়েক সপ্তাহের মধ্যে ফিরে রিপোর্ট করব। ধন্যবাদ!
নন স্ট্যান্ডার্ডমোডেল

4

এই সাইবারসিটি নিবন্ধেschedutils বর্ণিত হিসাবে আপনি আপনার প্রোগ্রামটিকে একটি কোরে লক করতে পারেন :

sudo apt-get install schedutils
sudo taskset -c 3 -p 13545  # Lock PID 13545 to core 3

যদিও অন্য প্রক্রিয়াগুলি এখনও একই কোরে নির্ধারিত হতে পারে। তা করার দ্বিতীয় বিষয় নিশ্চিত সর্বোচ্চ অগ্রাধিকার ব্যবহার করে আপনার কমান্ড রান করা হয় চমৎকার কমান্ড (এই Linux কার্নেল যে অন্যান্য প্রসেস করা উচিত বলে দেবে প্রাক empted প্রয়োজন হলে)। আপনার প্রোগ্রামটি এভাবে শুরু করুন:

nice -n -20 your-program

আপনার সময় সংক্রান্ত সমস্যার জন্য আরও কিছু সম্ভাব্য কারণ রয়েছে। এগুলি সম্পর্কে কিছুই করা তত সহজ নয়:

  • আপনি যদি পাইথনে প্রোগ্রামিং করছেন এমন কোনও আবর্জনা সংগ্রহকারী রয়েছে যা কখনও কখনও আপনার প্রোগ্রামটিকে অব্যবহৃত স্মৃতি মুক্ত করতে বিরতি দেয়।
  • বাধা সিপিইউকে হ্যান্ডেল করে তোলে যা আপনি চান than উদাহরণস্বরূপ, নেটওয়ার্ক প্যাকেট বা অন্যান্য ইনপুট / আউটপুট।
  • যদি আপনার প্রোগ্রামটি অনেক বেশি ঘুমিয়ে থাকে তবে অন্যান্য প্রসেসগুলি থাকতে পারে যা সিপিইউ ক্যাশে পূরণ করে (এল 1 / এল 2 ক্যাশে)। এটি আপনাকে র‌্যাম অ্যাক্সেসের জন্য অপেক্ষা করতে বাধ্য করে।
    • আরও বেশি খারাপ যদি আপনার র‍্যামটি পূর্ণ থাকে যাতে আপনার প্রক্রিয়াটি ডিস্কে সরে যায় কারণ এসডি কার্ডগুলি স্লো।

আপনার প্রক্রিয়াটিকে রিয়েলটাইম করার উপায় রয়েছে যার অর্থ এটি নির্দিষ্ট সময় গ্যারান্টি সহ চলবে। এটির সাথে সমস্যাটি হ'ল অন্য সবকিছু ধীর হতে পারে এবং এটি একটি জটিল বিষয়। আপনি যদি এই খরগোশের গর্তটি নীচে যেতে চান তবে আমি আপনাকে লিনাক্সে রিয়েল টাইম প্রক্রিয়াগুলি পড়া শুরু করার পরামর্শ দিচ্ছি ।


2
পরিবর্তে সুন্দর হওয়ার চেয়ে প্রক্রিয়াটিকে রিয়েল-টাইম অগ্রাধিকার দেওয়া আরও ভাল যা এটি নিশ্চিত করবে যে এটি বাস্তব-অ-সময়কালীন প্রক্রিয়াগুলির অগ্রাধিকারে চলে।
Joan

ভাল কথা, আমি সে সম্পর্কে একটি নোট যুক্ত করব।
এমিল বিক্রষ্টম

1
"gc.disable ()" আপনি আবর্জনা সংগ্রাহককে অক্ষম করলে কি হয়?
কেইন

@ কেইন আপনি একটি স্মৃতি ফুটো পেতে পারেন। বলুন যে আপনার কাছে একটি অবজেক্ট A রয়েছে যার একটি পরিবর্তনশীল রয়েছে যা বি পাইথনকে নির্দেশ করে এটি একটি রেফারেন্সটিকে একটি সংখ্যা হিসাবে ট্র্যাক করবে, এটি জানে যে বি এর 1 টির দিকে এটি নির্দেশ করে। আপনার আর প্রয়োজন হবে না তখন এটিকে সরান। বি এর জন্য রেফারেন্স গণনা হ্রাস পাবে এবং এটি যদি 0 টি আঘাত করে তবে পাইথন বি কেও মুক্ত করতে পারে। একে বলা হয় রেফারেন্স কাউন্টিং। তবে এখন বলুন যে বি এর রেফারেন্স আবার এ। এখন আপনার কাছে একে অপরের দিকে নির্দেশ করা বস্তুর একটি ক্লাস্টার রয়েছে। তাদের কেউই 0 টি আঘাত করবে না এবং মুক্তি পাবে। মূল প্রোগ্রামটি ক্লাস্টারটিকে "" "না দেখায় জিসি এ জাতীয় ক্লাস্টারগুলি সন্ধান করতে এবং সেগুলি সরিয়ে ফেলতে পারে।
এমিল ভিক্রাস্টম

1
আমার প্রকল্পে আপনার দেওয়া পরামর্শগুলি আমি যুক্ত করব। তবে আমি খুব জটিল বিষয় এড়াতে আশা করছি। সেক্ষেত্রে আমি অনুমান করি একটি মাইক্রোকন্ট্রোলার বাধা সনাক্তকরণ করা এবং এটি কেবল ডেটা সংরক্ষণের জন্য আরপিআইতে সংযুক্ত করা ভাল। ধন্যবাদ!
নন স্ট্যান্ডার্ডমোডেল

2

আপনার যেহেতু সময়ের প্রয়োজনীয়তা রয়েছে তাই রাস্পবেরি পাই এর জন্য আর উপযুক্ত প্ল্যাটফর্ম নয়। এটি বাস্তব সময়ের প্ল্যাটফর্ম নয় এবং হস্তক্ষেপের বিভিন্ন উত্স দ্বারা সময়কে ছুঁড়ে ফেলা যায়।

পরিবর্তে আপনার এই সময়টি পরিমাপ করার জন্য একটি মাইক্রোকন্ট্রোলার ব্যবহার করা উচিত, প্রাথমিকভাবে বাধা ব্যবহার করে, এবং তথ্যটি পরে পাইতে দেওয়া উচিত।


1
যদিও রাস্পবেরি পাইতে জিপিআইও পিনগুলিতে বাধা পাওয়া সম্ভব নয়?
ফ্লোরিয়ান

অবশ্যই এটি নির্ভর করে যদি কোনও এমসিইউর তুলনায় একটি লিনাক্স মেশিনকে আরও উপযুক্ত করে তোলে এমন ডিজাইনের প্রয়োজনীয়তার কোনও অংশ রয়েছে কিনা on এমসিইউ যেমন 10 মেগাহার্টজ এ আটকানো হয়েছে তেমনই আরপিআই এই কাজটি দুর্দান্তভাবে পরিচালনা করতে সক্ষম হয়।
শন হোলিহানে

1

আপনার প্রয়োজন অনুসারে আমি মনে করি না যে আপনার একটি একক কোর প্রসেসর ব্যবহার করা উচিত। আপনার যা প্রয়োজন তা হ'ল আপনার প্রোগ্রামটি সর্বদা চলমান তা নিশ্চিত করা। এটি অর্জন করার জন্য, আপনি আপনার প্রোগ্রামের অগ্রাধিকারটি খুব উচ্চতর সেট করতে পারেন, যাতে এটি অন্য কোনও প্রক্রিয়া দ্বারা বিরক্ত না হয়।

আমি যতদূর জানি ওএস (সাধারণ উদ্দেশ্য ওএস), যা আমরা ব্যবহার করি তা রিয়েল টাইম সিস্টেমে ব্যবহারের জন্য ডিজাইন করা হয়নি, সুতরাং আপনি যদি আপনার প্রক্রিয়াটি রিয়েল টাইমে চালাতে চান যাতে অন্য কোনও প্রক্রিয়া এতে ঝামেলা না করে, আপনার প্রয়োজন রিয়েল টাইম ওএস (আরটিওএস) এর জন্য। সম্ভবত তারা মূল নির্বাচন নিয়ে আসবে। :)


1
ভাল ফ্রি আরটিএস আছে কি?
কেইন

আরটিএলিনাক্স এবং ভিএক্স ওয়ার্কস আরটিওএসের উদাহরণ এবং সেগুলিও ভাল। তবে আপনাকে ইনস্টল করার আগে ওএস (এর তৈরির জন্য কী ফোকাস ছিল) সম্পর্কে অধ্যয়ন করতে হবে, যাতে এটি আপনার প্রয়োজনগুলি পূরণ করতে পারে।
বিশ্বজিৎ বিশু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.