Gustav Brock
Gustav at cactus.dk
Mon Oct 31 07:32:27 CST 2005
Hi Shamil
For "redefining the interface" you mean that a Long is not enough to specify a count of loops large enough to obtain a running time of some seconds?
That's the only parameter I wish to pass.
The only needed value to return is the running duration in seconds.
If so, couldn't we expand with an additional loop to multiply the count of loops:
for (lngSequence=0; lngSequence < lngSequences; lngSequence++) {
for (lngLoop=0; lngLoop < lngLoopMax; lngLoop++) {
for (lngItem=0; lngItem < lngItems; lngItem++) {
alngTmp[lngItem][0] = lngLoop * 10;
if (alngTmp[lngItem][0] / 10 == 100) lngResult = 1;
else lngResult = 0;
lngCnt++;
}
}
}
and then add lngSequences as a separate parameter:
static long ArrayTimeLocal(long lngSequences, long lngLoopMax, long& lngTotalCnt, bool useTracePrinting = false);
That would be great.
/gustav
>>> shamil at users.mns.ru 31-10-2005 13:22:23 >>>
Gustav,
Yes, I can make a C++ dll but maybe you first (re)define your test function
call interface because even if you call very quick C++ function 1000 times
from VB6 you can loose all the advantages this C++ function gives.
Currently - here is C++ (non managed) console applications results for a
function similar to yours:
10,000,000,000 your cycles in 13 seconds (ot looks like I did some mistakes
in my previous time calculations - I have to recheck)
=====================================
Final Result = 13, Final Counter = 10000000000
=====================================
Here is the C++ code for the last test:
#include "stdafx.h"
#include <time.h>
static long ArrayTimeLocal(long lngLoopMax, long& lngTotalCnt, bool
useTracePrinting = false);
int _tmain(int argc, _TCHAR* argv[])
{
_int64 lngTotalCnt = 0;
long lngCnt = 0;
time_t /*double*/ dblStart;
time_t /*double*/ dblStop;
long lngSeconds = 0;
time(&dblStart);
for (int i=1; i<=10; i++) {
ArrayTimeLocal(10000000, lngCnt);
lngTotalCnt += lngCnt;
}
time(&dblStop);
lngSeconds = (long)difftime(dblStop,dblStart);;
printf("Final Result = %ld, Final Counter = %I64d\n",
lngSeconds, lngTotalCnt);
}
static long ArrayTimeLocal(long lngLoopMax, long& lngTotalCnt, bool
useTracePrinting) {
const long lngItems = 100;
long alngTmp[lngItems][2];
long lngLoop;
long lngItem;
long lngResult = 0;
time_t /*double*/ dblStart;
time_t /*double*/ dblStop;
long lngSeconds;
long lngCnt = 0;
if (useTracePrinting) printf("Array looping test started..\n");
time(&dblStart);
for (lngLoop=0; lngLoop < lngLoopMax; lngLoop++) {
for (lngItem=0; lngItem < lngItems; lngItem++) {
alngTmp[lngItem][0] = lngLoop * 10;
if (alngTmp[lngItem][0] / 10 == 100) lngResult = 1;
else lngResult = 0;
lngCnt++;
}
}
time(&dblStop);
if (useTracePrinting) printf("Array looping test ended.\n");
lngSeconds = (long)difftime(dblStop,dblStart);;
if (useTracePrinting) printf("Result = %lf, Counter = %ld\n",
lngSeconds, lngTotalCnt);
lngTotalCnt = lngCnt;
return lngSeconds;
}
I will try to move now all variable from stack to static memory - I expect
it may bring even more speed execution gains. We will see.
As soon as you define your final call interface I will make a test C++
.dll...
Shamil