سلام

بنده فیزیک هسته ای می خونم

من یه کد فرترن رو کامپیال کردم ولی از اونجایی که محاسبات سنگینی داره گاها تا یک هفته باید سیستم روشن باشه تا محاسبات انجام بشه
وقتی نگاه کردم متوجه شدم فقط یک هسته از سی پی یو در حال کار هست ما بقی کار نمی کنن

می خواستم بدونم چطوری میشه این کد رو طوری اجرا کنم که از تمام توان سی پی یو استفاده کنه به عبارتی مالتی پروسسینگ باشه؟

تصویر nixmd

سلام

آیا شما قصد دارید عمل کامپایل رو به صورت مالتی پروسس انجام بدید؟ یا این که برنامه فرترن رو جوری طراحی کنید که پس از کامپایل و هنگام اجرا، به صورت مالتی پروسس کار کنه؟
 

تصویر seraj

سلام

کد از ابتدا به صورت مالتی نیست و من می خوام فایل کامپایل شده به صورت مالتی پردازش بشه...

 

ممنون از پاسخگویی

تصویر nixmd

شما باید کدتون رو به صورت multithread طراحی کنید. به این موضوع توجه داشته باشید که برای این منظور باید مبحث برنامه نویسی چندرشته ای را درک کنید.

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

برای مثال نمیتوانید عملیات غذاپختن رو روی چند هسته از سی پی یو انجام دهید. بلکه میتوانید غذاپختن رو به یکی از هسته ها واگذار کنید و سپس عملیات جاروکردن رو به هسته ی دیگه ای واگذار کنید و گردگیری و شیشه پاک کردن رو روی یک هسته ی دیگر.

نکته در اینجاست که در خود عملیات غذاپختن مثلا میتوان همزمان با جوشیدن آب در قابلمه، گوشت لازم را نیز در ظرف دیگر سرخ کرد و این دو عمل رو همزمان انجام داد. یعنی میتوانید سلسله عملیات هارا نیز با بهینه سازی به چند رشته عملیات موازی کوچکتر تقسیم کنید که این موضوع کاملا بسته به هوش و خلاقیت برنامه نویس دارد. توجه داشته باشید که جوشانیدن آب، جزئی ترین عمل ممکن است و این عمل را نمیتوان به رشته عملیات های کوچک تر تقسیم کرد، پس جوشانیدن آب یک عمل مستقل است که بر روی یک هسته از سی پی یو باید انجام شود و این کار را نمیتوانید بر روی چند هسته قرار دهید. در عواض سرخ کردن گوشت هم که یک عمل جزئی است بر روی هسته ی دیگر قرار میگیرد. این دو عمل به طور مجزا همزمان با هم انجام میشوند اما کاملا از هم مستقل هستند. در نهایت نتیجه های این ها با هم و در هم ادقام می شود.

 

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

 

لطفا در مورد برنامه نویسی چند رشته ای مطالعات بیشتری داشته باشید تا برنامه بهینه ای تولید کنید.

اما در مورد روش چندرشته ای کردن برنامه در فورترن به این صفحه مراجعه کنید:

http://fortranwiki.org/fortran/show/Parallelization

تصویر seraj

از پاسخ شما متشکرم

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

سوال بنده چیز دیگری است.

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

تشکر

برای ارسال دیدگاه وارد شوید یا ثبت نام کنید .