incredibuild(分布式任务软件)脚本
IncrediBuild 可以在Server段通过修改单个任务的进程上限来实现提升任务执行速度。
IncredBuild本机版也可以用来进行本机实现多线程任务分发,这样可以充分利用多核资源。
提交分布式任务涉及该工具的三个命令:
xgConsole.exe ,负责编译工程任务的发起;
xgSubmit.exe ,负责提交各个工程文件的编译任务;
xgWait.exe ,负责最后的链接。
示例:
run.bat @ECHO OFF xgSubmit.exe /group=UTest # test.exe 0.cpp xgSubmit.exe /group=UTest # test.exe 1.cpp xgSubmit.exe /group=UTest # test.exe 2.cpp xgSubmit.exe /group=UTest # test.exe 3.cpp xgSubmit.exe /group=UTest # test.exe 4.cpp xgSubmit.exe /group=UTest # test.exe 5.cpp xgSubmit.exe /group=UTest # test.exe 6.cpp xgSubmit.exe /group=UTest # test.exe 7.cpp xgSubmit.exe /group=UTest # test.exe 8.cpp xgSubmit.exe /group=UTest # test.exe 9.cpp xgSubmit.exe /group=UTest # test.exe 10.cpp xgWait.exe /group=UTest echo All Task Finished xgConsole /command="run.bat" /openmonitor
Rem UTest.bat - Distributed Version Rem =============================== xgSubmit.exe /group=UTest /command UTest.exe /in=Input1.dat /out="Results\" xgSubmit.exe /group=UTest /command UTest.exe /in=Input2.dat /out="Results\" xgSubmit.exe /group=UTest /command UTest.exe /in=Input3.dat /out="Results\" xgSubmit.exe /group=UTest /command UTest.exe /in=Input4.dat /out="Results\" xgSubmit.exe /group=UTest /command UTest.exe /in=Input5.dat /out="Results\" xgWait.exe /group=UTest UReport.exe /in="Results\" /ShowReport :end xgConsole.exe UTest.bat
自己写的一个分布式批处理脚本:
@ECHO OFF setlocal ENABLEDELAYEDEXPANSION set time1=%time:~0,2%%time:~3,2%%time:~6,2% set PRJ_DIR=%CD% set WORK_FILE=lint set BAT=run.bat set SOURCE=filelist.txt ::进工作目录 IF NOT EXIST %WORK_FILE% ( echo No %WORK_FILE%!!! EXIT ) cd %WORK_FILE% IF NOT EXIST %SOURCE% ( echo No %SOURCE%!!! EXIT ) set tmpIndex=0 set duplicateCount=0 ::遍历文件列表 FOR /F "eol=/delims=" %%i in (%SOURCE%) do ( set tmp=%%i set isannotate=false IF "!tmp:~0,1!"=="#" ( set isannotate=true ) IF "!tmp:~0,2!"=="//" ( set isannotate=true ) IF !isannotate!==false ( set fileorfolder=!tmp:%%PRJ_DIR%%=%PRJ_DIR%! set existfile=false FOR /F "delims=" %%j in ('dir /s /b /A:-D !fileorfolder!') do ( IF EXIST "%%j" ( set existfile=true ::判重标识 set duplicate=false FOR /L %%k IN (0,1,!tmpIndex!) do ( IF /I !tmp[%%k]!=="%%j" ( set duplicate=true ) ) ::判重 IF !duplicate!==false ( set tmp[!tmpIndex!]="%%j" set /a tmpIndex=tmpIndex+1 ) ELSE ( set /a duplicateCount=duplicateCount+1 ) ) ) IF !existfile!==false ( echo !tmp! error echo !fileorfolder! ) ) ) ::清空临时环境变量,否则后面执行xgConsole时会尝试解析这些环境变量而出错 set tmp= set fileorfolder= set existfile= set duplicate= echo TaskInfo FileCount:!tmpIndex! Duplicate:!duplicateCount! ::重新生成bat IF EXIST "%BAT%" ( del "%BAT%" ) echo @ECHO OFF >>%BAT% ::按实际大小遍历 set /a tmpIndex=tmpIndex-1 FOR /L %%k IN (0,1,!tmpIndex!) do ( echo xgSubmit.exe /group=UTest # test.exe !tmp[%%k]! >>%BAT% ) echo xgWait.exe /group=UTest >>%BAT% echo echo All Task Finished! >>%BAT% xgConsole /NOLOGO /command="%BAT%" set time2=%time:~0,2%%time:~3,2%%time:~6,2% set /a time3=%time2%-%time1% echo 耗时%time3%秒 EXIT