mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
.benchmarks
git-svn-id: svn://ultimatepp.org/upp/trunk@11613 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
c7dc488d0d
commit
d0a4deb085
7 changed files with 234 additions and 12 deletions
|
|
@ -17,6 +17,7 @@ Data src[16], dst[16];
|
|||
|
||||
int count;
|
||||
|
||||
/*
|
||||
force_inline void SSEZero16(void *t)
|
||||
{
|
||||
_mm_storeu_si128((__m128i*)t, _mm_setzero_si128());
|
||||
|
|
@ -27,6 +28,7 @@ force_inline void SSEZero32(void *t)
|
|||
_mm_storeu_si128((__m128i*)t, _mm_setzero_si128());
|
||||
_mm_storeu_si128((__m128i*)t + 1, _mm_setzero_si128());
|
||||
}
|
||||
*/
|
||||
|
||||
CONSOLE_APP_MAIN
|
||||
{
|
||||
|
|
@ -100,6 +102,12 @@ CONSOLE_APP_MAIN
|
|||
MemoryFree32(MemoryAlloc32());
|
||||
}
|
||||
}
|
||||
{
|
||||
for(int i = 0; i < 100; i++) {
|
||||
RTIMING("Alloc/Free huge");
|
||||
delete[] new byte[300000];
|
||||
}
|
||||
}
|
||||
{
|
||||
RTIMING("Alloc/Free large");
|
||||
for(int i = 0; i < N; i++) {
|
||||
|
|
@ -124,7 +132,7 @@ CONSOLE_APP_MAIN
|
|||
dst[i & 15].Zero();
|
||||
}
|
||||
}
|
||||
{
|
||||
/* {
|
||||
RTIMING("SSEZero32");
|
||||
for(int i = 0; i < N; i++) {
|
||||
SSEZero32(&dst[i & 15]);
|
||||
|
|
@ -136,7 +144,7 @@ CONSOLE_APP_MAIN
|
|||
SSEZero16(&dst[i & 15]);
|
||||
}
|
||||
}
|
||||
{
|
||||
*/ {
|
||||
RTIMING("Copy32");
|
||||
for(int i = 0; i < N; i++) {
|
||||
dst[i & 15] = src[i & 15];
|
||||
|
|
@ -186,4 +194,11 @@ CONSOLE_APP_MAIN
|
|||
dst[i & 15].xxx = src[i & 15].xxx / n;
|
||||
}
|
||||
}
|
||||
{
|
||||
int n = Random();
|
||||
RTIMING("Mul");
|
||||
for(int i = 0; i < N; i++) {
|
||||
dst[i & 15].xxx = src[i & 15].xxx * n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
85
benchmarks/CoWork/CoWork.cpp
Normal file
85
benchmarks/CoWork/CoWork.cpp
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
#include <Core/Core.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
force_inline double Sum(const String& s)
|
||||
{
|
||||
CParser p(s);
|
||||
double sum = 0;
|
||||
while(!p.IsEof())
|
||||
sum += p.ReadDouble();
|
||||
return sum;
|
||||
}
|
||||
|
||||
CONSOLE_APP_MAIN
|
||||
{
|
||||
SeedRandom(0);
|
||||
Vector<String> data;
|
||||
for(int i = 0; i < 10000000; i++) {
|
||||
int n = Random(7);
|
||||
data.Add();
|
||||
for(int j = 0; j < n; j++)
|
||||
data.Top() << Random() << ' ';
|
||||
}
|
||||
|
||||
// for(int i = 0; i < 10000; i++)
|
||||
{
|
||||
{
|
||||
double sum = 0;
|
||||
{
|
||||
RTIMING("Single thread");
|
||||
for(const String& s : data)
|
||||
sum += Sum(s);
|
||||
}
|
||||
// RDUMP(sum);
|
||||
}
|
||||
if(0) {
|
||||
double sum = 0;
|
||||
{
|
||||
RTIMING("CoWork");
|
||||
CoWork co;
|
||||
for(const String& s : data)
|
||||
co & [=, &sum] {
|
||||
double m = Sum(s);
|
||||
CoWork::FinLock();
|
||||
sum += m;
|
||||
};
|
||||
}
|
||||
// RDUMP(sum);
|
||||
}
|
||||
{
|
||||
double sum = 0;
|
||||
{
|
||||
RTIMING("CoPartition");
|
||||
CoWork co;
|
||||
CoPartition(0, data.GetCount(),
|
||||
[&](int l, int h) {
|
||||
double m = 0;
|
||||
for(int j = l; j < h; j++)
|
||||
m += Sum(data[j]);
|
||||
CoWork::FinLock();
|
||||
sum += m;
|
||||
});
|
||||
}
|
||||
// RDUMP(sum);
|
||||
}
|
||||
{
|
||||
double sum = 0;
|
||||
|
||||
{
|
||||
RTIMING("CoIndex");
|
||||
|
||||
CoWork co;
|
||||
co * [&] {
|
||||
double m = 0;
|
||||
int i;
|
||||
while((i = co.Next()) < data.GetCount())
|
||||
m += Sum(data[i]);
|
||||
CoWork::FinLock();
|
||||
sum += m;
|
||||
};
|
||||
}
|
||||
// RDUMP(sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
9
benchmarks/CoWork/CoWork.upp
Normal file
9
benchmarks/CoWork/CoWork.upp
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
uses
|
||||
Core;
|
||||
|
||||
file
|
||||
CoWork.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "";
|
||||
|
||||
|
|
@ -5,7 +5,8 @@ uses
|
|||
file
|
||||
LionBenchmark.h,
|
||||
lion.cpp,
|
||||
main.cpp;
|
||||
main.cpp,
|
||||
info.txt;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI MT";
|
||||
|
|
|
|||
90
benchmarks/LionBenchmark/info.txt
Normal file
90
benchmarks/LionBenchmark/info.txt
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
Standard 0.982318271119843
|
||||
MT 1.08342361863489
|
||||
========== PAINT
|
||||
TIMING Fill : 213.86 ms - 46.29 us (214.00 ms / 4620 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 4620
|
||||
TIMING Rasterize : 174.86 ms - 37.85 us (175.00 ms / 4620 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 4620
|
||||
TIMING Create : 167.07 ms - 5.30 us (168.00 ms / 31511 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 31511
|
||||
|
||||
|
||||
---------------------------------------
|
||||
RMAP
|
||||
|
||||
data.GetCount() = 132
|
||||
Standard 1.38888888888889
|
||||
MT 0.8424599831508
|
||||
========== PAINT
|
||||
TIMING Fill : 194.82 ms - 32.80 us (195.00 ms / 5940 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 5940
|
||||
TIMING Rasterize : 398.82 ms - 67.14 us (399.00 ms / 5940 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 5940
|
||||
TIMING Create : 2.81 ms - 70.28 ns ( 4.00 ms / 39925 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 39925
|
||||
|
||||
|
||||
---------------------------------------
|
||||
RINDEX
|
||||
|
||||
Standard 1.18906064209275
|
||||
MT 0.768049155145929
|
||||
========== PAINT
|
||||
TIMING Fill : 248.82 ms - 38.19 us (249.00 ms / 6515 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 6515
|
||||
TIMING Rasterize : 325.82 ms - 50.01 us (326.00 ms / 6515 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 6515
|
||||
TIMING Create : 9.81 ms - 223.66 ns (11.00 ms / 43841 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 43841
|
||||
|
||||
--------------------------------------
|
||||
RPTR
|
||||
|
||||
Standard 1.0989010989011
|
||||
MT 0.727272727272727
|
||||
========== PAINT
|
||||
TIMING Fill : 276.81 ms - 40.26 us (277.00 ms / 6875 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 6875
|
||||
TIMING Rasterize : 285.81 ms - 41.57 us (286.00 ms / 6875 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 6875
|
||||
TIMING Create : 16.71 ms - 361.11 ns (18.00 ms / 46287 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 46287
|
||||
|
||||
--------------------------------------
|
||||
RPTR 64
|
||||
|
||||
Standard 1.08342361863489
|
||||
MT 0.612745098039216
|
||||
========== PAINT
|
||||
TIMING Fill : 139.88 ms - 28.57 us (140.00 ms / 4896 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 4896
|
||||
TIMING Rasterize : 253.88 ms - 51.85 us (254.00 ms / 4896 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 4896
|
||||
TIMING Create : 46.29 ms - 432.60 ns (49.00 ms / 107005 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 107005
|
||||
|
||||
--------------------------------------
|
||||
RPTR 64 memset
|
||||
|
||||
Standard 1.06951871657754
|
||||
MT 0.607533414337789
|
||||
========== PAINT
|
||||
TIMING Fill : 145.88 ms - 29.54 us (146.00 ms / 4938 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 4938
|
||||
TIMING Rasterize : 297.88 ms - 60.32 us (298.00 ms / 4938 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 4938
|
||||
TIMING Create : 38.30 ms - 354.90 ns (41.00 ms / 107927 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 107927
|
||||
|
||||
--------------------------------------
|
||||
RPTR 64 memset, looper
|
||||
|
||||
Standard 1.07066381156317
|
||||
MT 0.573065902578796
|
||||
========== PAINT
|
||||
TIMING Fill : 361.86 ms - 69.08 us (362.00 ms / 5238 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 5238
|
||||
TIMING Rasterize : 296.86 ms - 56.67 us (297.00 ms / 5238 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 5238
|
||||
TIMING Create : 51.87 ms - 453.28 ns (55.00 ms / 114425 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 114425
|
||||
|
||||
-------------------------------
|
||||
FINAL 64
|
||||
96 B, 378 allocated ( 35 KB), 0 fragmented ( 0 KB)
|
||||
128 B, 1 allocated ( 0 KB), 30 fragmented ( 3 KB)
|
||||
192 B, 11 allocated ( 2 KB), 10 fragmented ( 1 KB)
|
||||
224 B, 1 allocated ( 0 KB), 17 fragmented ( 3 KB)
|
||||
288 B, 1 allocated ( 0 KB), 13 fragmented ( 3 KB)
|
||||
384 B, 1 allocated ( 0 KB), 9 fragmented ( 3 KB)
|
||||
TOTAL, 393 allocated ( 38 KB), 79 fragmented ( 16 KB)
|
||||
Free 4KB pages 0 (0 KB)
|
||||
Large block count 0, total size 0 KB
|
||||
Large fragments count 0, total size 0 KB
|
||||
Large free 64KB pages 0, total size 0 KB
|
||||
Big block count 1, total size 3907 KB
|
||||
|
||||
Standard 1.00908173562059
|
||||
MT 0.538793103448276
|
||||
========== PAINT
|
||||
TIMING Finish : 674.85 ms - 121.14 us (675.00 ms / 5571 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 5571
|
||||
TIMING Create : 38.67 ms - 317.78 ns (42.00 ms / 121697 ), min: 0.00 ns, max: 1.00 ms, nesting: 1 - 121697
|
||||
|
|
@ -173,6 +173,7 @@ Vector<ColorPolygon> Lion()
|
|||
dword c = p.ReadNumber(16);
|
||||
color = Color(c >> 16, (c >> 8) & 255, c & 255);
|
||||
}
|
||||
RDUMP(data.GetCount());
|
||||
return data;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,37 +3,58 @@
|
|||
double tm[2];
|
||||
|
||||
struct MyApp : public TopWindow {
|
||||
bool co = true;
|
||||
|
||||
virtual void LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
co = !co;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
virtual void Paint(Draw& w) {
|
||||
RLOG("========== PAINT");
|
||||
ImageBuffer ib(GetSize());
|
||||
{
|
||||
BufferPainter sw(ib);
|
||||
// sw.Co();
|
||||
sw.Co(co);
|
||||
sw.Clear(White());
|
||||
sw.Scale(2);
|
||||
// sw.Scale(2);
|
||||
// sw.Opacity(0.98);
|
||||
PaintLion(sw);
|
||||
}
|
||||
w.DrawImage(0, 0, ib);
|
||||
w.DrawText(500, 0, Format("Standard %.4f", tm[0]));
|
||||
w.DrawText(500, 50, Format("Multithreaded %.4f", tm[1]));
|
||||
w.DrawText(500, 100, Format("Standard / Multithreaded %.4f", tm[0] / tm[1]));
|
||||
w.DrawText(500, 150, co ? "MT" : "");
|
||||
}
|
||||
};
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
#if 0
|
||||
#if 1 && !defined(_DEBUG)
|
||||
RDUMP(MemoryUsedKb());
|
||||
PeakMemoryProfile();
|
||||
ImageBuffer ib(1000, 1000);
|
||||
BufferPainter sw(ib);
|
||||
PaintLion(sw);
|
||||
for(int pass = 0; pass < 2; pass++) {
|
||||
int time0 = msecs();
|
||||
int n = 0;
|
||||
BufferPainter sw(ib);
|
||||
sw.Scale(2);
|
||||
sw.Opacity(0.3);
|
||||
while(msecs(time0) < 1000) {
|
||||
n++;
|
||||
BufferPainter sw(ib);
|
||||
sw.Co(pass);
|
||||
// sw.Scale(2);
|
||||
// sw.Opacity(0.3);
|
||||
PaintLion(sw);
|
||||
}
|
||||
tm[pass] = (double)msecs(time0) / n;
|
||||
}
|
||||
RLOG("=========================");
|
||||
RLOG(*PeakMemoryProfile());
|
||||
RLOG("Standard " << tm[0]);
|
||||
RLOG("MT " << tm[1]);
|
||||
#endif
|
||||
MyApp().Run();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue