বিজ্ঞাপন বন্ধ করুন

মাইক অ্যাশ তার ব্লগে উত্সর্গীকৃত iPhone 64S-এ 5-বিট আর্কিটেকচারে স্যুইচ করার ব্যবহারিক প্রভাব। এই নিবন্ধটি তার ফলাফলের উপর আঁকা।

এই টেক্সটটির কারণ হল 5-বিট এআরএম প্রসেসর সহ নতুন আইফোন 64s আসলে ব্যবহারকারী এবং বাজারের জন্য কী বোঝায় সে সম্পর্কে প্রচুর পরিমাণে ভুল তথ্য ছড়ানোর কারণে। এখানে আমরা বিকাশকারীদের জন্য এই পরিবর্তনের কার্যকারিতা, ক্ষমতা এবং প্রভাব সম্পর্কে বস্তুনিষ্ঠ তথ্য আনার চেষ্টা করব।

"64 বিট"

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

যাইহোক, "64bit" এর অর্থ কী নয় তা নির্দেশ করা সমানভাবে গুরুত্বপূর্ণ: RAM শারীরিক ঠিকানার আকার. RAM এর সাথে যোগাযোগ করার জন্য বিটের সংখ্যা (এইভাবে একটি ডিভাইস যে পরিমাণ RAM সমর্থন করতে পারে) CPU বিটের সংখ্যার সাথে সম্পর্কিত নয়। এআরএম প্রসেসরের 26- এবং 40-বিট ঠিকানাগুলির মধ্যে যে কোনও জায়গায় থাকে এবং বাকি সিস্টেমের থেকে স্বাধীনভাবে পরিবর্তন করা যায়।

  • ডেটা বাসের আকার. RAM বা বাফার মেমরি থেকে প্রাপ্ত ডেটার পরিমাণ একইভাবে এই ফ্যাক্টর থেকে স্বাধীন। পৃথক প্রসেসর নির্দেশাবলী বিভিন্ন পরিমাণ ডেটার জন্য অনুরোধ করতে পারে, তবে সেগুলি হয় খণ্ডে পাঠানো হয় বা মেমরি থেকে প্রয়োজনের চেয়ে বেশি প্রাপ্ত হয়। এটি ডেটা কোয়ান্টামের আকারের উপর নির্ভর করে। iPhone 5 ইতিমধ্যেই 64-বিট কোয়ান্টায় মেমরি থেকে ডেটা গ্রহণ করে (এবং একটি 32-বিট প্রসেসর রয়েছে), এবং আমরা 192 বিট পর্যন্ত আকারের সম্মুখীন হতে পারি।
  • ফ্লোটিং পয়েন্ট সম্পর্কিত যেকোন কিছু. এই ধরনের রেজিস্টারের আকার (FPU) আবার প্রসেসরের অভ্যন্তরীণ কাজের থেকে স্বাধীন। ARM 64-বিট FPU ব্যবহার করছে ARM64 (64-bit ARM প্রসেসর) এর আগে থেকে।

সাধারণ সুবিধা এবং অসুবিধা

যদি আমরা অন্যথায় অভিন্ন 32 বিট এবং 64 বিট আর্কিটেকচারের তুলনা করি তবে সেগুলি সাধারণত আলাদা হয় না। অ্যাপল মোবাইল ডিভাইসেও 64 বিটে চলে যাওয়ার কারণ খুঁজতে জনসাধারণের বিভ্রান্তির এটি একটি কারণ। যাইহোক, এটি সমস্ত A7 (ARM64) প্রসেসরের নির্দিষ্ট পরামিতি এবং অ্যাপল কীভাবে এটি ব্যবহার করে তা থেকে আসে, কেবলমাত্র প্রসেসরটির একটি 64-বিট আর্কিটেকচার রয়েছে তা থেকে নয়।

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

