本帖最后由 白夜IX 于 2019-2-24 13:45 编辑
①现有一个他人编写的exe程序,程序功能为:用户准备好一组参数文件,将这组参数文件和exe程序放在一个目录下,执行cmd文件,程序自动读取并经过若干次迭代计算,得出结果并输出结果文件,结果文件会生成在同一目录下。
②我想实现的目标:我的电脑是4核心8线程的,我手上有8组参数文件,我想让8组参数文件在8个线程内同时计算(并行),输出结果文件,并记录并行计算过程的总时间。
③关于cmd文件的内容是这样的结构:program(他人编写的exe程序名字) abc.iter(参数文件中的起始文件) m > m.log (程序运行过程会输出到这个m.log文件中)
④我所做出的尝试:将两组参数文件、exe程序和cmd程序放在两个文件夹内(D:\test_al\inv1和D:\test_al\inv2),编写fortran程序,使用openmp建立两个子线程,两个线程内分别调用各自的批处理程序,并计算时间。
出现的问题:"program"(他人编写的exe程序名字)不是内部或外部命令,也不是可运行的程序或批处理文件
做出的改进:我将参数文件全放到我编写的fortran代码的“console2”文件夹内,并去掉D:\test_al\inv1这个路径,程序正常运行。 (也就是说,我的程序调用的指定路径D:\test_al\inv1的run.cmd,这个cmd识别不了D:\test_al\inv1下的program.exe,只能识别console2文件夹内的program.exe)
但是问题是:这8组参数文件及结果文件难免有重复的名字(尤其是结果文件,迭代计算过程会生成0.iter,1.iter等等),都放在console2里面不仅乱也互相影响,该怎么办呢,能不能满足我最初的尝试,即8组参数文件和程序在各自的文件夹内互不影响的运行?
[Fortran] 纯文本查看 复制代码 program main
use omp_lib
integer maxthreads
real omp_begin,omp_end,section_begin1,section_end1,section_begin2,section_end2
maxthreads=omp_get_max_threads()
print*,"你正在使用的计算机CPU个数=",maxthreads
call omp_set_num_threads(2)
!$omp parallel
omp_begin=omp_get_wtime()
!$omp sections
!$omp section
section_begin1=omp_get_wtime()
call system('D:\test_al\inv1\run.cmd')
section_end1=omp_get_wtime()
!$omp section
section_begin2=omp_get_wtime()
call system('D:\test_al\inv2\run.cmd')
section_end2=omp_get_wtime()
!$omp end sections
omp_end=omp_get_wtime()
!$omp end parallel
print*,"总时间=",omp_end-omp_begin
print*,"线程1时间=",section_end1-section_begin1
print*,"线程2时间=",section_end2-section_begin2
pause
end program main
|