首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 放出代码 [无满意答案结帖,结帖人:darkstorm2111203]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • darkstorm2111203
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-04-09 23:13:38 楼主
    电子科技大学电子工程学院, 张舒编写

    简单的BP神经网络训练程序移植,抛砖引玉

    NERVENET.TXT : 原来的MATLAB程序
    NERVENET.CU  : HOST程序
    NERNENET_KERNEL.CU : GLOBAL 和 DEVICE 程序
    NERVENET_EVLUE.TXT : 用于察看CUDA运行后结果的MATLAB程序

    程序在MATLAB 7.1,VS 2005,CUDA 1.0 下编译通过,注意:不能用EMUDEBUG,EMURELEASE模式进行编译。
    运行完CUDA程序后会在D盘生成两个DAT文件,结束程序时会报错,水平有限还不知道怎么解决。在MATLAB中把NERVENET_EVALUE.TXT的内容考进命令行即可看结果。

    可以尝试用CUBLAS的内存分配程序修改
    如果要提高效率可以把样本矩阵放进TEXTURE,不过CUBLAS好像不认,可能要自己写CORE了

    本例程中神经元个数太少,体现不出CUDA的优势,对MATLAB程序的加速比也只有9-10左右
    据我分析,CUBLAS的SGEMM用的好像也是棋盘法

    好像没法上传附件...直接贴代码了

    原来的matlab程序:
    MSIL code
    InDim = 2; OutDim = 3; figure colordef(gcf,'white') echo off clc axis([-2,2,-2,2]) axis on grid xlabel('Input x') ylabel('input y') line([-1 1],[1 1]) line([1 -1],[1 0]) line([-1 -1],[0 1]) line([-1 1],[-0.5 -0.5]) line([-1 1],[-1.5 -1.5]) line([-1 -1],[-0.5 -1.5]) line([1 1],[-0.5 -1.5]) hold on SamNum=200; rand('state',sum(100*clock)) SamIn=(rand(2,SamNum)-0.5)*4; SamOut=[]; for i =1:SamNum Sam = SamIn(:,i); x = Sam(1,1); y = Sam(2,1); if((x>-1)&(x<1))==1 if((y>x/2+1/2)&(y<1))==1 plot(x,y,'k+') class=[0 1 0]'; elseif((y<-0.5)&(y>-1.5))==1 plot(x,y,'ks') class=[0 0 1]'; else plot(x,y,'ko') class=[1 0 0]'; end else plot(x,y,'ko') class=[1 0 0]'; end SamOut=[SamOut class]; end HiddenUnitNum=10; MaxEpochs=10000; lr=0.1; E0=0.01; W1=0.2*rand(HiddenUnitNum,InDim)-0.1; B1=0.2*rand(HiddenUnitNum,1)-0.1; W2=0.2*rand(OutDim,HiddenUnitNum)-0.1; B2=0.2*rand(OutDim,1)-0.1; W1Ex=[W1 B1]; W2Ex=[W2 B2]; SamInEx=[SamIn' ones(SamNum,1)]'; ErrHistory=[]; for i=1:MaxEpochs HiddenOut=logsig(W1Ex*SamInEx); HiddenOutEx=[HiddenOut' ones(SamNum,1)]'; NetworkOut=logsig(W2Ex*HiddenOutEx); Error=SamOut-NetworkOut; SSE=sumsqr(Error); ErrHistory=[ErrHistory SSE]; if SSE<E0,break,end Delta2=Error.*NetworkOut.*(1-NetworkOut); Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut); dW2Ex=Delta2*HiddenOutEx'; dW1Ex=Delta1*SamInEx'; W1Ex=W1Ex+lr*dW1Ex; W2Ex=W2Ex+lr*dW2Ex; W2=W2Ex(:,1:HiddenUnitNum); end W1=W1Ex(:,1:InDim); B1=W1Ex(:,InDim+1); W2=W2Ex(:,1:HiddenUnitNum); B2=W2Ex(:,1+HiddenUnitNum); figure hold on; grid [xx,Num]=size(ErrHistory); plot(1:Num,ErrHistory,'k-'); TestSamNum=5000; TestSamIn=(rand(2,TestSamNum)-0.5)*4; TestHiddenOut=logsig(W1*TestSamIn+repmat(B1,1,TestSamNum)); TestNetworkOut=logsig(W2*TestHiddenOut + repmat(B2,1,TestSamNum)); [Val,NNClass]=max(TestNetworkOut); TestTargetOut=[]; for i=1:TestSamNum; Sam=TestSamIn(:,i); x=Sam(1,1); y=Sam(2,1); if((x>-1)&(x<1))==1 if((y>x/2+0.5)&(y<1))==1 TestTargetOut=[TestTargetOut 2]; elseif((y<-0.5)&(y>-1.5))==1; TestTargetOut=[TestTargetOut 3]; else TestTargetOut=[TestTargetOut 1]; end else TestTargetOut=[TestTargetOut 1]; end end NNC1Flag=abs(NNClass-1)<0.1; NNC2Flag=abs(NNClass-2)<0.1; NNC3Flag=abs(NNClass-3)<0.1; TargetC1Flag=abs(TestTargetOut-1)<0.1; TargetC2Flag=abs(TestTargetOut-2)<0.1; TargetC3Flag=abs(TestTargetOut-3)<0.1; Test_C1_num=sum(NNC1Flag) Test_C2_num=sum(NNC2Flag) Test_C3_num=sum(NNC3Flag) Test_C1_C1=1.0*NNC1Flag*TargetC1Flag' Test_C1_C2=1.0*NNC1Flag*TargetC2Flag' Test_C1_C3=1.0*NNC1Flag*TargetC3Flag' Test_C2_c1=1.0*NNC2Flag*TargetC1Flag' Test_C2_C2=1.0*NNC2Flag*TargetC2Flag' Test_C2_C3=1.0*NNC2Flag*TargetC3Flag' Test_C3_C1=1.0*NNC3Flag*TargetC1Flag' Test_C3_C2=1.0*NNC3Flag*TargetC2Flag' Test_C3_C3=1.0*NNC3Flag*TargetC3Flag' Test_Correct=(Test_C1_C1+Test_C2_C2+Test_C3_C3)/TestSamNum
    该帖子于2008-08-05 12:38:16被版主修改
    0  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • darkstorm2111203
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-04-09 23:15:271楼 得分:0
    C/C++ code
    cuda: host /* * 电子科技大学 电子工程学院 张舒 编写,未经允许不得用于商业用途 * BP nerve neworl research * Host code. */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h> #include <cutil.h> #include "cublas.h" #include <nerve_kernel.cu> #define size_SamInEx ((int)(SamNum*(InDim+1))) #define size_SamOut ((int)(SamNum*OutDim)) #define size_W1Ex ((int)(HiddenUnitNum*(InDim+1))) #define size_W2Ex ((int)(OutDim*(HiddenUnitNum+1))) int iDivUp(int, int); void InitSample(int, int, int, int, float*, float*, float*, float*); void train(float, int, int, int, int, int, float*, float*, float*, float*); void logsig(float*, float*, float*, int, int); extern "C" //////////////////////////////////////////////////////////////////////////////// // Program main //////////////////////////////////////////////////////////////////////////////// int main(int argc, char** argv) { const float lr = 0.1f; const int MaxEpochs = 20000; const int HiddenUnitNum = 10; const int InDim = 2; const int OutDim = 3; const int SamNum = 200; float* h_SamInEx; float* h_SamOut; float* h_W1Ex; float* h_W2Ex; CUT_DEVICE_INIT(); cublasInit(); CUDA_SAFE_CALL( cudaMallocHost((void**) &h_SamInEx, sizeof(float)*size_SamInEx)); CUDA_SAFE_CALL( cudaMallocHost((void**) &h_SamOut, sizeof(float)*size_SamOut)); CUDA_SAFE_CALL( cudaMallocHost((void**) &h_W1Ex, sizeof(float)*size_W1Ex)); CUDA_SAFE_CALL( cudaMallocHost((void**) &h_W2Ex, sizeof(float)*size_W2Ex)); InitSample(SamNum, InDim, OutDim, HiddenUnitNum, h_SamInEx, h_SamOut, h_W1Ex, h_W2Ex); train(lr, MaxEpochs, HiddenUnitNum, InDim, OutDim, SamNum, h_SamInEx, h_SamOut, h_W1Ex, h_W2Ex); printf("\n"); for(int i=0; i <size_W1Ex; i++) { printf("%3.3f ",h_W1Ex[i]); } printf("\n"); for(int i=0; i <size_W2Ex; i++) { printf("%3.3f ",h_W2Ex[i]); } FILE *p; p = fopen("D:\\0_W1Ex.dat", "wb"); fwrite(h_W1Ex,sizeof(float),size_W1Ex,p); fclose(p); p = fopen("D:\\0_W2Ex.dat", "wb"); fwrite(h_W2Ex,sizeof(float),size_W2Ex,p); fclose(p); CUDA_SAFE_CALL( cudaFreeHost((h_SamInEx))); CUDA_SAFE_CALL( cudaFreeHost((h_SamOut))); CUDA_SAFE_CALL( cudaFreeHost((h_W1Ex))); CUDA_SAFE_CALL( cudaFreeHost((h_W2Ex))); h_SamInEx = NULL; h_SamOut = NULL; h_W1Ex=NULL; h_W2Ex=NULL; cublasShutdown(); CUT_EXIT(argc, argv); } int iDivUp(int a, int b){ return ((a % b) != 0) ? (a / b + 1) : (a / b); } void InitSample(int SamNum, int InDim, int OutDim, int HiddenUnitNum, float* h_SamInEx, float* h_SamOut, float* h_W1Ex,float* h_W2Ex) { srand(clock()); FILE *p; p = fopen("D:\\samin.dat", "rb"); for(int i=0; i <size_SamInEx; i++) { h_SamInEx[i] = 1.0f; } for(int i=0; i <SamNum; i++) { for(int j=0; j <InDim;j++) { fread(&h_SamInEx[j*SamNum+i],sizeof(float),1,p); } } fclose(p); for(int i=0; i <size_SamInEx; i++) { printf("%3.4f\t",h_SamInEx[i]); } printf("\n"); p = fopen("D:\\samout.dat", "rb"); for(int i=0; i <SamNum; i++) { for(int j=0; j <OutDim;j++) { fread(&h_SamOut[j*SamNum+i],sizeof(float),1,p); } } /* for(int i=0; i <size_SamOut; i++) { printf("%3.5f\t",h_SamOut[i]); }*/ fclose(p); printf("\n"); for(int i=0; i <size_W1Ex; i++) { h_W1Ex[i]=0.2f*rand()/(float)RAND_MAX - 0.1f; } for(int i=0; i <size_W2Ex; i++) { h_W2Ex[i]=0.2f*rand()/(float)RAND_MAX - 0.1f; } /* p = fopen("D:\\W1Ex.dat", "rb"); for(int i=0; i <(InDim+1); i++) { for(int j=0; j <HiddenUnitNum;j++) { fread(&h_W1Ex[j*(InDim+1)+i],sizeof(float),1,p); } } for(int i=0; i <size_W1Ex; i++) { printf("%3.3f ",h_W1Ex[i]); } fclose(p); printf("\n"); p = fopen("D:\\W2Ex.dat", "rb"); for(int i=0; i <(HiddenUnitNum+1); i++) { for(int j=0; j <OutDim;j++) { fread(&h_W2Ex[j*(HiddenUnitNum+1)+i],sizeof(float),1,p); } } for(int i=0; i <size_W2Ex; i++) { printf("%3.3f ",h_W2Ex[i]); } fclose(p); */ printf("\n"); p=NULL; } void train(float lr, int MaxEpochs, int HiddenUnitNum, int InDim,int OutDim,int SamNum, float* h_SamInEx, float* h_SamOut, float* h_W1Ex, float* h_W2Ex) { float* d_W1Ex; float* d_W2Ex; float* d_W2; float* d_SamInEx; float* d_SamOut; float* d_error; float* HiddenOutEx; float* NetworkOut; float* Delta1; float* Delta2; unsigned int timer = 0; dim3 threads(BLOCK_SIZE, BLOCK_SIZE); dim3 HiddenOutExgrid(iDivUp(SamNum, BLOCK_SIZE), iDivUp((HiddenUnitNum+1), BLOCK_SIZE)); dim3 HiddenOutgrid(iDivUp(SamNum, BLOCK_SIZE), iDivUp((HiddenUnitNum), BLOCK_SIZE)); dim3 SamOutgrid(iDivUp(SamNum, BLOCK_SIZE), iDivUp(OutDim, BLOCK_SIZE)); CUDA_SAFE_CALL(cudaMalloc((void**) &d_error, sizeof(float)*size_SamOut)); CUDA_SAFE_CALL(cudaMalloc((void**) &d_W1Ex, sizeof(float)*size_W1Ex)); CUDA_SAFE_CALL(cudaMalloc((void**) &d_W2Ex, sizeof(float)*size_W2Ex)); CUDA_SAFE_CALL(cudaMalloc((void**) &d_W2, sizeof(float)*OutDim*HiddenUnitNum)); CUDA_SAFE_CALL(cudaMalloc((void**) &d_SamInEx, sizeof(float)*size_SamInEx)); CUDA_SAFE_CALL(cudaMalloc((void**) &d_SamOut, sizeof(float)*size_SamOut)); CUDA_SAFE_CALL(cudaMalloc((void**) &HiddenOutEx, sizeof(float)*(HiddenUnitNum+1)*SamNum)); CUDA_SAFE_CALL(cudaMalloc((void**) &NetworkOut, sizeof(float)*size_SamOut)); CUDA_SAFE_CALL(cudaMalloc((void**) &Delta1, sizeof(float)*HiddenUnitNum*SamNum)); CUDA_SAFE_CALL(cudaMalloc((void**) &Delta2, sizeof(float)*size_SamOut)); CUDA_SAFE_CALL(cudaMemcpy(d_W1Ex, h_W1Ex, sizeof(float)*size_W1Ex,cudaMemcpyHostToDevice)); CUDA_SAFE_CALL(cudaMemcpy(d_W2Ex, h_W2Ex, sizeof(float)*size_W2Ex,cudaMemcpyHostToDevice)); CUDA_SAFE_CALL(cudaMemcpy(d_SamInEx, h_SamInEx, sizeof(float)*size_SamInEx,cudaMemcpyHostToDevice)); CUDA_SAFE_CALL(cudaMemcpy(d_SamOut, h_SamOut, sizeof(float)*size_SamOut,cudaMemcpyHostToDevice)); CUT_SAFE_CALL( cutCreateTimer( &timer)); CUT_SAFE_CALL( cutStartTimer( timer)); for(int l=0; l < MaxEpochs; l++) { for(int i=0; i < OutDim; i++) { CUDA_SAFE_CALL(cudaMemcpy(d_W2 + HiddenUnitNum * i, d_W2Ex + (HiddenUnitNum + 1) * i, sizeof(float)*HiddenUnitNum,cudaMemcpyDeviceToDevice)); } cublasSgemm('n','n',SamNum, HiddenUnitNum, (InDim+1), 1.0f, d_SamInEx, SamNum, d_W1Ex, (InDim+1), 0.0f, HiddenOutEx, SamNum ); logsig1 < < <HiddenOutExgrid, threads>>>(HiddenOutEx, SamNum, HiddenUnitNum); cublasSgemm('n','n',SamNum, OutDim, (HiddenUnitNum+1), 1.0f, HiddenOutEx, SamNum, d_W2Ex, (HiddenUnitNum+1), 0.0f, NetworkOut, SamNum ); logsig2 < < <SamOutgrid,threads>>>(NetworkOut, SamNum, OutDim); dotsub < < <SamOutgrid,threads>>>(Delta2, d_SamOut, NetworkOut, SamNum, OutDim); getdelta < < <SamOutgrid,threads>>>(Delta2, NetworkOut, SamNum, OutDim); cublasSgemm('t','n',(HiddenUnitNum+1), OutDim, SamNum, lr, HiddenOutEx, SamNum, Delta2, SamNum, 1.0f, d_W2Ex, (HiddenUnitNum+1) ); cublasSgemm('n','t', SamNum, HiddenUnitNum, OutDim, 1.0f, Delta2, SamNum, d_W2, HiddenUnitNum, 0.0f, Delta1, SamNum ); getdelta < < <HiddenOutgrid, threads>>>(Delta1, HiddenOutEx, SamNum, HiddenUnitNum); cublasSgemm('t','n', (InDim+1), HiddenUnitNum, SamNum, lr, d_SamInEx, SamNum, Delta1, SamNum, 1.0f, d_W1Ex, (InDim+1)); } CUT_SAFE_CALL( cutStopTimer( timer)); printf( "Processing time: %f (ms)\n", cutGetTimerValue( timer)); CUT_SAFE_CALL( cutDeleteTimer( timer)); CUDA_SAFE_CALL(cudaMemcpy(h_W1Ex, d_W1Ex, sizeof(float)*size_W1Ex,cudaMemcpyDeviceToHost)); CUDA_SAFE_CALL(cudaMemcpy(h_W2Ex, d_W2Ex, sizeof(float)*size_W2Ex,cudaMemcpyDeviceToHost)); CUDA_SAFE_CALL(cudaFree(d_SamInEx)); CUDA_SAFE_CALL(cudaFree(d_SamOut)); CUDA_SAFE_CALL(cudaFree(d_W1Ex)); CUDA_SAFE_CALL(cudaFree(d_W2Ex)); CUDA_SAFE_CALL(cudaFree(d_SamOut)); CUDA_SAFE_CALL(cudaFree(HiddenOutEx)); CUDA_SAFE_CALL(cudaFree(NetworkOut)); CUDA_SAFE_CALL(cudaFree(Delta1)); CUDA_SAFE_CALL(cudaFree(Delta2)); }
    该回复于2008-08-05 12:39:45被版主修改
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • darkstorm2111203
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-04-09 23:16:282楼 得分:0
    C/C++ code
    /* * BP nerve neworl research * Device code. */ #ifndef _MATRIXMUL_KERNEL_H_ #define _MATRIXMUL_KERNEL_H_ #include <stdio.h> #define BLOCK_SIZE 16 __global__ void logsig1( float* A, int wA, int hA) { const int posy = blockIdx.y * blockDim.y + threadIdx.y; const int posx = blockIdx.x * blockDim.x + threadIdx.x; const int pos = posy * wA + posx; if(posx < wA ) { if(posy < hA ) A[pos] = 1/(1+expf(-A[pos])); else if(posy == hA) A[pos] = 1.0f; } } __global__ void logsig2( float* A, int wA, int hA) { const int posy = blockIdx.y * blockDim.y + threadIdx.y; const int posx = blockIdx.x * blockDim.x + threadIdx.x; const int pos = posy * wA + posx; if((posx < wA)&&(posy < hA)) { A[pos] = 1/(1+expf(-A[pos])); } } __global__ void dotsub( float* C, float* A, float* B, int wA, int hA) { const int posy = blockIdx.y * blockDim.y + threadIdx.y; const int posx = blockIdx.x * blockDim.x + threadIdx.x; const int pos = posy * wA + posx; if((posx < wA)&&(posy < hA)) { C[pos] = A[pos]-B[pos]; } } __global__ void getdelta( float* C, float* A, int wA, int hA) { const int tidx = threadIdx.x; const int tidy = threadIdx.y; const int posy = blockIdx.y * blockDim.y + threadIdx.y; const int posx = blockIdx.x * blockDim.x + threadIdx.x; const int pos = posy * wA + posx; //__shared__ s_A[BLOCK_SIZE][BLOCK_SIZE]; if((posx < wA)&&(posy < hA)) { //s_A[tidy][tidx] = A[pos]; C[pos] *= ((1.0f - A[pos])*A[pos]); } __syncthreads(); } #endif
    该回复于2008-08-05 12:40:24被版主修改
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • darkstorm2111203
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-04-09 23:18:353楼 得分:0
    MSIL code
    运行后用于评估结果的matlab程序: 注意编译时工程要加入依赖项cublas.lib,不能用emu模式编译 fid=fopen('d:\0_W1Ex.dat','rb') W1Ex=fread(fid,[3,11],'float32') fid=fopen('d:\0_W2Ex.dat','rb') W2Ex=fread(fid,[11,3],'float32') fclose(fid) W1Ex=W1Ex' W2Ex=W2Ex' InDim = 2; OutDim = 3; HiddenUnitNum=10; W1=W1Ex(:,1:InDim); B1=W1Ex(:,InDim+1); W2=W2Ex(:,1:HiddenUnitNum); B2=W2Ex(:,1+HiddenUnitNum); TestSamNum=5000; TestSamIn=(rand(2,TestSamNum)-0.5)*4; TestHiddenOut=logsig(W1*TestSamIn+repmat(B1,1,TestSamNum)); TestNetworkOut=logsig(W2*TestHiddenOut + repmat(B2,1,TestSamNum)); [Val,NNClass]=max(TestNetworkOut); TestTargetOut=[]; for i=1:TestSamNum; Sam=TestSamIn(:,i); x=Sam(1,1); y=Sam(2,1); if((x>-1)&(x <1))==1 if((y>x/2+0.5)&(y <1))==1 TestTargetOut=[TestTargetOut 2]; elseif((y <-0.5)&(y>-1.5))==1; TestTargetOut=[TestTargetOut 3]; else TestTargetOut=[TestTargetOut 1]; end else TestTargetOut=[TestTargetOut 1]; end end NNC1Flag=abs(NNClass-1) <0.1; NNC2Flag=abs(NNClass-2) <0.1; NNC3Flag=abs(NNClass-3) <0.1; TargetC1Flag=abs(TestTargetOut-1) <0.1; TargetC2Flag=abs(TestTargetOut-2) <0.1; TargetC3Flag=abs(TestTargetOut-3) <0.1; Test_C1_num=sum(NNC1Flag) Test_C2_num=sum(NNC2Flag) Test_C3_num=sum(NNC3Flag) Test_C1_C1=1.0*NNC1Flag*TargetC1Flag' Test_C1_C2=1.0*NNC1Flag*TargetC2Flag' Test_C1_C3=1.0*NNC1Flag*TargetC3Flag' Test_C2_c1=1.0*NNC2Flag*TargetC1Flag' Test_C2_C2=1.0*NNC2Flag*TargetC2Flag' Test_C2_C3=1.0*NNC2Flag*TargetC3Flag' Test_C3_C1=1.0*NNC3Flag*TargetC1Flag' Test_C3_C2=1.0*NNC3Flag*TargetC2Flag' Test_C3_C3=1.0*NNC3Flag*TargetC3Flag' Test_Correct=(Test_C1_C1+Test_C2_C2+Test_C3_C3)/TestSamNum
    该回复于2008-08-05 12:40:59被版主修改
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • UltraBejing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-01 09:33:194楼 得分:0
    有点难度哦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cqg1220
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 14:06:235楼 得分:0
    很有难度。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cqg1220
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 14:07:556楼 得分:0
    很有难度,支持一下楼主。 机柜慢慢学习。哈哈
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ateen
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 19:04:597楼 得分:0
    学习了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cacar2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 19:06:568楼 得分:0
    变量好象名字比较短哈
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qqhycbunny
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 19:34:439楼 得分:0
    学习了俄~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tendynn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 20:14:1110楼 得分:0
    这好似一段数学公式运算啊!!结果呢 ??????
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jdlsfl
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 20:23:3011楼 得分:0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wenjianye
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-05 23:24:3912楼 得分:0
    眼花了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • panzi667
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-06 08:13:2613楼 得分:0
    看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vip_accp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-06 14:07:2114楼 得分:0
    晕了, 

        我最害怕C/C++ 语言了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pdfccc1
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-06 17:12:5815楼 得分:0
    这代码写得。。。估计刚学C++不久,重构一下吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gannbatte
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-07 09:32:0916楼 得分:0
    学习下。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nicholas1
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-07 14:45:2617楼 得分:0
    好难,真强
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gqy2468
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-07 17:12:3718楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zgycsmb
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-07 17:50:4719楼 得分:0
    学习。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovely520
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 10:32:5620楼 得分:0
    看不懂啊!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pasee
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 11:40:3121楼 得分:0
    仿真模型实验工厂……很革命的工具~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yinxianwu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 09:37:4622楼 得分:0
    有技术含量
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • SIOSXIAOQIANG
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 21:22:5823楼 得分:0
    学习加收藏
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zwgonly
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 09:47:3224楼 得分:0

    我超喜欢这网站。!!!!!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • caoyong168
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 13:43:0325楼 得分:0
    楼主如能公布一下 算法原理,理解代码就再好不过了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nieliqiang84
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 17:32:3726楼 得分:0
    无法理解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ydhzy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 11:33:2427楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • TNTZHT
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:09:4728楼 得分:0
    多谢,正是想要的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lcaxwudi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 15:41:4229楼 得分:0
    这也太多了 什么乱七八糟的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oran176
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 15:50:1930楼 得分:0
    精神不错.支持下.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • billow_chentao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 18:44:3431楼 得分:0
    不懂
    修改 删除 举报 引用 回复