যদিও 64bit প্রসেসর ব্যবহার করতে পারে এমন RAM এর মোট পরিমাণকে প্রভাবিত করে না, এটি একটি প্রোগ্রামে RAM এর বড় অংশের সাথে কাজ করা সহজ করে তুলতে পারে। একটি 32-বিট প্রসেসরে চলমান যেকোনো একক প্রোগ্রামে মাত্র 4 গিগাবাইট ঠিকানার স্থান থাকে। অপারেটিং সিস্টেম এবং স্ট্যান্ডার্ড লাইব্রেরিগুলি কিছু গ্রহণ করে তা বিবেচনা করে, এটি অ্যাপ্লিকেশন ব্যবহারের জন্য 1-3 গিগাবাইটের মধ্যে প্রোগ্রামটি ছেড়ে দেয়। যাইহোক, যদি একটি 32-বিট সিস্টেমে 4 গিগাবাইটের বেশি RAM থাকে তবে সেই মেমরিটি ব্যবহার করা একটু বেশি জটিল। আমাদের প্রোগ্রামের (মেমরি ভার্চুয়ালাইজেশন) জন্য মেমরির এই বৃহত্তর অংশগুলিকে ম্যাপ করতে অপারেটিং সিস্টেমকে বাধ্য করতে হবে, অথবা আমরা প্রোগ্রামটিকে একাধিক প্রক্রিয়ায় বিভক্ত করতে পারি (যেখানে প্রতিটি প্রক্রিয়া আবার তাত্ত্বিকভাবে 4 জিবি মেমরি সরাসরি ঠিকানার জন্য উপলব্ধ)।

যাইহোক, এই "হ্যাকগুলি" এত কঠিন এবং ধীর যে ন্যূনতম অ্যাপ্লিকেশনগুলি সেগুলি ব্যবহার করে৷ অনুশীলনে, একটি 32-বিট প্রসেসরে, প্রতিটি প্রোগ্রাম শুধুমাত্র তার 1-3 গিগাবাইট মেমরি ব্যবহার করবে এবং আরও উপলব্ধ RAM একই সময়ে একাধিক প্রোগ্রাম চালানোর জন্য বা এই মেমরিটিকে বাফার (ক্যাশিং) হিসাবে ব্যবহার করতে ব্যবহার করা যেতে পারে। এই ব্যবহারগুলি ব্যবহারিক, তবে আমরা চাই যে কোনও প্রোগ্রাম সহজেই 4GB এর চেয়ে বড় মেমরির অংশগুলি ব্যবহার করতে সক্ষম হবে।

এখন আমরা ঘন ঘন (আসলে ভুল) দাবিতে আসি যে 4GB এর বেশি মেমরি ছাড়া একটি 64-বিট আর্কিটেকচার অকেজো। একটি বৃহত্তর ঠিকানা স্থান এমনকি কম মেমরির সিস্টেমে দরকারী। মেমরি-ম্যাপ করা ফাইলগুলি হল একটি সহজ টুল যেখানে ফাইলের বিষয়বস্তুর কিছু অংশ যৌক্তিকভাবে প্রক্রিয়ার মেমরির সাথে লিঙ্ক করা হয় পুরো ফাইলটিকে মেমরিতে লোড না করেই। এইভাবে, সিস্টেম, উদাহরণস্বরূপ, ধীরে ধীরে বড় ফাইলগুলিকে প্রক্রিয়া করতে পারে RAM ক্ষমতার চেয়ে অনেক গুণ বড়। একটি 32-বিট সিস্টেমে, এই ধরনের বড় ফাইলগুলি নির্ভরযোগ্যভাবে মেমরি-ম্যাপ করা যায় না, যেখানে একটি 64-বিট সিস্টেমে, এটি একটি কেকের টুকরো, অনেক বড় ঠিকানা স্থানের জন্য ধন্যবাদ।

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

ARM64

A7, 64-বিট প্রসেসর যা নতুন আইফোন 5s কে শক্তি দেয়, এটি কেবল একটি নিয়মিত এআরএম প্রসেসর নয় যা ব্যাপক রেজিস্টার সহ। ARM64 পুরানো, 32-বিট সংস্করণের তুলনায় বড় উন্নতি রয়েছে।

Apple A7 প্রসেসর।

রেজিস্ট্রি

ARM64 32-বিট ARM-এর তুলনায় দ্বিগুণ পূর্ণসংখ্যা রেজিস্টার ধারণ করে (নিবন্ধনগুলির সংখ্যা এবং প্রস্থকে বিভ্রান্ত না করার জন্য সতর্ক থাকুন - আমরা "64-বিট" বিভাগে প্রস্থ সম্পর্কে কথা বলেছি। তাই ARM64-এর দ্বিগুণ প্রশস্ত রেজিস্টার এবং দ্বিগুণ রেজিস্টার রয়েছে নিবন্ধন)। 32-বিট এআরএম-এর 16টি পূর্ণসংখ্যা রেজিস্টার রয়েছে: একটি প্রোগ্রাম কাউন্টার (পিসি - বর্তমান নির্দেশের সংখ্যা ধারণ করে), একটি স্ট্যাক পয়েন্টার (প্রগতিতে একটি ফাংশনের জন্য একটি পয়েন্টার), একটি লিঙ্ক রেজিস্টার (শেষের পরে ফিরে আসার জন্য একটি পয়েন্টার) ফাংশনের) এবং বাকি 13টি অ্যাপ্লিকেশন ব্যবহারের জন্য। যাইহোক, ARM64-এ 32টি পূর্ণসংখ্যা রেজিস্টার রয়েছে, যার মধ্যে একটি শূন্য রেজিস্টার, একটি লিঙ্ক রেজিস্টার, একটি ফ্রেম পয়েন্টার (একটি স্ট্যাক পয়েন্টারের মতো), এবং একটি ভবিষ্যতের জন্য সংরক্ষিত। এটি আমাদের অ্যাপ্লিকেশন ব্যবহারের জন্য 28টি রেজিস্টার রেখে দেয়, যা 32-বিট এআরএম-এর দ্বিগুণেরও বেশি। একই সময়ে, ARM64 ফ্লোটিং-পয়েন্ট নম্বর (FPU) রেজিস্টারের সংখ্যাকে 16 থেকে 32 128-বিট রেজিস্টারে দ্বিগুণ করেছে।

কিন্তু রেজিস্টারের সংখ্যা এত গুরুত্বপূর্ণ কেন? মেমরি সাধারণত CPU গণনার চেয়ে ধীর হয় এবং পড়া/লেখাতে অনেক সময় লাগতে পারে। এর ফলে দ্রুত প্রসেসরকে মেমরির জন্য অপেক্ষা করতে হবে এবং আমরা সিস্টেমের স্বাভাবিক গতিসীমাকে আঘাত করব। প্রসেসররা বাফারের স্তর দিয়ে এই প্রতিবন্ধকতা লুকানোর চেষ্টা করে, কিন্তু এমনকি দ্রুততম (L1) এখনও প্রসেসরের গণনার চেয়ে ধীর। যাইহোক, রেজিস্টার হল সরাসরি প্রসেসরের মেমরি সেল এবং তাদের পড়া/লেখা প্রসেসরের গতি কমানোর জন্য যথেষ্ট দ্রুত। রেজিস্টারের সংখ্যা কার্যত প্রসেসর গণনার জন্য দ্রুততম মেমরির পরিমাণকে বোঝায়, যা পুরো সিস্টেমের গতিকে ব্যাপকভাবে প্রভাবিত করে।

একই সময়ে, এই গতির জন্য কম্পাইলার থেকে ভাল অপ্টিমাইজেশান সমর্থন প্রয়োজন যাতে ভাষা এই নিবন্ধগুলি ব্যবহার করতে পারে এবং সাধারণ অ্যাপ্লিকেশন (ধীর) মেমরিতে সবকিছু সংরক্ষণ করতে না হয়।

নির্দেশনাবলী

ARM64 এছাড়াও নির্দেশ সেটে বড় পরিবর্তন আনে। একটি নির্দেশ সেট হল পারমাণবিক ক্রিয়াকলাপের একটি সেট যা একটি প্রসেসর সম্পাদন করতে পারে (যেমন 'ADD register1 register2' দুটি রেজিস্টারে সংখ্যা যোগ করে)। পৃথক ভাষার জন্য উপলব্ধ ফাংশন এই নির্দেশাবলী গঠিত হয়. আরও জটিল ফাংশনগুলিকে আরও নির্দেশাবলী কার্যকর করতে হবে, যাতে সেগুলি ধীর হতে পারে।

ARM64-এ নতুন হল AES এনক্রিপশন, SHA-1 এবং SHA-256 হ্যাশ ফাংশনের নির্দেশনা। সুতরাং একটি জটিল বাস্তবায়নের পরিবর্তে, শুধুমাত্র ভাষাটি এই নির্দেশনাকে কল করবে - যা এই ধরনের ফাংশনগুলির গণনাতে একটি বিশাল গতি আনবে এবং আশা করি অ্যাপ্লিকেশনগুলিতে নিরাপত্তা যোগ করবে। যেমন নতুন টাচ আইডিও এনক্রিপশনে এই নির্দেশাবলী ব্যবহার করে, যা বাস্তব গতি এবং নিরাপত্তার জন্য অনুমতি দেয় (তত্ত্বগতভাবে, একজন আক্রমণকারীকে ডেটা অ্যাক্সেস করার জন্য প্রসেসরকে নিজেই পরিবর্তন করতে হবে - যা তার ক্ষুদ্র আকারের দিক থেকে বলা অযৌক্তিক)।

32 বিটের সাথে সামঞ্জস্যপূর্ণ

এটি উল্লেখ করা গুরুত্বপূর্ণ যে এমুলেশনের প্রয়োজন ছাড়াই A7 সম্পূর্ণরূপে 32-বিট মোডে চলতে পারে। এর মানে হল যে নতুন আইফোন 5s 32-বিট এআরএম-এ কম্পাইল করা অ্যাপ্লিকেশনগুলিকে কোনো স্লোডাউন ছাড়াই চালাতে পারে। যাইহোক, তারপরে এটি নতুন ARM64 ফাংশন ব্যবহার করতে পারে না, তাই শুধুমাত্র A7-এর জন্য একটি বিশেষ বিল্ড তৈরি করা সর্বদা সার্থক, যা অনেক দ্রুত চালানো উচিত।

রানটাইম পরিবর্তন

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

তাদের মধ্যে একটি তথাকথিত হয় ট্যাগ করা পয়েন্টার (চিহ্নিত সূচক)। সাধারণত, বস্তু এবং সেই বস্তুর নির্দেশক মেমরির পৃথক অংশে সংরক্ষণ করা হয়। যাইহোক, নতুন পয়েন্টার প্রকারগুলি সামান্য ডেটা সহ ক্লাসগুলিকে সরাসরি পয়েন্টারে বস্তু সংরক্ষণ করার অনুমতি দেয়। এই পদক্ষেপটি বস্তুর জন্য সরাসরি মেমরি বরাদ্দ করার প্রয়োজনীয়তা দূর করে, শুধু একটি পয়েন্টার এবং এর ভিতরে বস্তু তৈরি করুন। ট্যাগ করা পয়েন্টারগুলি শুধুমাত্র 64-বিট আর্কিটেকচারে সমর্থিত হয় এই কারণে যে 32-বিট পয়েন্টারে পর্যাপ্ত দরকারী ডেটা সঞ্চয় করার জন্য পর্যাপ্ত জায়গা নেই। অতএব, iOS, OS X এর বিপরীতে, এখনও এই বৈশিষ্ট্যটিকে সমর্থন করেনি। যাইহোক, ARM64 এর আগমনের সাথে, এটি পরিবর্তিত হচ্ছে, এবং iOSও এই বিষয়ে OS X এর সাথে যোগাযোগ করেছে।

যদিও পয়েন্টার 64 বিট দীর্ঘ, তবে ARM64-এ শুধুমাত্র 33 বিট পয়েন্টারের নিজস্ব ঠিকানার জন্য ব্যবহার করা হয়। এবং যদি আমরা বাকি পয়েন্টার বিটগুলি নির্ভরযোগ্যভাবে আনমাস্ক করতে সক্ষম হই, আমরা এই স্থানটি অতিরিক্ত ডেটা সংরক্ষণ করতে ব্যবহার করতে পারি - যেমন উল্লেখ করা ট্যাগ করা পয়েন্টারগুলির ক্ষেত্রে। ধারণাগতভাবে, এটি অবজেক্টিভ-সি-এর ইতিহাসে সবচেয়ে বড় পরিবর্তনগুলির মধ্যে একটি, যদিও এটি একটি বিপণনযোগ্য বৈশিষ্ট্য নয় - তাই বেশিরভাগ ব্যবহারকারী জানেন না যে অ্যাপল কীভাবে অবজেক্টিভ-সি এগিয়ে নিয়ে যাচ্ছে।

যেমন একটি ট্যাগ করা পয়েন্টারের অবশিষ্ট স্থানে সংরক্ষণ করা যেতে পারে এমন দরকারী ডেটার জন্য, উদ্দেশ্য-সি, উদাহরণস্বরূপ, এখন এটি তথাকথিত সংরক্ষণ করতে ব্যবহার করছে রেফারেন্স গণনা (রেফারেন্সের সংখ্যা)। পূর্বে, রেফারেন্স গণনাটি মেমরিতে একটি ভিন্ন জায়গায় সংরক্ষণ করা হয়েছিল, এটির জন্য প্রস্তুত একটি হ্যাশ টেবিলে, কিন্তু এটি প্রচুর পরিমাণে alloc/dealloc/retain/releas কলের ক্ষেত্রে পুরো সিস্টেমটিকে ধীর করে দিতে পারে। থ্রেড নিরাপত্তার কারণে টেবিলটি লক করতে হয়েছিল, তাই দুটি থ্রেডে দুটি বস্তুর রেফারেন্স গণনা একই সময়ে পরিবর্তন করা যায়নি। যাইহোক, এই মানটি তথাকথিত বাকিতে নতুনভাবে ঢোকানো হয় ঈসা সূচক এটি আরেকটি অস্পষ্ট, কিন্তু বিশাল সুবিধা এবং ভবিষ্যতে ত্বরণ। যাইহোক, এটি 32-বিট আর্কিটেকচারে কখনই অর্জন করা যায় না।

সংশ্লিষ্ট বস্তু সম্পর্কে তথ্য, বস্তুটি দুর্বলভাবে উল্লেখ করা হয়েছে কিনা, বস্তুর জন্য একটি ধ্বংসকারী তৈরি করা প্রয়োজন কি না, ইত্যাদিও নতুনভাবে অবজেক্টের পয়েন্টারগুলির অবশিষ্ট স্থানে ঢোকানো হয়েছে। এই তথ্যের জন্য ধন্যবাদ, উদ্দেশ্য-সি রানটাইম মৌলিকভাবে রানটাইমকে গতিশীল করতে সক্ষম, যা প্রতিটি অ্যাপ্লিকেশনের গতিতে প্রতিফলিত হয়। পরীক্ষা থেকে, এর মানে হল সমস্ত মেমরি ম্যানেজমেন্ট কলের প্রায় 40-50% গতি। শুধুমাত্র 64-বিট পয়েন্টারে স্যুইচ করে এবং এই নতুন স্থান ব্যবহার করে।

উপসংহার

যদিও প্রতিযোগীরা এই ধারণাটি ছড়িয়ে দেওয়ার চেষ্টা করবে যে একটি 64-বিট আর্কিটেকচারে স্থানান্তর করা অপ্রয়োজনীয়, আপনি ইতিমধ্যেই জানতে পারবেন যে এটি একটি খুব অজ্ঞাত মতামত। এটা সত্য যে আপনার ভাষা বা অ্যাপ্লিকেশনগুলিকে অভিযোজিত না করে 64-বিটে স্যুইচ করা আসলে কিছুই বোঝায় না - এটি এমনকি পুরো সিস্টেমকে ধীর করে দেয়। কিন্তু নতুন A7-এ একটি নতুন নির্দেশনা সেট সহ একটি আধুনিক ARM64 ব্যবহার করা হয়েছে, এবং Apple সমগ্র অবজেক্টিভ-সি ভাষাকে আধুনিকীকরণ করতে এবং নতুন ক্ষমতার সদ্ব্যবহার করতে কষ্ট করেছে - তাই প্রতিশ্রুত গতি।

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

উৎস: mikeash.com
.