64 বিট প্রোগ্রামগুলি কি 32 বিট সংস্করণের চেয়ে বড় এবং দ্রুত?


85

আমি মনে করি আমি x86 এর দিকে মনোনিবেশ করছি, তবে আমি সাধারণত 32 থেকে 64 বিট থেকে সরানোতে আগ্রহী।

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

আমি আরও শুনেছি যে সম্ভাব্য ওভারল্যাপিং 4 জি অ্যাড্রেস স্পেসের কারণে প্রসঙ্গটি স্যুইচ করার সময় x86 এর 32 বিট মোডটিকে তার ক্যাশে ফ্লাশ করতে হবে।

সুতরাং, 64 বিটের আসল সুবিধাগুলি কী কী?

এবং পরিপূরক প্রশ্ন হিসাবে, 128 বিট আরও ভাল হতে পারে?

সম্পাদনা করুন:

আমি সবেমাত্র আমার প্রথম 32/64 বিট প্রোগ্রাম লিখেছি। এটি 16 বাইট (32 বি সংস্করণ) বা 32 বাইট (64 বি সংস্করণ) অবজেক্টের লিঙ্কযুক্ত তালিকাগুলি / গাছগুলি তৈরি করে এবং স্ট্যাডারকে প্রচুর মুদ্রণ করে - একটি সত্যিকারের দরকারী প্রোগ্রাম নয়, এবং কিছু সাধারণ নয়, তবে এটি আমার প্রথম।

আকার: 81128 (32 বি) ভি 83672 (64 বি) - এত পার্থক্য নেই

গতি: 17 সে (32 বি) ভি 24 এস (64 বি) - 32 বিট ওএসে চলছে (ওএস-এক্স 10.5.8)

হালনাগাদ:

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

https://sites.google.com/site/x32abi/



4
এবং আমার ফ্রমা কয়েক দিন আগে: স্ট্যাকওভারফ্লো.com
মিঃ বয়

আমি সম্মত কিছু ওভারল্যাপ রয়েছে, তবে এখনও সিপিইউ ক্যাশে এবং 128 বিট অংশ নেই take লিঙ্কগুলির জন্য ধন্যবাদ সুমা এবং জন Thanks
ফিলাকলবর্ন


"আমি আরও শুনেছি যে সম্ভাব্য ওভারল্যাপিং 4 জি অ্যাড্রেস স্পেসের কারণে প্রসঙ্গটি স্যুইচ করার সময় x86 এর 32 বিট মোডটিকে তার ক্যাশে ফ্লাশ করতে হবে।" আপনি কি দয়া করে আমাকে একটি উল্লেখ করতে পারেন যা এই বিষয়ে কথা বলবে?
gkb0986

উত্তর:


30

32 বি সম্বোধন আপনাকে অনুমতি দেবে এমন আরও মেমোরি অ্যাক্সেস না করা অবধি সুবিধাগুলি অল্প হবে।

B৪ বি সিপিইউতে চলার সময়, আপনি 32 বি বা 64 বি কোড চালিয়ে যাচ্ছেন না কেন আপনি একই মেমরি ইন্টারফেস পাবেন (আপনি একই ক্যাশে এবং একই বিএস ব্যবহার করছেন)।

যদিও x64 আর্কিটেকচারে আরও কয়েকটি নিবন্ধ রয়েছে যা সহজতর অপ্টিমাইজেশনের অনুমতি দেয়, এটি প্রায়শই ফ্যাক্টরগুলির দ্বারা প্রতিরোধ করা হয় পয়েন্টারগুলি এখন বড় এবং পয়েন্টারগুলির সাথে কোনও কাঠামো ব্যবহার করে উচ্চতর মেমরি ট্র্যাফিক হয় in আমি 32b এর তুলনায় প্রায় 15-30% হওয়ার তুলনায় 64b অ্যাপ্লিকেশনটির সামগ্রিক মেমরির ব্যবহার বৃদ্ধি অনুমান করব।


4
প্রস্তাবিত x32 এবিআই সম্পর্কে আপনার মতামত কী?
ফিলক্লাবর্ন

আমি মনে করি মেমকি এবং আরআরপিপি 32 বিট সিপিইউর থেকে দ্রুত হবে কারণ এটি প্রতিবার একটি শব্দ পড়বে যেহেতু word৪ বিট সিপিইউতে একটি শব্দ 8 বাইট রয়েছে
মার্ক মা

43

আমি সাধারণত x86- এর তুলনায় x86-64 এ গণনা-নিবিড় কোডের জন্য 30% গতির উন্নতি দেখতে পাই। এটি সম্ভবত আমাদের 8 x 32 বিট সাধারণ উদ্দেশ্য নিবন্ধ এবং 8 এক্স এসএসই রেজিস্টারের পরিবর্তে 16 x 64 বিট সাধারণ উদ্দেশ্য নিবন্ধ এবং 16 x এসএসই রেজিস্টরের কারণে হয়। এটি একটি এক্স ৮86 Linux-64৪ লিনাক্সের ইনটেল আইসিসি সংকলক (১১.১) এর সাথে - অন্যান্য সংকলক (যেমন জিসিসি), বা অন্যান্য অপারেটিং সিস্টেমের (উদাহরণস্বরূপ উইন্ডোজ) এর ফলাফল অবশ্যই ভিন্ন হতে পারে।


4
'গণনা নিবিড়' দ্বারা আপনি গ্রাফিক্স, ম্যাট্রিক্স, ডিএফটি?
ফিলক্লবর্ন

4
@phil: হ্যাঁ, প্রধানত চিত্র প্রক্রিয়াকরণ, বেশিরভাগ পূর্ণসংখ্যা (স্থির পয়েন্ট), SIMD কোড, ইত্যাদি প্রচুর
পল আর

আমি দেখেছি যে 64৪-বিট সংকলকগুলি এসএসই রেজিস্টারগুলি ব্যবহার করে যখন ৩২-বিট সংকলকগুলি স্ট্যান্ডার্ড ALU ব্যবহার করে। সংকীর্ণ FP প্রস্থ (64৪ বনাম ৮০) অতিরিক্ত অতিরিক্ত নির্দেশের কারণে এটি 64৪-বিট কোডটি দ্রুত করে তোলে।
IamIC

16

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

-৪-বিটের ব্যবহারিক সুবিধাগুলি হিসাবে ... সর্বাধিক সুস্পষ্ট হ'ল আপনি একটি বড় ঠিকানার স্থান পেয়েছেন, সুতরাং যদি কোনও ফাইল এমএমএপ করেন তবে আপনি এটির আরও একবারে সম্বোধন করতে পারেন (এবং বড় ফাইলগুলিকে মেমোরিতে লোড করতে পারেন)। আরেকটি সুবিধা হ'ল, কম্পাইলারটি অনুকূলিতকরণের পক্ষে একটি ভাল কাজ করে ধরে নিয়েছে, আপনার অনেকগুলি গাণিতিক ক্রিয়াকলাপ সমান্তরাল হতে পারে (উদাহরণস্বরূপ, দুটি রেজিস্টারে 32 জোড়া বিট সংখ্যার দুটি জোড়া রাখা এবং একক অ্যাড অপারেশনে দুটি সংযোজন করা) এবং বড় সংখ্যা গণনা আরও দ্রুত চলবে। এটি বলেছে, পুরো -৪-বিট বনাম ৩২-বিট জিনিসটি আপনাকে এ্যাসিম্পোটিক জটিলতায় মোটেই সহায়তা করবে না, তাই আপনি যদি নিজের কোডটি অপ্টিমাইজ করতে খুঁজছেন তবে আপনার সম্ভবত এই ধরণের ধ্রুবক কারণগুলির চেয়ে বরং অ্যালগরিদমের দিকে নজর দেওয়া উচিত।

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


