আমি এর জন্য জিসিসির ম্যান পেজটি স্ক্রাব করার চেষ্টা করেছি, তবে এখনও তা পাই না।
মধ্যে পার্থক্য কি -march
এবং -mtune
?
যখন একটি মাত্র -march
উভয় ব্যবহার করে ? এটা কি কখনও সম্ভব -mtune
?
উত্তর:
আপনি যদি ব্যবহার করেন -march
তবে জিসিসি নির্দিষ্ট সিপিইউতে কাজ করে এমন নির্দেশাবলী উত্পন্ন করতে স্বাধীন হবে, তবে (সাধারণত) আর্কিটেকচার পরিবারের পূর্ববর্তী সিপিইউতে নয়।
আপনি যদি কেবল ব্যবহার করেন -mtune
তবে সংকলক কোডটি উত্পন্ন করবে যা তাদের যে কোনওটিতে কাজ করে তবে আপনার নির্দেশিত নির্দিষ্ট সিপিইউতে দ্রুত নির্দেশিত নির্দেশক্রমের অনুক্রমের পক্ষে হবে। উদাহরণস্বরূপ CP সিপিইউ-এর জন্য লুপ-আনرولোলিং হুরিস্টিকস যথাযথভাবে সেট করা।
-march=foo
-mtune=foo
আপনি যদি অন্য কোনও নির্দিষ্ট না করেন তা বোঝায় -mtune
। টিউনিংয়ের বিষয়ে কিছু না করে -march
যেমন বিকল্পগুলি সক্ষম করার চেয়ে ব্যবহার করা আরও ভাল কেন এটি একটি কারণ -mavx
।
ক্যাভেট: -march=native
একটি সিপিইউতে যা জিসিসি বিশেষভাবে স্বীকৃতি দেয় না তা এখনও জিসিসি সনাক্ত করতে পারে এমন নতুন নির্দেশিকা সেট সক্ষম করে তবে চলে যাবে -mtune=generic
। একটি নতুন পর্যাপ্ত জিসিসি ব্যবহার করুন যা আপনার সিপিইউ সম্পর্কে ভাল জানেন যদি আপনি এটি ভাল কোড তৈরি করতে চান।
march
তা বোঝায় mtune
। সুতরাং, আপনার আপত্তিগুলির উত্তর যথাক্রমে না এবং হ্যাঁ।
mtune
এবং march
সংমিশ্রণের ফলাফল হতে পারে । এই ব্লগ পোস্টটি অন্যদের সাথে এই পয়েন্টটি আলোকিত করে: lemire.me/blog/2018/07/25/…
এটাই আমি গুগল করে তুলেছি:
-march=X
বিকল্প একটি CPU- র নাম নেয় X
এবং জিসিসি কোডের সমস্ত বৈশিষ্ট্য ব্যবহার করে জেনারেট করতে পারবেন X
। জিসিসি ম্যানুয়ালটি সঠিকভাবে ব্যাখ্যা করে যে কোন সিপিইউ নামের অর্থ সিপিইউ পরিবার এবং বৈশিষ্ট্যগুলি।
কারণ বৈশিষ্ট্য সাধারণত যোগ করা হয়, কিন্তু না সরানো, একটি বাইনারি নির্মিত -march=X
CPU তে চালানো হবে X
চেয়ে নতুন CPU- র চালানো একটি ভাল সুযোগ রয়েছে X
, কিন্তু এটা প্রায় নিশ্চয় চেয়ে পুরোনো কিছু চলবে নাX
। কিছু নির্দিষ্ট নির্দেশাবলী সেট (3 ডি এখন !, আমি অনুমান করি?) কোনও নির্দিষ্ট সিপিইউ বিক্রেতার সাথে সুনির্দিষ্ট হতে পারে, এগুলি ব্যবহার করে সম্ভবত আপনাকে এমন বাইনারি পাওয়া যাবে যা প্রতিযোগী সিপিইউগুলিতে চলবে না, অন্যথায় বা অন্যথায়।
-mtune=Y
অপশনটি দ্রুত চালানোর জন্য কোডটি টিউন Y
অন্যান্য CPU- র উপর চালানো হতে পারে চেয়ে। -march=X
বোঝা -mtune=X
।-mtune=Y
ওভাররাইড হবে না -march=X
, সুতরাং, উদাহরণস্বরূপ, এটি সম্ভবত কোনও বোধগম্য নয় -march=core2
এবং -mtune=i686
- আপনার কোড core2
যাইহোক, তার চেয়েও পুরানো কিছুতে চলবে না, কারণ -march=core2
, কেন পৃথিবীতে আপনি কোর 2 এর চেয়েও পুরানো (কম বৈশিষ্ট্যযুক্ত) কোনওটির জন্য অনুকূলিত করতে চান? -march=core2 -mtune=haswell
আরও বোধগম্য করে: core2
যা সরবরাহ করে (যা আপনাকে যা -march=i686
দেয় তার চেয়ে অনেক বেশি এখনও !) এর বাইরে কোনও বৈশিষ্ট্য ব্যবহার করবেন না , তবে এর চেয়ে বেশি নতুন haswell
সিপিইউগুলির জন্য কোডটি অনুকূলিতকরণ করবেন না core2
।
এছাড়াও আছে -mtune=generic
। generic
জিসিসি উত্পাদন কোড তৈরি করে যা বর্তমানের সিপিইউগুলিতে সবচেয়ে ভাল চলে ( generic
জিসিসির একটি সংস্করণ থেকে অন্য সংস্করণে পরিবর্তনের অর্থ ) of জেন্টু ফোরামগুলিতে গুজব রয়েছে -march=X -mtune=generic
যে X
কোড তৈরি করে যা কোড দ্বারা উত্পাদিত কোডের চেয়ে দ্রুত চলে -march=X -mtune=X
(বা ঠিক -march=X
যেমনটি -mtune=X
বোঝানো হয়েছে)। এটি সত্য কিনা না ধারণা নেই।
সাধারণত, আপনি যা প্রয়োজন তা সঠিকভাবে না জানলে মনে হয়, সেরা কোর্সটি নির্দিষ্ট করা -march=<oldest CPU you want to run on>
এবং -mtune=generic
( -mtune=generic
অন্তর্নিহিত প্রতিরোধের জন্য এখানে-mtune=<oldest CPU you want to run on>
, কারণ আপনি সম্ভবত সবচেয়ে পুরানো সিপিইউর জন্য অনুকূলিত করতে চান না)। বা কেবলমাত্র -march=native
আপনি যদি কেবল একই মেশিনে চালিত হন তবে আপনি তৈরি করেন।
-march=native
নির্দিষ্ট করতে চাইতে পারেন -mtune=X
, কারণ -mtune=generic
এখানে আলোচনা হিসাবে ডিফল্টটি এখনও রয়েছে : lemire.me/blog/2018/07/25/…
-march=native
জরিমানাটি বোঝায় tune=native
। এই নিবন্ধটি কেবল খারাপ ক্ষেত্রে উপস্থাপন করে। নতুনতর জিসিসি সংস্করণগুলি সাধারণভাবে আরও ভাল কোড তৈরি করে, বিশেষত যখন AVX2 এবং AVX-512 এর মতো নতুন নির্দেশাবলী ব্যবহার করে। এবং আপনার সিপিইউয়ের জন্য ডিজাইন করা টিউনিং সেটিংস (যেমন লুপ আনরোল হিউরিস্টিকস) রাখা একটি নির্দিষ্ট প্লাস। সুতরাং আপনি যদি এই অপশনগুলি ব্যবহার করার জন্য পারফরম্যান্স সম্পর্কে যথেষ্ট যত্নশীল হন তবে একটি নতুন জিসিসি ব্যবহার করুন, আপনার সিপিইউ সম্পর্কে কমপক্ষে একজন জানেন, সম্ভবত বর্তমান স্থিতিশীল রিলিজ।
tune=generic
একই মাইক্রোআরকিটেকচার পরিবারের নতুন সদস্যের চেয়ে ভাল কিছু করতে পারে না , বিশেষত কাবি লেকের মতো কিছু যা আক্ষরিক অর্থে স্কাইলেকে মাইক্রো আঞ্চলিকভাবে সমান। তবে আমি মনে করি এটির এখনও একটি আলাদা পরিবার / পদক্ষেপ রয়েছে যাতে একটি জিসিসি কেবল স্কাইলেকের সম্পর্কে জানত এবং আরও পুরোনো টিউনটির জন্য এটি সনাক্ত করতে ব্যর্থ হতে পারে।