PDA

View Full Version : سوال: فرق کامپایل 32 بیتی و 64 بیتی با AnyCPU



heivin
شنبه 07 شهریور 1388, 15:11 عصر
یه برنامه نوشتم که مشتری از اون در یک کامپیوتر 64 بیتی استفاده میکنه آیا نسخه 64بیتی براش درست کنم یا 32بیتی یا نه همون AnyCPU?
اصولا چه فرقی بین این نوع کامپایلها وجود داره مزیتها و اشکالاتشون چیه؟

Open-Source
شنبه 07 شهریور 1388, 17:50 عصر
اصولا برنامه های 32 بیتی روی 64 بیتی کار میکنند.
(من خودم رو ویندوز 64 بیت ویستا تست کردم).

اگر برنامه 32 بیت باشد یه Program File X86 درست میکند و برنامه آنجا نصب میشود.

ولی فکر میکنم برنامه AnyCpu بود.

چون من یه برنامه CloneCD داشتم که 32 بیت بود ولی روی 64 اجرا نمیشد.

heivin
شنبه 07 شهریور 1388, 18:36 عصر
چه فرقی بین این نوع کامپایلها وجود داره مزیتها و اشکالاتشون چیه؟
آیا اگه با 64 بیتی کامپایل کنم سرعت برنامه روی سیستم 64بیتی بالا میره یا فرقی نداره؟ اگه فرقی نداره پس چرا کامپایل 64 بیتی رو ساختن؟

raravaice
شنبه 07 شهریور 1388, 19:02 عصر
منظور از 64 بیت X64 و 32 بیت X86 نوع CPU هست نه سیستم عامل.
مثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.

منظور از 64 یا 32 بیت بودن CPU در ثباتها خلاصه میشه که شما در برنامه های در سطح دات نت هیچ وقت باهاشون در گیر نمیشید.


موفق باشید

alireza_tavakol
یک شنبه 08 شهریور 1388, 02:45 صبح
اگه CPU کامپیوتر اجرا کننده برنامه 64 بیتی باشه ولی سیستم عامل نصب شده 32 باشد ، عملا شما از 32 بیت ثبات های CPU استفاده نکرده اید و امکان اجرا کردن برنامه های 64 رو ندارید چون برنامه ها توسط سیستم عامل مدیریت میشوند

تعداد بیت ها در CPU و در برنامه ها و سیستم عمال ها باعث افزایش سرعت نخواهد شد بلکه باعث افزایش قدرت خواهد شد


مثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.

این امر بخاطر پشتیبانی و استفاده از Smart cach و cach L3 بوده والا 64 بیت ویا 32 بیت در سرعت نقشی ایفا نمیکنند

Amir Oveisi
یک شنبه 08 شهریور 1388, 04:09 صبح
والا 64 بیت ویا 32 بیت در سرعت نقشی ایفا نمیکنند

!!!!؟؟؟؟!!!!
پس میشه بگید چه نقشی ایفا میکند؟
خودتون میگید ثبات های CPU دارای 64 بیت هستند به جای 32 بیت. حالا فرض کنید در یک سیستم با معماری 32 بیتی لازم باشه که CPU داده ای 128 بیتی رو پردازش کنه در ثبات هاش، راهی نداره جز اینکه این 128 بیت رو به بخش های 32 بیتی تقسیم کنه و هر بار یک بخش رو پردازش کنه. بنا براین باید 4 بار داده بین ثبات ها جابجا شود.
اما در سیستم 64 بیتی تنها 2 بار نیاز به این جابجایی خواهد بود.

به نظر شما کدوم سیستم سریعتر خواهد بود؟

alireza_tavakol
یک شنبه 08 شهریور 1388, 06:11 صبح
راهی نداره جز اینکه این 128 بیت رو به بخش های 32 بیتی تقسیم کنه و هر بار یک بخش رو پردازش کنه. بنا براین باید 4 بار داده بین ثبات ها جابجا شود.
اما در سیستم 64 بیتی تنها 2 بار نیاز به این جابجایی خواهد بود.

تا حالا به قضیه این طوری نگاه نکرده بود:متفکر:

ولی توی درس معماری کامپیوتر یک بار بحث این قضیه تعداد بیت ها مطرح شد . و مزایای تعداد بیت بیشتر مورد بررسی قرار گرفت اکثر موارد حول محور های زیر چرخید

1- یکی از علت های محدود بودن حجم حافظه اصلی عدم آدرس پذیر بودن آفست و سگمت بزرگ از طرف ثبات ها cpu است => اگر مقدار بیت های ثبات ها افزایش یابد مقدار حافظه قابل آدرس دهی بیشتر میشود