> "উদাহরণস্বরূপ, দুটি রেজিস্টারে 32-বিট সংখ্যার দুটি জোড়া রাখা এবং একক সংযোজন ক্রিয়ায় দুটি সংযোজন করা" এখানে কি কোনও সংকলক আছে? এছাড়াও, এসএসই নির্দেশাবলী ব্যবহার করে x86 এ একই কাজ করা যেতে পারে বলে মনে হয়।
সুমা

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

আমার ধারণা আপনি যদি আগ্রহী হন তবে আপনি 64 বিট রেজিস্টারে একাধিক 16 বিট পাটিগণিত করতে পারেন। অগোছালো মনে হবে, তবে আমি বাজি ধরেছি এটি হয়ে গেছে।
ফিলাকলবর্ন

'কনস্ট্যান্ট ফ্যাক্টর' - শব্দটি ব্রায়ান হার্ভে বলার মতো কিছু।
ফিলক্লবর্ন

5

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


4

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

উপর Win32কনফিগারেশন: ~ 17.0s;

x64কনফিগারেশনে স্যুইচ করার পরে : ~ 10.3s;

এটি ত্বরণের 41% !


2

আপনার অ্যাপ্লিকেশনটি bit৪ বিটের দিকে সরিয়ে নেওয়ার পক্ষে কেবলমাত্র ন্যায়সঙ্গত হওয়া দরকার যেমন বৃহত ডাটাবেস বা ইআরপি অ্যাপ্লিকেশনগুলির মতো কমপক্ষে একযোগে প্রায় একশত ব্যবহারকারী যেখানে 2 জিবি সীমা ছাড়িয়ে যাবে যখন অ্যাপ্লিকেশনগুলি আরও ভাল পারফরম্যান্সের জন্য ক্যাশে যাবে তখন আরও মেমরির প্রয়োজন। এটি বিশেষত উইন্ডোজ ওএসে ক্ষেত্রে যেখানে পূর্ণসংখ্যা এবং দীর্ঘ এখনও 32 বিট থাকে (তাদের নতুন পরিবর্তনশীল _int64 রয়েছে Only কেবলমাত্র পয়েন্টারগুলি 64 বিট হয় In বাস্তবে WW64 উইন্ডোজ x64 এ অত্যন্ত অনুকূলিত হয় যাতে 32 বিট অ্যাপ্লিকেশনগুলি 64 বিট উইন্ডোজটিতে কম পেনাল্টি সহ চালিত হয়) ওএস। উইন্ডোজ এক্স 64 এ আমার অভিজ্ঞতা 32 বিট অ্যাপ্লিকেশন সংস্করণ যা 10 বিঘের চেয়ে 10-15% বেশি দ্রুত চালিত হয়, কারণ প্রাক্তন ক্ষেত্রে কমপক্ষে মালিকানাধীন মেমরি ডাটাবেসগুলির জন্য আপনি বি-ট্রি বজায় রাখার জন্য পয়েন্টার গাণিতিক ব্যবহার করতে পারেন (ডাটাবেস সিস্টেমের বেশিরভাগ প্রসেসরের নিবিড় অংশ) । সংক্ষিপ্ততর নিবিড় অ্যাপ্লিকেশনগুলির জন্য 32-64 বিট অপারেটিং সিস্টেমে ডাবল না দিয়ে সর্বাধিক নির্ভুলতার জন্য বড় দশমিকের প্রয়োজন। এই অ্যাপ্লিকেশনগুলি সফ্টওয়্যার অনুকরণের পরিবর্তে স্থানীয়ভাবে _int64 ব্যবহার করতে পারে। অবশ্যই বৃহত্তর ডিস্ক ভিত্তিক ডাটাবেসগুলি 32 টি বিটের চেয়ে বেশি উন্নতি দেখায় কেবল ক্যোরি প্ল্যানিং এবং এর জন্য আরও বড় মেমরির ব্যবহার করার দক্ষতার কারণে।


