জিসিসি: মার্চ মিটুনের থেকে কীভাবে আলাদা?


88

আমি এর জন্য জিসিসির ম্যান পেজটি স্ক্রাব করার চেষ্টা করেছি, তবে এখনও তা পাই না।

মধ্যে পার্থক্য কি -marchএবং -mtune?

যখন একটি মাত্র -marchউভয় ব্যবহার করে ? এটা কি কখনও সম্ভব -mtune?

উত্তর:


97

আপনি যদি ব্যবহার করেন -marchতবে জিসিসি নির্দিষ্ট সিপিইউতে কাজ করে এমন নির্দেশাবলী উত্পন্ন করতে স্বাধীন হবে, তবে (সাধারণত) আর্কিটেকচার পরিবারের পূর্ববর্তী সিপিইউতে নয়।

আপনি যদি কেবল ব্যবহার করেন -mtuneতবে সংকলক কোডটি উত্পন্ন করবে যা তাদের যে কোনওটিতে কাজ করে তবে আপনার নির্দেশিত নির্দিষ্ট সিপিইউতে দ্রুত নির্দেশিত নির্দেশক্রমের অনুক্রমের পক্ষে হবে। উদাহরণস্বরূপ CP সিপিইউ-এর জন্য লুপ-আনرولোলিং হুরিস্টিকস যথাযথভাবে সেট করা।


-march=foo-mtune=fooআপনি যদি অন্য কোনও নির্দিষ্ট না করেন তা বোঝায় -mtune। টিউনিংয়ের বিষয়ে কিছু না করে -marchযেমন বিকল্পগুলি সক্ষম করার চেয়ে ব্যবহার করা আরও ভাল কেন এটি একটি কারণ -mavx

ক্যাভেট: -march=nativeএকটি সিপিইউতে যা জিসিসি বিশেষভাবে স্বীকৃতি দেয় না তা এখনও জিসিসি সনাক্ত করতে পারে এমন নতুন নির্দেশিকা সেট সক্ষম করে তবে চলে যাবে -mtune=generic। একটি নতুন পর্যাপ্ত জিসিসি ব্যবহার করুন যা আপনার সিপিইউ সম্পর্কে ভাল জানেন যদি আপনি এটি ভাল কোড তৈরি করতে চান।


10
উভয়টি ব্যবহার করা অর্থবোধ করে কিনা বা একই মানতে সেট করা হলে এমটিউন রিডানডান্ট কিনা তা উত্তর দেয় না।
পাভেল Šিমেরদা

12
@ পাভেলিমারদা স্বজ্ঞাতভাবে উত্তর 2 টি বৈশিষ্ট্যের সংজ্ঞায় অন্তর্ভুক্ত। তদ্ব্যতীত, ডকুমেন্টেশনটি স্পষ্টভাবে জানিয়ে দেয় যে marchতা বোঝায় mtune। সুতরাং, আপনার আপত্তিগুলির উত্তর যথাক্রমে না এবং হ্যাঁ।
আন্ডারস্কোর_ডি

এটি এত মার্জিতভাবে ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ! আপনি এটি বুঝতে সহজ করে তোলে।
রহিম খোজা

4
লোকদের একটি টিএল; ডাঃ দরকার: মার্চ ব্যবহার করুন আপনি যদি এটি কেবল আপনার প্রসেসরে চালান, আপনি যদি অন্য প্রসেসরের জন্য এটি নিরাপদ চান তবে -মুনচুন ব্যবহার করুন।
জে রিভ

4
ব্যবহারকারীরা আরও বুঝতে হবে যে পুরানো সংকলকগুলি (কিছু সিপিইউয়ের অস্তিত্বের আগে প্রকাশিত হয়নি) এর ফলে বিভিন্ন অনুকূল mtuneএবং marchসংমিশ্রণের ফলাফল হতে পারে । এই ব্লগ পোস্টটি অন্যদের সাথে এই পয়েন্টটি আলোকিত করে: lemire.me/blog/2018/07/25/…
qneill

53

এটাই আমি গুগল করে তুলেছি:

-march=Xবিকল্প একটি CPU- র নাম নেয় Xএবং জিসিসি কোডের সমস্ত বৈশিষ্ট্য ব্যবহার করে জেনারেট করতে পারবেন X। জিসিসি ম্যানুয়ালটি সঠিকভাবে ব্যাখ্যা করে যে কোন সিপিইউ নামের অর্থ সিপিইউ পরিবার এবং বৈশিষ্ট্যগুলি।

কারণ বৈশিষ্ট্য সাধারণত যোগ করা হয়, কিন্তু না সরানো, একটি বাইনারি নির্মিত -march=XCPU তে চালানো হবে 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=genericgenericজিসিসি উত্পাদন কোড তৈরি করে যা বর্তমানের সিপিইউগুলিতে সবচেয়ে ভাল চলে ( 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আপনি যদি কেবল একই মেশিনে চালিত হন তবে আপনি তৈরি করেন।


4
তবে আপনি যদি ব্যবহার করেন তবে আপনি -march=nativeনির্দিষ্ট করতে চাইতে পারেন -mtune=X, কারণ -mtune=genericএখানে আলোচনা হিসাবে ডিফল্টটি এখনও রয়েছে : lemire.me/blog/2018/07/25/…
রোল্যান্ড ওয়েবার

@ রোল্যান্ডওয়েবার: এটি কেবল তখনই ঘটে যখন আপনি নিজের সিপিইউ সম্পর্কে জানতে বয়স্ক জিসিসি ব্যবহার করেন। যদি আপনি এমন কোনও জিসিসি ব্যবহার করেন যা আপনার সিপিইউ সম্পর্কে জানে তবে -march=nativeজরিমানাটি বোঝায় tune=native। এই নিবন্ধটি কেবল খারাপ ক্ষেত্রে উপস্থাপন করে। নতুনতর জিসিসি সংস্করণগুলি সাধারণভাবে আরও ভাল কোড তৈরি করে, বিশেষত যখন AVX2 এবং AVX-512 এর মতো নতুন নির্দেশাবলী ব্যবহার করে। এবং আপনার সিপিইউয়ের জন্য ডিজাইন করা টিউনিং সেটিংস (যেমন লুপ আনরোল হিউরিস্টিকস) রাখা একটি নির্দিষ্ট প্লাস। সুতরাং আপনি যদি এই অপশনগুলি ব্যবহার করার জন্য পারফরম্যান্স সম্পর্কে যথেষ্ট যত্নশীল হন তবে একটি নতুন জিসিসি ব্যবহার করুন, আপনার সিপিইউ সম্পর্কে কমপক্ষে একজন জানেন, সম্ভবত বর্তমান স্থিতিশীল রিলিজ।
পিটার কর্ডেস

এটি স্তন্যপান করে যে জিসিসি tune=genericএকই মাইক্রোআরকিটেকচার পরিবারের নতুন সদস্যের চেয়ে ভাল কিছু করতে পারে না , বিশেষত কাবি লেকের মতো কিছু যা আক্ষরিক অর্থে স্কাইলেকে মাইক্রো আঞ্চলিকভাবে সমান। তবে আমি মনে করি এটির এখনও একটি আলাদা পরিবার / পদক্ষেপ রয়েছে যাতে একটি জিসিসি কেবল স্কাইলেকের সম্পর্কে জানত এবং আরও পুরোনো টিউনটির জন্য এটি সনাক্ত করতে ব্যর্থ হতে পারে।
পিটার কর্ডেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.