2- جلوگیری از overfolw زود هنگام مثلا" دو عدد بزرگ integer رو که باهم جمع کنیم و نتیجه حاصله خارج محدوده integer شود ولی در صورتی که تعداد بیت ها افزایش یابد از overfolw زود هنگام جلوگیری به عمل می آید و ...

ولی فکر کنم با صحبتی که شما مطرح کردید بشه نتیجه گرفت تعداد بیت ها باعث افزایش سرعت نیز می شود:خجالت:

Open-Source
یک شنبه 08 شهریور 1388, 12:07 عصر
منظور از 64 بیت X64 و 32 بیت X86 نوع CPU هست نه سیستم عامل.
مثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.

منظور از 64 یا 32 بیت بودن CPU در ثباتها خلاصه میشه که شما در برنامه های در سطح دات نت هیچ وقت باهاشون در گیر نمیشید.


موفق باشید

من سخنان ایشون رو تایید میکنم.

شما توی ویندوز بین 32 و 64 بیت عملا هیچ تفاوتی نمیبینید(البته cpu intel).
من 3d max کار میکردم.
توی ویندوز 32 یه مدل رو رندر گرفتم و توی ویندوز 64 هم رندر کرفتم ولی در مدت زمان هیچ فرقی با هم نکردند.
چندتا از دوستان من هم کار میکنند و همین موضوع رو تست کردند و این حرف رو تایید میکنند.


مخلص کلوم: ما فرق چندانی بین 32(x86) و 64(x64) ندیدیم. :متفکر:

tdkhakpur
یک شنبه 08 شهریور 1388, 12:25 عصر
اگه CPU کامپیوتر اجرا کننده برنامه 64 بیتی باشه ولی سیستم عامل نصب شده 32 باشد ، عملا شما از 32 بیت ثبات های CPU استفاده نکرده اید و امکان اجرا کردن برنامه های 64 رو ندارید چون برنامه ها توسط سیستم عامل مدیریت میشوند

تعداد بیت ها در CPU و در برنامه ها و سیستم عمال ها باعث افزایش سرعت نخواهد شد بلکه باعث افزایش قدرت خواهد شد

این امر بخاطر پشتیبانی و استفاده از Smart cach و cach L3 بوده والا 64 بیت ویا 32 بیت در سرعت نقشی ایفا نمیکنند
مطالب بالا تا حد و قابل قبولی در مورد داخل Cpu درست هست ولی از اینکه میگویید در سرعت تاثیر ندارد اشتباه است .
اصولا وقتی cpu از یک دامنه مثلا 32 به دامنه بالاتر 64 صعود میکند به این خاطر نیست که فقط بتواند بازه رجیسترها را افزایش دهد بکله مقصود و هدف اصلی ارائه سرعت بیشتر به اجرای کدهای cpu است. که این هم به پهنای باند گذرگاه داده و آدرس بستگی دارد شما در نظر بگیرید که داده های شما با پهنای 32 وارد cpu و خارج بشوند چه فرقی با این دارد که با دوبرابر اینها یعنی 64 بیت وارد و خارج شوند پس مطمئنا عامل پیشرفت cpu به خاطر سرعت آن است.

tdkhakpur
یک شنبه 08 شهریور 1388, 12:32 عصر
من سخنان ایشون رو تایید میکنم.

شما توی ویندوز بین 32 و 64 بیت عملا هیچ تفاوتی نمیبینید(البته cpu intel).
من 3d max کار میکردم.
توی ویندوز 32 یه مدل رو رندر گرفتم و توی ویندوز 64 هم رندر کرفتم ولی در مدت زمان هیچ فرقی با هم نکردند.
چندتا از دوستان من هم کار میکنند و همین موضوع رو تست کردند و این حرف رو تایید میکنند.


مخلص کلوم: ما فرق چندانی بین 32(x86) و 64(x64) ندیدیم. :متفکر:
شما برای تست کردن cpu نمیتوانید اجرای برنامه ها را مد نظر بگیرید مخصوصا کار گرافیکی که تقریبا به ram موجود در کارت گرافیکی شما بستگی دارد.
شما باید برای این نوع کار های از برنامه های هوش مصنوعی و برنامه های پیچیده مانند شبکه های عصبی و سایر برنامه ها که به سرعت بالا نیاز دارند استفاده کنید. برنامه های بالا یی که شما بهشان اشاره کردید تقریبا هیچ فشاری به cpu وارد نمیکنند.