প্রথমে, intপ্রয়োগের পরিবেশের শব্দের আকার নির্বিশেষে সর্বত্র 32-বিট থেকে যায়। কি কম্পাইলার জন্য longএখনো 32-বিট যখন 64-বিট জন্য সংকলন? আপনি কি দাবি করছেন যে এমএসভিসি এটি করে? আফাইক, এটি এমনকি [মোটামুটি] সি ++ 11 স্ট্যান্ডার্ডের মধ্যে আচ্ছাদিত: sizeof(long) == sizeof(void*)দয়া করে, কেউ, আমি ভুল হলে আমাকে সংশোধন করুন, কারণ এমএসভিসিতে আমার সহজ অ্যাক্সেস নেই।
ম্যাথু হল

4
@ ম্যাথেজ হল: এর উইন্ডোজগুলি bit৪ বিট অপারেটিং সিস্টেমের স্ট্যান্ডার্ড এবং এর জন্য এমএসভিসি এই এলএলপি model৪ মডেলটি অনুসরণ করে (ইউনিক্স ভেরিয়েন্টের জন্য বনাম এলপি 64)। ( এমএসডিএন.মাইক্রোসফটকম /en-us/library/3b2e7499(v=vs.100).aspx ) দেখুন।
গিরিশক

1

প্রতিটি মেমরি আনার জন্য সিপিইউ এবং র‌্যামের মধ্যে আরও ডেটা স্থানান্তরিত হয় (32 এর পরিবর্তে 64৪ বিট), সুতরাং 64৪-বিট প্রোগ্রামগুলি আরও দ্রুত সরবরাহ করা যেতে পারে যাতে তারা লিখিত হয় যাতে তারা সঠিকভাবে এটির সুবিধা নিতে পারে।


11
প্রকৃতপক্ষে, এটি এতটা নয়: মেমোরি বাসটি প্রস্থের যা কিছু প্রসেসর, প্রসেসরের রেজিস্টারগুলির প্রস্থের সাথে প্রয়োজনীয় কিছু নেই। কিছু 32 বিট সিস্টেমগুলি একবারে 128 বিট নিয়ে আসে, সেখানে there৪ টি বিট সিস্টেম রয়েছে যা একসাথে ৩২ টি আনে এবং এমনকি 32 টি বিট সিস্টেমও একসাথে 8 বিটের চেয়ে বেশি স্মৃতি আনতে পারে না।
অ্যান্ড্রু ম্যাকগ্রিগোর

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

4
যখন প্রচুর পরিমাণে মেমোরি স্থানান্তরিত হয়, আপনি x8 এবং x64 উভয় ক্ষেত্রে 128 বি সিমডি নির্দেশাবলী ব্যবহার করবেন।
সুমা

ঠিক কোনটি "64 বিট সিস্টেম যা একবারে 32 টি আনে" সেখানে কী আছে? কিছু নাম দিন। যদি সেখানে থাকে তবে সেগুলি কি আসলেই "64 বিট সিস্টেম"?
জনি

1

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

সাধারণত, যদিও, 64 বিট কোড অগত্যা কোনও দ্রুত নয়, এবং রানটাইম সময় কোড এবং মেমরির ব্যবহারের জন্য উভয়ই সাধারণত বড়।


4
আপনি যে পয়েন্টটি তৈরি করছেন তা আমি যথেষ্ট পাই না। প্রাথমিকভাবে (প্রথম বাক্য) আপনি বলেছেন যে 64৪ বিট প্রোগ্রামগুলি সাধারণত দ্রুত চলবে তবে তার পরে আপনার শেষ বাক্যটি "সত্যই নয়" বলার জন্য সমস্ত কিছু ব্যাকপ্লেডিং বলে মনে হচ্ছে
এসএন

1

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


না এটা অভয়। যদি র‌্যামের প্রয়োজনীয়তা 4 গিগাবাইটের বেশি হয় তবে কেবল এটি আরও দ্রুত। আপনি 32 বিট আর্কিটেকচারে 4 গিগাবাইটেরও কম ডেটাতে 1000 মিলিয়ন মিলিয়ন সংখ্যার অ্যারে সহজেই সন্ধান করতে পারেন। সুতরাং এখানে
bit৪
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.