در مورد march، همونطور که گفتم نوع پردازنده رو به کامپایلر اعلام میکنه و کامپایلر با دونستن نوع پردازنده، میدونه که باید از چه دستورات زبان ماشینی استفاده کنه و خب این سرعت رو بالا میبره. اول شما باید نوع پردازنده خودتون رو تشخیص بدید، اگر درست یادم مونده باشه، توی لینوکس با این دستور میتونید نوع پردازنده رو ببینید:
cat /proc/cpuinfo
بعد از اینکه نوع پردازنده رو فهمیدید، میتونید از مقادیر زیر برای معرفی اون استفاده کنید.
i386
پردازنده i386 اصلی اینتل
i586, pentium
پردازنده معمولی پنتیوم اینتل که از دستورالعمل MMX پشتیبانی نمیکنند.
pentium-mmx
پردازنده پنتیومی که از دستورالعمل MMX پشتیبانی میکنه.
pentiumpro
پردازنده پنیتوم پرو
i686
مثل pentiumpro هست اما کدی که با این معماری کامپایل میشه، روی همه پردازنده های هم خوانواده هم اجرا میشه.
core2
[پردازنده رایج]پردازنده ۶۴ بیتی Core2 که از دستورالعملهای MMX, SSE, SSE2, SSE3 و SSSE3 پشتیبانی میکنه. [/پردازنده رایج]
k8, opteron, athlon64, athlon-fx
پردازنده های AMD K8 شست و چهار بیتی (این پردازنده از همه دستورالعملهای ۶۴ بیت به غیر از SSE3 پشتیبانی میکنند.)
k8-sse3, opteron-sse3, athlon64-sse3
مثل بالایی هست اما برای پردازنده هایی که دستورالعمل SSE3 هم پشتیبانی میکنند.
از دوستان اگر کسی توی شناسایی پردازنده مشکل داره مشخصات پردازندش رو اعلام کنه تا اگه تونستیم راهنمایی کنیم. برای اکثر پردازنده های اینتل چند هسته ای رایج توی لپتاپها مثل core i5 و corei3 و core i7 همون مقدار core2 درست هست.
MHA میشه بیشتر توضیح بدی؟ منظورتون رو خوب نفهمیدم. خب برنامههایی که به زبان c نوشتید رو با پسوند .c ذخیره کنید و برنامههای ++c رو هم با پسوند .cxx یا .cpp
دو نکته خیلی مهم:
اگر march- رو روی native تنظیم کنید کامپایلر سعی میکنه خودش نوع پردازنده رو حدس بزنه که امتحانش البته ضرری نداره اما بهتره شما خودتون نوع پردازتون رو بدونید.
اگر نوع اشتباه استفاده کنید، به احتمال زیاد برنامه ها درست کار نخواهند کرد!!