alireza_tavakol
یک شنبه 08 شهریور 1388, 13:17 عصر
من 3d max کار میکردم.
توی ویندوز 32 یه مدل رو رندر گرفتم و توی ویندوز 64 هم رندر کرفتم ولی در مدت زمان هیچ فرقی با هم نکردند.
فرض مسئله :اگه cpu ، ثبات های 64 بیتی داشته باشه و سیستم عمال هم 64 بیت باشه ولی فایلی اجرایی برای سیستم های 32 بیتی نوشته شده باشه !فکر نمی کنم توی سرعت تفاوتی بوجود بیاد!

نتیجه گیری جدید که من کردم : اگه سیستم عامل 64 بیتی رو روی سخت افزار 32 بیت اجرا کنیم باعث افت سرعت میشه. پس در هیچ حالتی افزایش سرعت نداریم ولی اگه config درستی نداشته باشیم باعث افت سرعت خواهد شد.

در کل تعداد بیت ها فقط در افزایش قدرت تاثیر داره! اگه کسی مخالفه این نتیجه گیریه با یک مثالی ملموس ادله بیاره

پارامتر های مهم در افزایش سرعت FSB , BSB , Cach در سی پی یو
با تشکر/

alireza_tavakol
یک شنبه 08 شهریور 1388, 13:48 عصر
منظور از 64 یا 32 بیت بودن CPU در ثباتها خلاصه میشه ، که شما در برنامه های در سطح دات نت هیچ وقت باهاشون در گیر نمیشید.


پس می فرمایید IDE VS محض الکی پنجره Configuration Manager یا مثلا" Properties>Builb>General>Platform target رو گذاشته ؟:کف:

alireza_tavakol
یک شنبه 08 شهریور 1388, 13:50 عصر
شما برای تست کردن cpu نمیتوانید اجرای برنامه ها را مد نظر بگیرید شما باید برای این نوع کار های از برنامه های هوش مصنوعی و برنامه های پیچیده مانند شبکه های عصبی و سایر برنامه ها که به سرعت بالا نیاز دارند استفاده کنید.

تا اونجایی که من مباحث هوش مصنوعی رو میشناسم ( در حد پاس کردن درس 3 واحدی :بامزه:) برای اجرا الگوریتم های هوش مصنوعی به فرکانس سی پی یو ( Clock Pulse ) نیاز داریم

کدوم الگوریتم هوش مصنوعی به ثبات های CUP فشار میاره که با افزابش تعداد بیت ها فشار کاهش پیدا کنه؟:متفکر:

heivin
یک شنبه 08 شهریور 1388, 15:06 عصر
دوستان اگه لطف کنن بحث رو روی انواع کامپایل از نظر 64 بیتی 32 بیتی ایتانیوم و AnyCpu در VS.net متمرکز کنن.
کامپایل پروژه به صورت 64 بیتی فکر نکنم فقط این مزیت رو نسبت به کامپایل AnyCpu داشته باشه که دیگه برنامه با cpuهای 32 بیت کار نکنه. احتمالا مزیت های دیگه ای هم داره اگه کسی میدونه منتظریم
ممنون

alireza_tavakol
یک شنبه 08 شهریور 1388, 16:30 عصر
نوع داده int : به اندازه ثبات های CPU و نوع سیستم عامل بستگی داره

یعنی توی کامپوتر های 8086 8088 مقدار فضای اشغالی نوع داده int در RAM یک بایت بود ( چون ثبات ها 1 بایت بودن )

در کامپوتر های 80186 80286 80386 مقدار فضایی که نوع داده int اشغال میکرد دو بایت بود

در کامپیوتر های 80486 80586(Pentium) تا کامپیوتر های X86 ، مقدار فضایی که نوع داده int در RAM اشغال می کki چهار بایت است (32=4*8)

و در سیستم های 64 بیتی مقدار فضایی که اشغال میکنه 8 بایت خواهد بود
_____________________
حالا وقتی دامنه متغییر های int افزایش پیدا کنه قدرت محاسبه برای اعداد بزرگتر محیا میگردد

raravaice
یک شنبه 08 شهریور 1388, 19:56 عصر
این تفاوت در پیچیدگی داده ها در سطوح پایین پروسس قابل درک هست.

