2007年10月31日星期三

07-11-01

  1. 吸附层的算例要好好考虑,结合年会思考得到的一些启示,继续,确定算例算上后文献要开始整理了,摘要文章等等都要继续了,毕竟时间不多了
  2. 有空搞MD并行,重点还是数组越界
  3. 看书
总结
  1. 摘要写了个差不多,算例还在计算,明天应该差不多了,要好好整理,并确定下一步工作
  2. 没动
  3. done

071031锻炼日记

踢毽子,hoho,今天主要就是传球了,感觉自己的二转似乎还可以,不过就是高度太高,位置感还是可以的,呵呵,今天有所保留,没有使尽全力,下一步的锻炼计划要明确一些了,等广州回来吧,不能荒废啊,而且开始订的锻炼计划要争取有所突破啊~~

俄语商品名称词汇

西服 костюм
工作服 спецовка
运动服 спортивный костюм
带风帽的运动衣 спортивная куртка с капюшоном
大衣 пальто
裘皮大衣 шуба
女短上衣 кофточка
风衣 пыльник
羽绒服 пуховка, пуховик
羽绒大衣 пуховое пальто
皮夹克 кожанка
夹大衣 демисезон
夹克衫 ветровка
女短衫 блузка
Т恤 тенниска
尼龙衫 нейлоновая блузка
绸衫 шёлковая рубашка
旗袍 дамский халат
针织紧身衣 трико
内衣нижнее бельё
衬衫 сорочка
开衫毛衣 шерстяная фуфайка
无领毛衣 джемпер
高领毛衣 свитер
针织服装 трикотажный костюм
睡衣 халат в спальне
超长裙макси - юбка
连衫衬裙 спальный халат
百褶裙 юбка со складками
衬裙 нижняя юбка
牛仔裙 джинсовое платье
坎肩 жилетка
汗衫 майка
无袖短上衣безрукавка
女衬裤 панталоны
男衬裤 кальсон
裤衩 трусы
乳罩лиф
绸料 шёлковые ткани
薄纱 кисея
衬绒 байка
缎子атлас
绸料 шёлковая материя
开士米кашемир
卡普隆 капрон
亚麻纤维 льноволокно
亚麻布полотно
尼龙 нейлон
斜纹布 саржа
乔其纱 креп-жоржет
人造棉 штапельное волокно
棉布 хлопчатобумажная ткань
长毛绒 плющ
法兰绒 фланель
真丝 натуральный шёлк
帆布 парусина
府绸 поплин
化纤织物 ткань из химических волокон
合成纤维织物 синтетическая ткань
呢子сукно
牛仔布 джинсовая ткань
防雨绸 шёлк палатки
水洗布 ткань, обработанная промывкой
鸭绒被 пуховое одеяло
丝棉被 одеяло на шёлковой вате
毛毯 шерстяное одеяло
毛巾被 большое полотенце
枕套 наволочка
枕巾 накидка на подушку
床单 простыня
弹簧床垫 пружинный матрац
电扇 электровентилятор
台扇 настольный вентилятор
吊扇 подвесной вентилятор
电热杯 электротермическая кружка
电茶壶 электрочайник
按摩器 электромассажёр
电吹风 электрофон
冰柜 холодильная камера
双门冰箱 двухкамерный холодильник
吸尘器 пылесос
洗衣机 стиральная машина
电缝纫机 электрошвейная машина
电饭锅 электрокастрюля
电热水器 электрокипятильник
组合家具 секционная мебель
屋角家具 мебель – мягкий уголок
摇椅 качалка
衣架 вешалка
床垫 матрац
梳妆台 туалетный столик
折椅 складной столик
躺椅 шезлонг
餐桌 обеденный стол
床头柜 тумбочка
写字台 письменный стол
衣柜 гардероб
照相器材фотоаппаратура
三脚架 штатив

[原创]Matlab中的多CPU并行计算:一种基于Matlab引擎�转寄)

发信人: frozensea (冰冻之海), 信区: MathTools
标 题: [原创]Matlab中的多CPU并行计算:一种基于Matlab引擎的混合编程方法
发信站: 水木社区 (Wed Oct 31 10:14:27 2007), 站内

[原创]Matlab中的多CPU并行计算:一种基于Matlab引擎的混合编程方法

2007-10-31, by FrozenSea

实验室新购置了一台双核本本,就忍不住琢磨一下,好使得我那Matlab下的程序更有效率。然而Google下来却收获甚微,有朋友提到可以使用Matlab的Distribution Computing Toolbox,但似乎是用于多台电脑联网时的情况,与我的要求相差甚远。因此只好自己鼓捣一下,借此机会抛砖引玉,欢迎大家共同探讨。

方法思路非常清晰:使用C和Matlab混合编程的方法,在C中用线程启动Matlab引擎,如此就可以启动多个程序,充分发挥多核CPU的优势。

在这里给出一个简单的示例程序,其线程任务为通过随机数方法来计算pi(就是为了拖时间)。

