News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Can this be converted to sse

Started by zemtex, December 16, 2011, 05:18:28 PM

Previous topic - Next topic

MichaelW

#30
The attachment contains a test of the sumlol and sumlol2 functions. I started out trying to do the test in C, but as noted the Microsoft C compiler chokes on the m -= left statement in the middle of the variable declarations. Instead of rearranging the statements I decided to go with C++, since that was apparently the target. Here are the results running on my P3 system:


0:      0       1145324609
1:      0       1145324609
2:      0       1145324609
3:      0       1145324609
4:      3       1145324612
5:      3       1145324612
6:      8       1145324617
7:      14      1145324623
8:      14      1145324623
9:      14      1145324623
10:     23      1145324632
11:     33      1145324642
12:     33      1145324642
13:     45      1145324654
14:     45      1145324654
15:     45      45
16:     60      60
17:     60      60
18:     60      60
19:     78      78
20:     78      78
21:     98      98
22:     119     119
23:     119     119
24:     119     119
25:     143     143
26:     168     168
27:     168     168
28:     195     195
29:     195     195
30:     195     195
31:     225     225
32:     225     225
33:     225     225
34:     258     258
35:     258     258
36:     293     293
37:     329     329
38:     329     329
39:     329     329
40:     368     368
41:     408     408
42:     408     408
43:     450     450
44:     450     450
45:     450     450
46:     495     495
47:     495     495
48:     495     495
49:     543     543
50:     543     543
51:     593     593
52:     644     644
53:     644     644
54:     644     644
55:     698     698
56:     753     753
57:     753     753
58:     810     810
59:     810     810
60:     810     810
61:     870     870
62:     870     870
63:     870     870
64:     933     933
65:     933     933
66:     998     998
67:     1064    1064
68:     1064    1064
69:     1064    1064
70:     1133    1133
71:     1203    1203
72:     1203    1203
73:     1275    1275
74:     1275    1275
75:     1275    1275
76:     1350    1350
77:     1350    1350
78:     1350    1350
79:     1428    1428
80:     1428    1428
81:     1508    1508
82:     1589    1589
83:     1589    1589
84:     1589    1589
85:     1673    1673
86:     1758    1758
87:     1758    1758
88:     1845    1845
89:     1845    1845
90:     1845    1845
91:     1935    1935
92:     1935    1935
93:     1935    1935
94:     2028    2028
95:     2028    2028
96:     2123    2123
97:     2219    2219
98:     2219    2219
99:     2219    2219

0       50 cycles
99      701 cycles

0       66 cycles
99      698 cycles


BTW, I used /O2 /G6 without verifying that these options are a good choice, or running tests to determine which options produce the fastest code.

http://msdn.microsoft.com/en-US/library/19z1t1wy(v=VS.80).aspx

Edit: The /G6 option seems to have no effect when combined with /O2. Combining /O2 and /arch:SSE2 produced faster code for the first function, that still ran on my P3 and produced the same results, but I didn't have time to examine the ASM output to determine what the differences are.

0       50 cycles
99      688 cycles

0       74 cycles
99      699 cycles


See second attachment.
eschew obfuscation