مثلا در assembly ثباتی داریم به نام ax که 32 بیتی هست یعنی در CPU های 32 بیتی کار خودش رو درست انجام میده همچنین میتونه در CPU های 64 بیتی هم کار کنه ولی وقتی یک برنامه 32 بیتی را روی یک CPU 64 بیتی اجرا میکنید توقع بیجا برای احساس تغییر نداشته باشید. چون ثبات همون ثباتهای 32 بیتی هستن.
در ثباتهای 32 بیتی شما به عدد 0xFFFFFFFF که معادل 4،294،967،295 هست محدود هستید به این معنی که پردازش های بزرگتر از این عدد برای شما در شرایط عادی مقدور نیست.
ولی در CPU های 64 بیتی علاوه بر ثبات های 32 بیتی ax,bx,cx, ... نوع 64 بیتی این ثباتها هم وجود داره که eax,ebx,ecx, ... نام گزاری شده پس در این شرایط بازه پردازش عددی ما به 0xFFFFFFFFFFFFFFFF که معادل 18،446،744،073،709،551،615 ارتقا خواهد یافت. پس در چنین شرایطی اگر در برنامه ای از یکی از ثباتهای 64 بیتی استفاده شده باشه اون برنامه هیچ وقت برای یک CPU 32 بیتی قابل درک نخواهد بود پس اجرا هم نخواهد شد و عکس این مسئله هم صدق میکنه به این معنی که اگر شما در برنامه ای که به صورت 64 بیتی کامپایل شده ولی از ثباتها 64 بیتی در اون استفاده نشده مشکلی بر روی پردازنده های 32 بیتی پیدا نخواهید کرد.
هچنین پردازش گر های 64 بیتی در شرایط خاص و پیچیده بازدهی و سرعت خود را نشان خواهند داد نه شرایط عادی و خانگی.
-----------------------

alireza_tavakol (http://barnamenevis.org/forum/member.php?u=17033)@


مثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.

در جمله بالا بحثی درباره سرعت نشده گفته شده تفاوت را احساس میکنید و بنا به توضیحات پیشین این تفاوت در بر نامه های پیچیده که سرورکار با ارقام بزرگی دارند قابل درک است.
همچنین اگر با یک نگاه غیر فنی و عامیانه به تفاوت بین 32 بیتی یا 64 بیتی بودن پردازنده بنگریم به این نتیجه خواهیم رسید که هدف از ساخت پردازنده های 64 بیتی انجام محاسبات بسیار بزرگ در مدت زمان کمتری بوده ، یعنی سرعت + قدرت



پس می فرمایید IDE VS محض الکی پنجره Configuration Manager یا مثلا" Properties>Builb>General>Platform target رو گذاشته ؟:کف:

بله ، با سطح دانش بنده سالیانه سال با ارقام 64 بیتی سرو کار پیدا نخواهم کرد.



نوشته شده توسط raravaice http://barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=792905#post792905)
منظور از 64 یا 32 بیت بودن CPU در ثباتها خلاصه میشه ، که شما در برنامه های در سطح دات نت هیچ وقت باهاشون در گیر نمیشید.


منظور از درگیر شدن درگیری فیزیکی و زور آزمایی نیست ;)

منظور همون استفاده از نوع ثبات حافظه هست که شما هیچ وقت با زمان استفاده از ax یا eax درگیر نمیشی. ولی در زبانی مثل assembly طرز استفاده از این ثباتها بسیار مهم و حیاتی هستند.


--------------------------------
پ.و : یاد بگیریم بجای نقض کردن خام و غیر فنی، با اصول و توضیحات کامل یک مسئله را نقض کنیم چون همین نقض کردن با اصول علم دیگران باعث پیشرفت جوامع بشری شده و خواهد شد.


موفق باشید

tdkhakpur
یک شنبه 08 شهریور 1388, 20:24 عصر
کدوم الگوریتم هوش مصنوعی به ثبات های CUP فشار میاره که با افزابش تعداد بیت ها فشار کاهش پیدا کنه؟:متفکر:
مثال برنامه ای همان محاسبات ژنتیک و یا ترکیبات اتمی و غیره همه این دلایل فقط ذکر یادآوریست.
ببینید اصلا بحث سرعت cpu به رجیستر نیست بلکه رجیستر جزو امکانات cpu و انقدر که شما اذعان میکنید رو سرعت تاثیر ندارد بلکه طول bus یا همان گذرگاه است که سرعت را بالا میبره.
ولی نمیدان این همه مطالب را برای بیان 64و 32 بیتی بودن را ارائه میدهد اصلا سیستم عامل 64 بیتی قادر به اجرا با مادر بورد و cpu با طول گذرگاه 32 بیتی نیست. بلکه باید از فرایند اجرای خودش به سیستم عامل 32 نزول دهد(البته هنگام نصب) که باز همان سیستم عامل 32 بیتی خواهد بود و دارای همان سرعت هم هست میتوانید vista را آزمایش کنید.