示例一共由4个文件构成:
ThreadDemo.cpp: 主程序
compopts.bat: 编译配置文件
Thread1.m: 计算pi的程序
disp2.m: 辅助显示程序

只需在Matlab环境下调用mbuild -f compopts.bat -v ThreadDemo.cpp命令即可生成可执行文件ThreadDemo.exe,再输入命令!ThreadDemo即可观察结果。实验环境为在Matlab6.5, VC6.0。Matlab7.0由于对混合编程的方式进行了较大改动,示例可以通过编译,但不能正常运行。

以下为运行结果:
>> !ThreadDemo
10:41:32 --> Time used: 27", 10:41:05 -- 10:41:32
10:41:32 --> Task1: IterNum = 100000000, Result = 3.141961
10:41:33 --> Time used: 27", 10:41:06 -- 10:41:33
10:41:33 --> Task2: IterNum = 100000000, Result = 3.141961

可以看到两个任务几乎同时启动,同时结束。运行时可以看到打开了两个独立的Matlab引擎(随后被隐藏),CPU占用率100%,共耗时28s。如果单独运行两个任务,则分别需要25s。考虑到引擎启动及数据传输的时间,这个结果还是比较合理的。

随后附上各文件,也可从附件直接下载。由于代码较为简单,就不多做解释了,大家看看就明白了。

上文给出的是使用mbuild生成独立程序的方法,类似的我们也可以使用mex来生成Matlab中调用的dll,也有相同效果。


-----------------------------------------------------------------------------------
ThreadDemo.cpp


/**********************************************************

run the following command to generate executable file
>> mbuild -f compopts.bat -v ThreadDemo.cpp

**********************************************************/

#include
#include
#include
#include
#include
#include "engine.h"
#include "matlab.hpp"

typedef enum{
MAT_TASK1,
MAT_TASK2
} EMatTask;

const int BUF_SIZE = 1024;

bool bTask1 = 0;
bool bTask2 = 0;

void MatTask(void *pTaskID)
{
const double IterNum1 = 10e7;
const double IterNum2 = 10e7;

char strInfoBuf[BUF_SIZE];

EMatTask TaskID;

Engine *ep;
mxArray *T = NULL;

if (!(ep = engOpenSingleUse("\0", NULL, NULL))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return;
}

engSetVisible(ep, 0);
engOutputBuffer(ep, strInfoBuf, BUF_SIZE);

engEvalString(ep, "cd E:\\Work\\Program\\Matlab\\Test\\TestThread");

TaskID = *((EMatTask *)pTaskID);
if(TaskID == MAT_TASK1)
{
T = mxCreateDoubleMatrix(1, 1, mxREAL);
memcpy((void *)mxGetPr(T), (void *)(&IterNum1), sizeof(double));
engPutVariable(ep, "T", T);

engEvalString(ep, "y = Thread1(T);");
printf("%s", strInfoBuf);

engEvalString(ep, "disp2(sprintf('Task1: IterNum = %d, Result = %f', T, y));");
printf("%s", strInfoBuf);

bTask1 = 1;
}
else if(TaskID == MAT_TASK2)
{
T = mxCreateDoubleMatrix(1, 1, mxREAL);
memcpy((void *)mxGetPr(T), (void *)(&IterNum2), sizeof(double));
engPutVariable(ep, "T", T);

engEvalString(ep, "y = Thread1(T);");
printf("%s", strInfoBuf);

engEvalString(ep, "disp2(sprintf('Task2: IterNum = %d, Result = %f', T, y));");
printf("%s", strInfoBuf);

bTask2 = 1;
}

// engEvalString(ep, "whos");
// printf("%s", strInfoBuf);

engClose(ep);
}

void main()
{
EMatTask TaskID1, TaskID2;

bool bThreadMode = 1;

TaskID1 = MAT_TASK1;
TaskID2 = MAT_TASK2;

if(!bThreadMode)
{
MatTask((void *)&TaskID1);
MatTask((void *)&TaskID2);
}
else
{
_beginthread( MatTask, 0, (void *)&TaskID1 );
_beginthread( MatTask, 0, (void *)&TaskID2 );

while(!(bTask1 & bTask2))
{
Sleep(100);
}
}
}


----------------------------------------------------------------------------------

compopts.bat


@echo off
rem MSVC60COMPP.BAT
rem
rem Compile and link options used for building MATLAB compiler programs
rem with Microsoft Visual C++ compiler version 6.0
rem
rem $Revision: 1.18 $ $Date: 2002/03/29 16:30:16 $
rem
rem ********************************************************************
rem General parameters
rem ********************************************************************
set MATLAB=%MATLAB%
set MSVCDir=D:\Program Files\Microsoft Visual Studio\VC98
set MSDevDir=%MSVCDir%\..\Common\msdev98
set PATH=%MSVCDir%\BIN;%MSDevDir%\bin;%MATLAB_BIN%;%PATH%
set INCLUDE=%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%MSVCDir%\ATL\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
set PERL="%MATLAB%\sys\perl\win32\bin\perl.exe"

