|
In fact, I can't believe the result myself. But from my simple test, i found the matrix with 1024 alike is much slowly in memory access than 1023 or 1025.
I dont know the real reason.
My test program is very simple. My aim is test the memory copy cost in a matrix.
There are three parameters to used, M for the size of matrix, N for the rows or columns try to copy, and Z is make the program run longer to get a stable result.
#include <stdio.h>
#include <time.h>
#include <memory.h>
#include <stdlib.h>
void main(int argc, char** argv)
{
int M,N,Z;
M = atoi(argv[1]);
N = atoi(argv[2]);
Z = atoi(argv[3]);
char *buf, *buf2;
buf = new char[M*M];
memset(buf, 1, M*M);
buf2 = new char[M*M];
memset(buf2, 2, M*M);
int i,j,k;
clock_t a = clock();
for (k=0; k<Z; k++)
memcpy(buf2, buf, N*M);
clock_t b = clock();
for (k=0; k<Z; k++)
{
for (i=0; i<M; i++)
memcpy(&buf2[i*M], &buf[i*M], N);
}
clock_t c = clock();
printf("cost1 %ld const2 %ld\n", b-a, c-b);
}
The result I got:
Z is always 100000
M N Cost1 Cost2
1023 3 47 6000
1024 3 62 22750
1025 3 47 6516
2047 3 110 28000
2048 3 94 57093
2049 3 94 45187
You can see the weird result, 1024, 2048 has the worst performance against the smaller or bigger number.
I always use the power of 2 as matrix's side, but the test show i am wrong.
But any guru can tell what's the exact reason inside?
|
|
|
|
|
From what I see here:
for (k=0; k<Z; k++)<br />
{<br />
for (i=0; i<M; i++)<br />
memcpy(&buf2[i*M], &buf[i*M], N);<br />
}
majority of time you are just copying 3 bytes (assuming N=3) and not 1023,1024 and etc...
On first iteration however, I would think you spend more time multiplying N*M and considering that N=3 in no case you get power of 2...
"...Ability to type is not enough to become a Programmer. Unless you type in VB. But then again you have to type really fast..."
Me
|
|
|
|
|
The problem is not whether the script can be speed up or not. My script is just a speed tester.
The main trouble in the second loop.
Why 1024 perform much worse than 1023 and 1025 in the same program, even 1025 is bigger than 1024?
Any idea?
|
|
|
|
|
Why 1024 perform much worse than 1023 and 1025 in the same program, even 1025 is bigger than 1024?
You are not allocating 1024 bytes on the Heap and you are not copying 1024 bytes. So, what exactly you want to test?
If speed of memcpy -- then I'll give you an answer: the shorter the better -- just check the code: nothing specific to pow of 2...
If you assume that allocation with size 1024 would be alligned at 1024 address: wrong again -- that is true for HeapAlloc -- you are using new, which is default malloc that in reality is your requested size + 4 bytes in front to be returned by _msize()...
Now I agree, that getting non-linear results seems weird.
However, are you running any kind of optimization?...
I would recommend trying to decrease Z, while making N=M -- see what happens...
"...Ability to type is not enough to become a Programmer. Unless you type in VB. But then again you have to type really fast..."
Me
|
|
|
|
|
In fact, i am working on a tiled image application, each tile sometime need several rows or columns of data in nearby tile. This is the reason i write the tester.
In this situation, you will find 1024 is not a good selection, even you create a matrix with side of 1025 (but not use the extended 1 pixel) will work better than exactly 1024.
I think i didn't turn on any special optimization. Just use the default release option as console in vs7. I also copy my tester to other pc. The result is almost the same.
PS. my Os is win2k, CPU is P4 1.7G, Memory 512M
|
|
|
|
|
I have an edit box. I click Properties, then Border
and the border of the edit box goes away. The problem
is, the text in the box now appears way in the upper
left corner. Is there any way to not have a border
and make the text start down just a pixel or 2 (and
maybe to the right by 1-pixel)???
Please any response anyone can give me will be greatly
appreciated.
Sincerly,
Danielle (an overworked graduate student)
|
|
|
|
|
I don't think this is possible in the resource editor properties so you can either reduce the height of the edit control or do the following in code.
Try pEdit->SetRect() and position the rect vertically in the middle of the edit window. Use GetRecit() to get its current rect, then just update the top and bottom values.
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
When my application is runing ,other aplications of in Windows 2k don't work (when my application runing ,my application has a appropriation the operating system itself )
|
|
|
|
|
You're writing a virus ?
What is your question ? What does your program do ?
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
not virus , a user run my application ,don't ask him to run others ,the clients sue .this is for MIS . Do you understand ?
|
|
|
|
|
No, I don't understand. What does 'don't ask him to run others' mean ? What's MIS ?
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
After you run my application ,the other application will be stoped .MIS(manager Information System).thank you .
|
|
|
|
|
Stopped as in a killed process, or as in stops doing anything ? What is Manager Information System ? What does this app of yours do ?
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
|
Let's see - an anonymous guy won't tell me what his app is, or answer my other questions to try and figure out what his problem is. Should I be trying to help here ?
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
do you understand me ? are you a programmer ?
|
|
|
|
|
Check how many articles I have on this site and then you decide.
The problem is not who is and isn't a programmer, it's that you can't speak English ( which is not a crime ), and, more importantly, won't answer my questions. I still don't know if your program stops other processes from responding, or kills them. Did you understand when I asked you that ? Are you a programmer ?
Apart from that, you're secretive about what your program does, and you're posting anonymously. You need to be less rude if you want to act like that and still get people to help you.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
hmm my guess is that, he wants his users not be able to run any other applications while his application is running, it probably works like a "lock" on the clients' machines: while my app is running, you cannot alt-tab out, cannot browse files/folders on the hard disks, cannot access "my computer" or "control panel", cannot do whatever until my app is terminated.
That I think is reasonable since computers in some public environments such as libraries or internet bars are acting like this, in a library you can use their computers to search for some particular books you needed, but you can't delete their files or run you own programs on that machine right?
Anyway, to the original poster, I think you might want to develop a program that runs in "full screen" and "exclusive" screen mode and install global hooks to disable system keys, such as "alt-tab", "ctrl-alt-del", etc... I'm not good on those stuff, though.
|
|
|
|
|
|
thank you very much .
|
|
|
|
|
I want to use ms word as a doc viewer,and incapacitate it's most function,such as "save as","copy","paste".
I have not idea about this.Is that a comparative easy method can achieve my goal??
lost my way
|
|
|
|
|
Microsoft also distributes a word document "viewer" for people who do not have Word.
It may be able to be controlled via COM/OLE just like Word can.
|
|
|
|
|
Where can I get the doc viewer?
Is that a activex?
lost my way
|
|
|
|
|
|
Hi,
I'm attempting to add some Windows Explorer style functionality to my archiving program, which is dialog-based and uses the straight Windows API with _no_ MFC. So far I have created a tree view and a list view with a splitter between them. However, I am having problems in finding any decent information on how to implement full drag and drop functionality *without* using MFC. I found the following two excellent articles on tree views and list views using Win32:
http://www.codeproject.com/useritems/TreeView.asp
http://www.codeproject.com/useritems/ListView.asp
The Tree view article covers the rudiments of dragging and dropping, so that I am able to create a drag image and drag one directory onto another. The TVN_BEGINDRAG and WM_MOUSEMOVE sections of the code work great. However, what the article doesn't cover in the WM_LBUTTONUP section is the code required actually to move the dragged directory into the selected directory (my tree view items are directories). This is the code I have in the WM_LBUTTONUP function so far:
<br />
case WM_LBUTTONUP:<br />
{<br />
if (Dragging) <br />
{<br />
ImageList_DragLeave(hTree);<br />
ImageList_EndDrag();<br />
ReleaseCapture();<br />
ShowCursor(TRUE); <br />
Dragging = FALSE;<br />
<br />
<br />
}<br />
}<br />
I have found some MFC code at http://www.codeguru.com/treeview/drag_drop.shtml that seems to do what I want, but I don't know how to convert it into non-MFC, simple Win32 API code. The section that I need to convert from MFC and insert into the above code is this:
<br />
SelectDropTarget(NULL);<br />
if( m_hitemDrag == m_hitemDrop )<br />
return;<br />
<br />
HTREEITEM htiParent = m_hitemDrop;<br />
while( (htiParent = GetParentItem( htiParent )) != NULL )<br />
{<br />
if( htiParent == m_hitemDrag ) return;<br />
}<br />
<br />
Expand( m_hitemDrop, TVE_EXPAND ) ;<br />
<br />
HTREEITEM htiNew = CopyBranch( m_hitemDrag, m_hitemDrop, TVI_LAST );<br />
DeleteItem(m_hitemDrag);<br />
SelectItem( htiNew );<br />
In particular, I have no idea what the equivalents of GetParentItem() and CopyBranch() are in Win32... Can anybody please help me convert this so that I can get drag-and-drop functionality between treeview items in my app?
Also, if anyone knows where I can find a good tutorial/example on how to drag and drop between a list view and a tree view using _no_ MFC, I would be very grateful, as that will be my next problem after sorting this out...
Any help would be much appreciated,
Many thanks,
KB
|
|
|
|
|