📄 clibench.cpp
字号:
#include <afxwin.h>
#include <afxext.h>
#include "clibench.h"
#include "resource.h"
#include "bench.h"
#include "queen.h"
#include "whet.h"
#include <math.h>
#include "bench2.h"
#include "dhry2.h"
#include <direct.h>
#include "matrix.h"
#include "DescDlg.h"
#include "AppAboutDlg.h"
#include "sys/timeb.h"
//#include "CDescDlg.h"
CFrameWnd m_pMainWnd;
static CclibenchApp clibenchApp;
const int la=100;
char buffer[la][256];
char marks[2][la][2][12];
bool memTest=false;
bool queenTest=false;
bool whetTest=false;
bool floatTest=false;
bool diskTest[32];
bool dhryTest=false;
bool numTest=false;
bool matrTest=false;
bool showDesc=false;
int langeTests=1;
//char diskdrives[0][1024];
//DWORD driveBuff=1023;
bool disks[32];
int zaehler=0;
const int maxthreads=128;
int nOfThreads=4;
int noftPot=4;
unsigned long threadResult[maxthreads];
int threadRun[maxthreads];
HANDLE hBenchThread[maxthreads];
int sPos=0;
// CclibenchApp Member-Funktionen ///////////////////////////////////////////////////////////
BOOL CclibenchApp::InitInstance()
{
m_pMainWnd=new CMainWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}
// CMainWindow Member-Funktionen //////////////////////////////////////////////////////////
CMainWindow::CMainWindow()
{
Create(NULL, "CliBench Mk III SMP 0.7.7 ",WS_OVERLAPPEDWINDOW|WS_VSCROLL,rectDefault,NULL,MAKEINTRESOURCE(IDR_MAINFRAME));
CMenu *menu=(GetMenu()->GetSubMenu(1))->GetSubMenu(7);
ShowScrollBar(SB_VERT,TRUE);
int drive, curdrive;
/*int i=0;
while (i<la)
{
marks[0][i][0][0]=char(0);
marks[0][i][1][0]=char(0);
marks[1][i][0][0]=char(0);
marks[1][i][1][0]=char(0);
++i;
}/*
/* Save current drive. */
curdrive = _getdrive();
/* If we can switch to the drive, it exists. */
drive=3;
while(drive < 27)
{
if (_chdrive( drive )) disks[drive-1]=false;
else disks[drive-1]=true;
++drive;
}
_chdrive( curdrive );
if (!disks[2]) menu->DeleteMenu(ID_DISKC,MF_BYCOMMAND);
if (!disks[3]) menu->DeleteMenu(ID_DISKD,MF_BYCOMMAND);
if (!disks[4]) menu->DeleteMenu(ID_DISKE,MF_BYCOMMAND);
if (!disks[5]) menu->DeleteMenu(ID_DISKF,MF_BYCOMMAND);
if (!disks[6]) menu->DeleteMenu(ID_DISKG,MF_BYCOMMAND);
if (!disks[7]) menu->DeleteMenu(ID_DISKH,MF_BYCOMMAND);
if (!disks[8]) menu->DeleteMenu(ID_DISKI,MF_BYCOMMAND);
if (!disks[9]) menu->DeleteMenu(ID_DISKJ,MF_BYCOMMAND);
if (!disks[10]) menu->DeleteMenu(ID_DISKK,MF_BYCOMMAND);
if (!disks[11]) menu->DeleteMenu(ID_DISKL,MF_BYCOMMAND);
if (!disks[12]) menu->DeleteMenu(ID_DISKM,MF_BYCOMMAND);
if (!disks[13]) menu->DeleteMenu(ID_DISKN,MF_BYCOMMAND);
if (!disks[14]) menu->DeleteMenu(ID_DISKO,MF_BYCOMMAND);
if (!disks[15]) menu->DeleteMenu(ID_DISKP,MF_BYCOMMAND);
if (!disks[16]) menu->DeleteMenu(ID_DISKQ,MF_BYCOMMAND);
if (!disks[17]) menu->DeleteMenu(ID_DISKR,MF_BYCOMMAND);
if (!disks[18]) menu->DeleteMenu(ID_DISKS,MF_BYCOMMAND);
if (!disks[19]) menu->DeleteMenu(ID_DISKT,MF_BYCOMMAND);
if (!disks[20]) menu->DeleteMenu(ID_DISKU,MF_BYCOMMAND);
if (!disks[21]) menu->DeleteMenu(ID_DISKV,MF_BYCOMMAND);
if (!disks[22]) menu->DeleteMenu(ID_DISKW,MF_BYCOMMAND);
if (!disks[23]) menu->DeleteMenu(ID_DISKX,MF_BYCOMMAND);
if (!disks[24]) menu->DeleteMenu(ID_DISKY,MF_BYCOMMAND);
if (!disks[25]) menu->DeleteMenu(ID_DISKZ,MF_BYCOMMAND);
}
// darstellung und refresh ///////////////////////////////////////////////////////////////////
void CMainWindow::OnPaint()
{
int i=0;int j;
CPaintDC dc(this);
CRect rect;
CFont *font;
//font=(CFont*) dc.SelectStockObject(ANSI_FIXED_FONT);
font=(CFont*) dc.SelectStockObject(ANSI_FIXED_FONT);
GetClientRect(rect);
SetScrollRange(SB_VERT,0,la-1,TRUE);
SetScrollPos(SB_VERT,sPos,TRUE);
dc.SetTextAlign(TA_TOP|TA_LEFT);
i=sPos;
while (i<la) // schreibe text auf bildschirm
{ j=0;
while ((buffer[i][j]!=char(0))&&(j<256)) {++j;}
dc.TextOut(rect.left+10,rect.top+(i-sPos)*14,buffer[i],j);
++i;
}
}
//bufferUpdaten //////////////
void updateBuffer()
{
showDesc=false;
int i=0;
while (i<la)
{
buffer[i][0]=char(0);
++i;
}
int j=0;
int z=0;
sprintf(buffer[z]," this other relative");++z;
sprintf(buffer[z]," computer computer performance");++z;
sprintf(buffer[z]," ");++z;
int total[4];
total[0]=0; total[1]=0; total[2]=0; total[3]=0;
int k=0;
char c1[12];
int prozent=0;
if (marks[0][j][0][0]=='d')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='d')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/(atol(c1));
total[0]=total[0]+prozent;++total[1];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Dhrystone 2.1 %10s %10s MIPS %3u percent",marks[0][j][1],c1,prozent);
++j;
++z;
}
if (marks[0][j][0][0]=='w')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='w')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/atol(c1);
//total[0]=total[0]+prozent;++total[1];
total[2]=total[2]+prozent;++total[3];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Whetstone %10s %10s MFLOPS %3u percent",marks[0][j][1],c1,prozent);
++z;
++j;
}
if (marks[0][j][0][0]=='q')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='q')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/atol(c1);
total[0]=total[0]+prozent;++total[1];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Eight queens problem %10s %10s pps %3u percent",marks[0][j][1],c1,prozent);
++z;
++j;
}
if (marks[0][j][0][0]=='c')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='c')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/atol(c1);
total[0]=total[0]+prozent;++total[1];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Matrix operations %10s %10s k ops %3u percent",marks[0][j][1],c1,prozent);
++z;
++j;
}
if (marks[0][j][0][0]=='n')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='n')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/atol(c1);
total[0]=total[0]+prozent;++total[1];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Number crunch %10s %10s k ops %3u percent",marks[0][j][1],c1,prozent);
++z;
++j;
}
if (marks[0][j][0][0]=='f')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='f')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/atol(c1);
//total[0]=total[0]+prozent;++total[1];
total[2]=total[2]+prozent;++total[3];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Floating point %10s %10s k ops %3u percent",marks[0][j][1],c1,prozent);
++z;
++j;
}
if (marks[0][j][0][0]=='m')
{
i=0;
while(i<la)
{
if (marks[1][i][0][0]=='m')
{
sprintf(c1,"%s",marks[1][i][1]);
prozent=100*atol(marks[0][j][1])/atol(c1);
total[0]=total[0]+prozent;++total[1];
k=i;i=la;
}
else
{
sprintf(c1,"n/a");prozent=0;
}
++i;
}
sprintf(buffer[z],"Memory throughput %10s %10s kB/sec %3u percent",marks[0][j][1],c1,prozent);++z;
++j;
}
sprintf(buffer[z]," ");
++z;
if (total[1]!=0)
{
sprintf(buffer[z]," Total CPU %3u percent",((total[0])/(total[1])));
++z;
}
if (total[3]!=0)
{
sprintf(buffer[z]," Total FPU %3u percent",((total[2])/(total[3])));
++z;
}
if (total[1]!=0)
{
sprintf(buffer[z]," Average %3u percent",((total[0]+total[2])/(total[1]+total[3])));
++z;
}
if (total[1]!=0 && total[3]!=0)
{
sprintf(buffer[z]," ");
++z;
sprintf(buffer[z]," Application Performance %3u percent",(((1+total[0]/total[1])*92)+((total[2])/(total[3]))*8)/100);
++z;
}
char drive0='?',drive1='?';
int i0=0,i1=0;
int ialt0=0,ialt1=0;
while ((z<(la-9))&&!(i0>=(la-6))&&!(i1>=(la-6)))
{
int l=0;
while ((l<26)&&(i0<la))
{
if (marks[0][i0][0][0]==char(65+l)) {drive0=char(65+l);ialt0=i0;break;}
++l;
}
if (i0<la) ++i0;
l=0;
while ((l<26)&&(i1<la))
{
if (marks[1][i1][0][0]==char(65+l)) {drive1=char(65+l);ialt1=i1;break;}
++l;
}
if (i1<la) ++i1;
if ((drive0!='?')&&(drive1!='?'))
{ sprintf(buffer[z]," ");++z;
sprintf(buffer[z]," Drive %c Drive %c",drive0,drive1);++z;
sprintf(buffer[z],"Read max %10s %10s kB/sec ",marks[0][ialt0][1],marks[1][ialt1][1]);++z;
sprintf(buffer[z],"Read average %10s %10s kB/sec ",marks[0][ialt0+1][1],marks[1][ialt1+1][1]);++z;
sprintf(buffer[z],"Read min %10s %10s kB/sec ",marks[0][ialt0+2][1],marks[1][ialt1+2][1]);++z;
sprintf(buffer[z],"Write max %10s %10s kB/sec ",marks[0][ialt0+3][1],marks[1][ialt1+3][1]);++z;
sprintf(buffer[z],"Write average %10s %10s kB/sec ",marks[0][ialt0+4][1],marks[1][ialt1+4][1]);++z;
sprintf(buffer[z],"Write min %10s %10s kB/sec ",marks[0][ialt0+5][1],marks[1][ialt1+5][1]);++z;
sprintf(buffer[z],"CPU usage %10s %10s percent ",marks[0][ialt0+6][1],marks[1][ialt1+6][1]);++z;
drive0='?';
drive1='?';
}
if ((drive0!='?')&&(drive1=='?'))
{ sprintf(buffer[z]," ");++z;
sprintf(buffer[z]," Drive %c ",drive0);++z;
sprintf(buffer[z],"Read max %10s kB/sec ",marks[0][ialt0][1]);++z;
sprintf(buffer[z],"Read average %10s kB/sec ",marks[0][ialt0+1][1]);++z;
sprintf(buffer[z],"Read min %10s kB/sec ",marks[0][ialt0+2][1]);++z;
sprintf(buffer[z],"Write max %10s kB/sec ",marks[0][ialt0+3][1]);++z;
sprintf(buffer[z],"Write average %10s kB/sec ",marks[0][ialt0+4][1]);++z;
sprintf(buffer[z],"Write min %10s kB/sec ",marks[0][ialt0+5][1]);++z;
sprintf(buffer[z],"CPU usage %10s percent ",marks[0][ialt0+6][1]);++z;
drive0='?';
drive1='?';
}
if ((drive0=='?')&&(drive1!='?'))
{ sprintf(buffer[z]," ");++z;
sprintf(buffer[z]," Drive %c",drive1);++z;
sprintf(buffer[z],"Read max %10s %10s kB/sec "," ",marks[1][ialt1][1]);++z;
sprintf(buffer[z],"Read average %10s %10s kB/sec "," ",marks[1][ialt1+1][1]);++z;
sprintf(buffer[z],"Read min %10s %10s kB/sec "," ",marks[1][ialt1+2][1]);++z;
sprintf(buffer[z],"Write max %10s %10s kB/sec "," ",marks[1][ialt1+3][1]);++z;
sprintf(buffer[z],"Write average %10s %10s kB/sec "," ",marks[1][ialt1+4][1]);++z;
sprintf(buffer[z],"Write min %10s %10s kB/sec "," ",marks[1][ialt1+5][1]);++z;
sprintf(buffer[z],"CPU usage %10s %10s percent "," ",marks[1][ialt1+6][1]);++z;
drive0='?';
drive1='?';
}
}
}
void CMainWindow::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
switch (nSBCode)
{
case SB_LINEUP:sPos=sPos-1;break;
case SB_LINEDOWN:sPos=sPos+1;break;
case SB_THUMBTRACK:sPos=nPos;break;
case SB_PAGEUP:sPos=sPos-3;break;
case SB_PAGEDOWN:sPos=sPos+3;break;
}
if (sPos<0)
{
sPos=0;
}
if (sPos>la)
{
sPos=la;
}
//updateBuffer();
RedrawWindow();
InvalidateRect(NULL, FALSE);
UpdateWindow();
}
// Menus checken /////////////////////////////////////////////////////////////////////////////
void CMainWindow::OnFileOpen()
{
sPos=0;
CString szFilter="CliBench Files Mk III Files (*.cb3) |*.cb3| CliBench Mk II Files (*.cbf) |*.cbf| All files (*.*)|*.*||";
CString defName="*.cb3";
CString descBuf;
int driveno;
CStdioFile fi;
CString sFileName;
char buf[13];
CFileDialog *mDateiWahl;
int i=0;
while (i<la)
{
marks[0][i][0][0]=char(0);
marks[0][i][1][0]=char(0);
++i;
}
mDateiWahl=new CFileDialog(TRUE,NULL,defName,OFN_HIDEREADONLY,szFilter);
mDateiWahl->m_ofn.lpstrTitle="CliBench open file...";
if (mDateiWahl->DoModal()==IDOK)
{
sFileName=mDateiWahl->GetPathName();
if(!fi.Open(sFileName,CFile::modeRead))
{
AfxMessageBox("Can't open file!",MB_OK|MB_ICONSTOP);
}
else
{
//Datei einlesen
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -