نحوه نوشتن حلقه های تودرتو به صورت صحیح در زبان فرترن

حلقه های تودرتو به صورت صحیح در زبان فرترن

نحوه نوشتن حلقه های تودرتو به صورت صحیح در زبان فرترن

در ادامه پست های مربوط به زبان برنامه نویسی فرترن، قصد داریم نحوه نوشتن حلقه های تودرتو به صورت صحیح در زبان برنامه نویسی فرترن را به صورت متنی و ویدیویی به شما آموزش دهیم. در ابتدای پست لازم به ذکر است که شما میتوانید برای ران کردن کد های خود از نرم افزارهای microsoft visual studio 2012 و 2015-Parallel-intel-studio استفاده کنید که فایل نصب و راهنمای نصب آن در این فایل آورده شده است.

 

توضیح در مورد کد:

نوشتن درست حلقه های تودرتو باعث کاهش چشم گیر زمان ران برنامه میشود. در این برنامه ساده یک آرایه با نام F نوشتیم و با استفاده از دستور های Allocatable و Allocate بُعد آن را مشخص کردیم و تابع F را به صورت F(i,j,k)=i*j*k نوشتیم که فقط قرار است به هم ضرب شوند.

 

روش اول نوشتن کد:

در قسمت اول یا روش اول طبق عکس زیر می بینیم که ما با نوشتن کد توضیح داده شده در بالا و کد ارائه شده می بینیم که مدت زمان ران یا اجرا شدن برنامه 10.2 ثانیه می شود.

 

کد فرترن:

program test
implicit none
! variables
integer::i,j,k
Integer,parameter::size=700
real(8)::t1,t2
integer,dimension(:,:,:),allocatable::F
allocate(F(size,size,size))

call CPU_TIME(t1)

do i=1,size
do j=1,size
do k=1,size

F(i,j,k)=i*j*k

end do
end do
end do

call CPU_TIME(t2)
print*,t2-t1

pause
deallocate(f)
end program test

 

نمونه کد + پیشنمایش نتیجه کد:

نمونه کد در روش اول
نمونه کد در روش اول
خروجی کد در روش اول
خروجی کد در روش اول

 

روش دوم(صحیح) نوشتن کد:

حال ما سبک نوشتن کد را عوض میکنیم، یعنی F را بصورت F(k,j,i)=i*j*k می نویسیم. دوباره برنامه را ران میکنیم و حالا طبق عکس زیر می بینیم که زمان ران یا اجرا ما 4.35 ثانیه میشود که یعنی زمان ما بیشتر از نصف کاهش داشته است.

 

کد فرترن:

program test
implicit none
! variables
integer::i,j,k
Integer,parameter::size=700
real(8)::t1,t2
integer,dimension(:,:,:),allocatable::F
allocate(F(size,size,size))

call CPU_TIME(t1)

do i=1,size
do j=1,size
do k=1,size

F(k,j,i)=i*j*k

end do
end do
end do

call CPU_TIME(t2)
print*,t2-t1

pause
deallocate(f)
end program test

 

نمونه کد + پیشنمایش نتیجه کد:

حلقه های تودرتو به صورت صحیح در زبان فرترن
حلقه های تودرتو به صورت صحیح در زبان فرترن
حلقه های تودرتو به صورت صحیح در زبان فرترن
حلقه های تودرتو به صورت صحیح در زبان فرترن

و حالا نکته چیه؟

نکته ای که بهتر است در زمان نوشتن کد و ذخیره سازی رعایت شود این است که المان اول ما درونی ترین و المان دوم ما بعد از آن قرار گیرد و به همین ترتیب اولویت بندی ما انجام شود.

یعنی المان اول درونی ترین حلقه ما و بیرونی ترین المان ما آخرین حلقه ما باشد و المان های بین ما به این ترتیب نوشته شوند.

 

این روش باعث کاهش قابل توجه زمان ران میشود و کاهش زمان ران و زمان cpu در پروژه های ما تاثیر بسیار زیادی دارد.

 

لینک ویدیو در آپارات

یک نکته جالب تر:

تگ cpu_time ،مقدار REAL که زمان پردازنده گذشته را در چند ثانیه نشان می دهد. این برای آزمایش بخش های کد برای تعیین زمان اجرا مفید است. اگر منبع زمانی در دسترس باشد، زمان با وضوح میکرو ثانیه گزارش می شود. اگر منبع زمانی در دسترس نباشد، TIME روی 1.0- تنظیم شده است. توجه داشته باشید که TIME ممکن است حاوی یک جبران خودسرانه وابسته به سیستم باشد و ممکن است با 0.0 شروع نشود. برای CPU_TIME، مقدار مطلق بی معنی است، فقط تفاوت بین تماس های بعدی به این زیرروال، همانطور که در مثال زیر نشان داده شده است، باید استفاده شود.

 

مثال:


program test_cpu_time 
real :: start, finish 
call cpu_time(start) 
put code to test here!
call cpu_time(finish) 
print '("Time = ",f6.3," seconds.")',finish-start 
end program test_cpu_time


 

امیدواریم آموزش نحوه نوشتن حلقه های تودرتو در زبان فرترن برای دوستان مفید باشد. با تشکر از مهندس عدنان محمدی عزیز که این آموزش را برای تیم علمی و آموزشی دایا آماده کردند.


محاسبه ی خواص جریان بعد از یک شاک قائم به زبان فرترن

برنامه محاسبه ریشه معادله درجه 2 به زبان فرترن

بررسی اول بودن یک عدد با فرترن

دوره آموزش برنامه نویسی فرترن

کانال اطلاع رسانی تیم علمی و آموزشی دایا

دیدگاهتان را بنویسید