rem ********************************************************************
rem Compiler parameters
rem ********************************************************************
set COMPILER=cl
set OPTIMFLAGS=-O2 -DNDEBUG
set DEBUGFLAGS=-Zi -Fd"%OUTDIR%%MEX_NAME%.pdb"
set CPPOPTIMFLAGS=-O2 -DNDEBUG
set CPPDEBUGFLAGS=-Zi -Fd"%OUTDIR%%MEX_NAME%.pdb"
set COMPFLAGS=-c -MT -D"_X86_" -Zp8 -G5 -W3 -nologo
set CPPCOMPFLAGS=-c -Zp8 -G5 -W3 -nologo -Zm500 -GX -MD -I"%MATLAB%\extern\include\cpp" -DMSVC -DIBMPC -DMSWIND
set DLLCOMPFLAGS=-c -Zp8 -G5 -W3 -nologo -DMSVC -DIBMPC -DMSWIND
set NAME_OBJECT=/Fo

rem ********************************************************************
rem Library creation commands creating import and export libraries
rem ********************************************************************
set DLL_MAKEDEF=type %BASE_EXPORTS_FILE% | %PERL% -e "print \"LIBRARY %MEX_NAME%.dll\nEXPORTS\n\"; while (<>) {print;}" > %DEF_FILE%

rem ********************************************************************
rem Linker parameters
rem MATLAB_EXTLIB is set automatically by mex.bat
rem ********************************************************************
set LIBLOC=%MATLAB%\extern\lib\win32\microsoft\msvc60
set LINKER=link
set LINKFLAGS=kernel32.lib user32.lib gdi32.lib advapi32.lib oleaut32.lib ole32.lib /LIBPATH:"%LIBLOC%" libmmfile.lib libmatlb.lib libeng.lib /nologo
set LINKFLAGS=%LINKFLAGS% libmx.lib libmat.lib libmwservices.lib libmex.lib libut.lib
set CPPLINKFLAGS=%MATLAB_EXTLIB%\libmatpm.lib
set DLLLINKFLAGS= %LINKFLAGS% /dll /implib:"%OUTDIR%%MEX_NAME%.lib" /def:%DEF_FILE%
set HGLINKFLAGS=sgl.lib libmwsglm.lib
set LINKOPTIMFLAGS=
set LINKDEBUGFLAGS=/debug
set LINK_FILE=
set LINK_LIB=
set NAME_OUTPUT="/out:%OUTDIR%%MEX_NAME%.exe"
set DLL_NAME_OUTPUT="/out:%OUTDIR%%MEX_NAME%.dll"
set RSP_FILE_INDICATOR=@

rem ********************************************************************
rem Resource compiler parameters
rem ********************************************************************
set RC_COMPILER=rc /fo "%OUTDIR%%RES_NAME%.res"
set RC_LINKER=

rem ********************************************************************
rem IDL Compiler
rem ********************************************************************
set IDL_COMPILER=midl /nologo /win32 /I "%MATLAB%\extern\include"
set IDL_OUTPUTDIR= /out "%OUTDIRN%"
set IDL_DEBUG_FLAGS= /D "_DEBUG"
set IDL_OPTIM_FLAGS= /D "NDEBUG"
set POSTLINK_CMDS1=if exist %LIB_NAME%.def del %LIB_NAME%.def
----------------------------------------------------------------------------------
Thread1.m


function p = Thread1(N)

t1 = clock;
strT1 = datestr(now,'HH:MM:SS');

count = 0;
for k = 1:N
x = 2 * rand - 1;
y = 2 * rand - 1;
if(sqrt(x^2 + y^2) <= 1)
count = count + 1;
end;
end;

p = 4.0 * count / N;

t2 = clock;
strT2 = datestr(now,'HH:MM:SS');
t = etime(t2,t1);
mins = floor(t / 60);
secs = round(mod(t,60));
if(mins == 0)
disp2(sprintf('Time used: %d", %s -- %s',secs,strT1,strT2));
else
disp2(sprintf('Time used: %d''%d"(%.3fs), %s -- %s',mins,secs,t, strT1,strT2));
end;

----------------------------------------------------------------------------------
disp2.m

function disp2(str, DispMask, CurrMask)
if( (~exist('DispMask')) & (~exist('CurrMask')) )
disp(strcat(datestr(now,'HH:MM:SS'), ' -->', sprintf(' %s', str)));
return;
end;

if(bitand(DispMask, CurrMask))
disp(strcat(datestr(now,'HH:MM:SS'), ' -->', sprintf(' %s', str)));
end;

----------------------------------------------------------------------------------




--

※ 来源:·水木社区 http://newsmth.net·[FROM: 157.82.234.*]

2007年10月30日星期二

07-10-31

  1. 年会ppt准备好,多想一些问题,深入准备
  2. 吸附层摘要多写一点,算例估计没有算完,积累一些文献吧
  3. 看书
  4. 台湾会议材料准备
总结
  1. done
  2. 没动,算例还需考虑
  3. done
  4. done