@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 1048576 (Q=20) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 16 [msec] | |||
[Timing] Mem-xch : 1627 [usec] | |||
[Timing] Sorting : 15 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 2097152 (Q=21) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 33 [msec] | |||
[Timing] Mem-xch : 2906 [usec] | |||
[Timing] Sorting : 30 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 4194304 (Q=22) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 71 [msec] | |||
[Timing] Mem-xch : 5624 [usec] | |||
[Timing] Sorting : 66 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 8388608 (Q=23) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 153 [msec] | |||
[Timing] Mem-xch : 10 [msec] | |||
[Timing] Sorting : 142 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 16777216 (Q=24) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 327 [msec] | |||
[Timing] Mem-xch : 21 [msec] | |||
[Timing] Sorting : 305 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 33554432 (Q=25) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 696 [msec] | |||
[Timing] Mem-xch : 42 [msec] | |||
[Timing] Sorting : 654 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 67108864 (Q=26) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 1493 [msec] | |||
[Timing] Mem-xch : 84 [msec] | |||
[Timing] Sorting : 1408 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 134217728 (Q=27) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 3177 [msec] | |||
[Timing] Mem-xch : 168 [msec] | |||
[Timing] Sorting : 3009 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 268435456 (Q=28) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 6782 [msec] | |||
[Timing] Mem-xch : 336 [msec] | |||
[Timing] Sorting : 6445 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V0 | |||
[Log]: Array size: 536870912 (Q=29) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 14.42 [sec] | |||
[Timing] Mem-xch : 673 [msec] | |||
[Timing] Sorting : 13.75 [sec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 1048576 (Q=20) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 8271 [usec] | |||
[Timing] Mem-xch : 1613 [usec] | |||
[Timing] Sorting : 6666 [usec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 2097152 (Q=21) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 17 [msec] | |||
[Timing] Mem-xch : 2987 [usec] | |||
[Timing] Sorting : 14 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 4194304 (Q=22) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 37 [msec] | |||
[Timing] Mem-xch : 5752 [usec] | |||
[Timing] Sorting : 31 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 8388608 (Q=23) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 78 [msec] | |||
[Timing] Mem-xch : 10 [msec] | |||
[Timing] Sorting : 67 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 16777216 (Q=24) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 161 [msec] | |||
[Timing] Mem-xch : 21 [msec] | |||
[Timing] Sorting : 139 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 33554432 (Q=25) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 353 [msec] | |||
[Timing] Mem-xch : 42 [msec] | |||
[Timing] Sorting : 311 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 67108864 (Q=26) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 774 [msec] | |||
[Timing] Mem-xch : 84 [msec] | |||
[Timing] Sorting : 689 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 134217728 (Q=27) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 1709 [msec] | |||
[Timing] Mem-xch : 168 [msec] | |||
[Timing] Sorting : 1539 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 268435456 (Q=28) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 3701 [msec] | |||
[Timing] Mem-xch : 338 [msec] | |||
[Timing] Sorting : 3358 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V1 | |||
[Log]: Array size: 536870912 (Q=29) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 8106 [msec] | |||
[Timing] Mem-xch : 676 [msec] | |||
[Timing] Sorting : 7428 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 1048576 (Q=20) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 8985 [usec] | |||
[Timing] Mem-xch : 1665 [usec] | |||
[Timing] Sorting : 7294 [usec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 2097152 (Q=21) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 18 [msec] | |||
[Timing] Mem-xch : 2849 [usec] | |||
[Timing] Sorting : 15 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 4194304 (Q=22) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 38 [msec] | |||
[Timing] Mem-xch : 5518 [usec] | |||
[Timing] Sorting : 33 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 8388608 (Q=23) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 81 [msec] | |||
[Timing] Mem-xch : 10 [msec] | |||
[Timing] Sorting : 70 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 16777216 (Q=24) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 169 [msec] | |||
[Timing] Mem-xch : 21 [msec] | |||
[Timing] Sorting : 148 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 33554432 (Q=25) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 370 [msec] | |||
[Timing] Mem-xch : 42 [msec] | |||
[Timing] Sorting : 328 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 67108864 (Q=26) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 810 [msec] | |||
[Timing] Mem-xch : 84 [msec] | |||
[Timing] Sorting : 726 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 134217728 (Q=27) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 1779 [msec] | |||
[Timing] Mem-xch : 168 [msec] | |||
[Timing] Sorting : 1609 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 268435456 (Q=28) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 3864 [msec] | |||
[Timing] Mem-xch : 337 [msec] | |||
[Timing] Sorting : 3527 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,23 @@ | |||
[Log]: Code version: V2 | |||
[Log]: Array size: 536870912 (Q=29) | |||
[Log]: Repeated sorts: 7 | |||
[Log]: GPU: NVIDIA GeForce GTX 1650 | |||
[Log]: Block size: 512 | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Log]: Initialize array ... Done. | |||
[Log]: Start sorting ... Done. | |||
[Timing] Total : 8424 [msec] | |||
[Timing] Mem-xch : 672 [msec] | |||
[Timing] Sorting : 7749 [msec] | |||
[Validation] Results validation ...[32m [PASSED] [0m |
@@ -0,0 +1,6 @@ | |||
# TeX auxiliary files | |||
*.aux | |||
*.log | |||
*.out | |||
*.synctex.gz | |||
@@ -0,0 +1,190 @@ | |||
% !TEX TS-program = xelatex | |||
% !TEX encoding = UTF-8 Unicode | |||
% !TEX spellcheck = el-GR | |||
% | |||
% PDS homework_3 report | |||
% | |||
% Requires compilation with pdfLaTeX or XeLaTeX | |||
% | |||
% authors: | |||
% Χρήστος Χουτουρίδης ΑΕΜ 8997 | |||
% cchoutou@ece.auth.gr | |||
% | |||
% Options: | |||
% | |||
% 1) mainlang=<language> | |||
% Default: english | |||
% Set the default language of the document which affects hyphenations, | |||
% localization (section, dates, etc...) | |||
% | |||
% example: \documentclass[mainlang=greek]{AUThReport} | |||
% | |||
% 2) <language> | |||
% Add hyphenation and typesetting support for other languages | |||
% Currently supports: english, greek, german, frenc | |||
% | |||
% example: \documentclass[english, greek]{AUThReport} | |||
% | |||
% 3) short: Requests a shorter title for the document | |||
% Default: no short | |||
% | |||
% example: \documentclass[short]{AUThReport} | |||
% | |||
\documentclass[a4paper, 11pt, mainlang=greek, english]{AUThReport} | |||
\CurrentDate{\today} | |||
% Document setup | |||
%--------------------------------- | |||
% \WorkGroup{Ομάδα Χ} | |||
\AuthorName{Χρήστος Χουτουρίδης} | |||
\AuthorMail{cchoutou@ece.auth.gr} | |||
\AuthorAEM{8997} | |||
%\CoAuthorName{Όνομα Επίθετο} | |||
%\CoAuthorAEM{AEM} | |||
%\CoAuthorMail{xxx@ece.auth.gr} | |||
\DocTitle{Εργασία 3: Bitonic sort with CUDA} | |||
\DocSubTitle{Ανάλυση και υλοποίηση του αλγόριθμου bitonic sort για υποσύστημα γραφικών με χρήση CUDA} | |||
\Department{Τμήμα ΗΜΜΥ. Τομέας Ηλεκτρονικής} | |||
\ClassName{Παράλληλα και Διανεμημένα Συστήματα} | |||
% | |||
\InstructorName{Νικόλαος Πιτσιάνης} | |||
\InstructorMail{nikos.pitsianis@eng.auth.gr} | |||
%\CoInstructorName{Όνομα Επίθετο} | |||
%\CoInstructorMail{xxx@ece.auth.gr} | |||
% Local package requirements | |||
%--------------------------------- | |||
\usepackage{enumitem} | |||
\usepackage{tabularx} | |||
\usepackage{array} | |||
\usepackage{multirow} | |||
\usepackage{float} | |||
\usepackage{xcolor} | |||
\usepackage{soul} | |||
\usepackage{amsmath} | |||
\usepackage{footnote} | |||
\usepackage{footmisc} | |||
%\definecolor{red-highlight}{rgb}{1.0, 0.11, 0.0} | |||
\definecolor{red-highlight}{rgb}{1.0, 0.31, 0.0} | |||
\definecolor{green-highlight}{rgb}{0.0, 0.62, 0.42} | |||
\newcommand{\bxrd}[1]{\colorbox{red-highlight}{#1}} | |||
\newcommand{\bxgr}[1]{\colorbox{green-highlight}{#1}} | |||
\newcommand{\trd}[1]{\textcolor{red-highlight}{\textbf{#1}}} | |||
\newcommand{\tgr}[1]{\textcolor{green-highlight}{\textbf{#1}}} | |||
% “virtual” cites | |||
% ---------------------------------------- | |||
\newcommand{\citeKnuthACM}{% | |||
Donald E. Knuth, \emph{Structured Programming with go to Statements}, ACM Computing Surveys, vol. 6, no. 4, 1974 | |||
} | |||
% Links | |||
\newcommand{\hwTwo}{https://git.hoo2.net/hoo2/PDS/src/branch/master/homework_2} | |||
\newcommand{\hwThree}{https://git.hoo2.net/hoo2/PDS/src/branch/master/homework_3} | |||
\newcommand{\bitonicSortWikipedia}{https://en.wikipedia.org/wiki/Bitonic_sorter} | |||
\begin{document} | |||
\InsertTitle | |||
%\tableofcontents | |||
\section{Εισαγωγή} | |||
Η παρούσα εργασία αποτελεί συνέχεια της \href{\hwTwo}{προηγούμενης υλοποίησης} του ίδιου αλγόριθμου σε κατανεμημένα συστήματα με τη χρήση MPI. | |||
Στην τρέχουσα έκδοση ο αλγόριθμος καλείται να εκτελεστεί σε υποσυστήματα γραφικών (GPU) με χρήση CUDA. | |||
Τα υποσυστήματα γραφικών μας δίνουν την δυνατότητα για πολύ μεγάλο αριθμό παραλληλοποίησης, κάτι που αποτελεί σημαντική διαφοροποίηση σε σχέση με την MPI έκδοση. | |||
Πρακτικά ο τρόπος με τον οποίο χρησιμοποιείται το υποσύστημα γραφικών σε αυτή την εργασία είναι σαν accelerator συγκεκριμένων συναρτήσεων. | |||
Η υλοποίηση του αλγόριθμου έγινε σε τρεις φάσεις ακολουθώντας τις υποδείξεις της εκφώνησης. | |||
Στην πρώτη φάση, το υποσύστημα γραφικών απλώς επιταχύνει το κύριο σώμα του αλγόριθμου, ενώ στις επόμενες έγινε προσπάθεια τροποποίησης αυτού ώστε να εκμεταλλευτούμε τα χαρακτηριστικά και τους πόρους του υποσυστήματος γραφικών, με αποδοτικότερο τρόπο. | |||
\subsection{Παραδοτέα} | |||
Τα παραδοτέα της εργασίας αποτελούνται από: | |||
\begin{itemize} | |||
\item Την παρούσα αναφορά. | |||
\item Το \href{\hwThree}{σύνδεσμο με το αποθετήριο} που περιέχει τον κώδικα για την παραγωγή των εκτελέσιμων, της αναφοράς και τις μετρήσεις. | |||
\end{itemize} | |||
\section {Υλοποίηση} | |||
Πριν ξεκινήσουμε με τις λεπτομέρειες του αλγόριθμου, καλό θα ήταν να περιγράψουμε τις βασικές συναρτήσεις και δομές που χρησιμοποιούνται στην εργασία, ώστε να βοηθήσουμε στην καλύτερη κατανόηση της υλοποίησης. | |||
\begin{itemize} | |||
\item \texttt{\textbf{Log}}: | |||
Πρόκειται για ένα τύπο ο οποίος μας δίνει logging δυνατότητες τις οποίες μπορεί ο χρήστης να ενεργοποιήσει από τη γραμμή εντολών με την παράμετρο \texttt{-v} ή \texttt{--verbose}. | |||
\item \texttt{\textbf{Timing}}: | |||
Η τάξη αυτή προσφέρει δυνατότητες χρονομέτρησης μίας ή και πολλαπλών κλήσεων αθροίζοντας τους χρόνους (accumulation). | |||
Επίσης προσφέρει δυνατότητες για πολλαπλές εκτελέσεις ολόκληρης της ταξινόμησης όπου οι χρόνοι μπορούν να ταξινομηθούν και να επιστραφεί ο ενδιάμεσος. | |||
Ο χρήστης μπορεί να επιλέξει την εμφάνιση των αποτελεσμάτων αλλά και τον αριθμό των εκτελέσεων από τη γραμμή εντολών με την παράμετρο \texttt{--perf}. | |||
\item \texttt{\textbf{bitonicSort()}}: | |||
Πρόκειται για την βασική συνάρτηση που υλοποιεί τον αλγόριθμο της εργασίας και είναι σε μορφή template για διαφορετικούς τύπους δεδομένων προς ταξινόμηση. | |||
Έχει υλοποιηθεί 3 φορές, μία για κάθε έκδοση της εκφώνησης V0, V1, V2 στο αρχείο \texttt{bitonicsort.hpp}. | |||
\item \texttt{\textbf{inBlockStep()/interBlockStep()}}: | |||
Ειδικά για τις εκδόσεις V1 και V2 όπου χρησιμοποιείται loop unrolling, το κύριο σώμα του αλγόριθμου bitonic sort έχει χωριστεί σε δύο συναρτήσεις. | |||
Μία που εκτελείτε εκτός του unrolling (\textit{interBlockStep()}) και μία που εκτελεί το ίδιο το unrolling (\textit{inBlockStep()}). | |||
\end{itemize} | |||
\par | |||
Όλοι οι παραπάνω τύποι είναι templates, και βρίσκονται στα αντίστοιχα headers (.hpp) αντί για αρχεία .cpp. | |||
Η συνάρτηση \textit{main()} που υλοποιεί τον αλγόριθμο μαζί με τον validator και το command line interface βρίσκονται στο αρχείο main.cpp. | |||
Στο αρχείο config.h υπάρχουν οι compile time ρυθμίσεις της υλοποίησης όπου ο χρήστης μπορεί να επιλέξει για παράδειγμα τον τύπο δεδομένων προς ταξινόμηση. | |||
\subsection{Πρώτη έκδοση (V0)} | |||
Η πρώτη έκδοση υλοποιεί τον βασικό αλγόριθμο επιταχύνοντας απλώς το κύριο σώμα του στην κάρτα γραφικών. | |||
Καθώς θεωρούμε πως ο αναγνώστης είναι ήδη εξοικειωμένος με την διτονική ταξινόμηση, δεν θα αναλύσουμε την λειτουργία της σε μεγάλο βάθος. | |||
Για πίνακα μεγέθους $2^N$ ο αλγόριθμος συνοψίζεται στα εξής: | |||
\begin{itemize} | |||
\item Εκτελούνται $N$ ακολουθίες ανταλλαγών με αύξον αριθμό: $m = 1, 2,\dots,N$. | |||
\item Η κάθε ακολουθία $m$ αποτελείται από ανταλλαγές μεταξύ γειτόνων, των οποίων η απόσταση ξεκινάει από $2^{m-1}$ και μειώνεται με διαδοχικές ακέραιες διαιρέσεις με το 2, εωσότου γίνει ένα: $2^{m-1}, 2^{m-2}, ..., 1$. | |||
\item Οι ανταλλαγές χωρίζουν τα μεγαλύτερα και τα μικρότερα στοιχεία με στόχο στο τέλος της κάθε ακολουθίας τα στοιχεία του πίνακα να αποτελούν διαδοχικές διτονικές ακολουθίες. | |||
Μέτά την πρώτη ακολουθία ανταλλαγών να έχουμε $\frac{N}{2}$ διτονικές ακολουθίες, μετά την δεύτερη $\frac{N}{4}$ ακολουθίες και ούτω κάθε εξής, έως ότου στην τελευταία να έχουμε $\frac{N}{2N} = \frac{1}{2}$ διτονική, δηλαδή μια πλήρως ταξινομημένη λίστα. | |||
\end{itemize} | |||
\par | |||
%\InsertFigure{!h}{0.8}{fig:lala}{lala.png}{\eng{Makes lala}} | |||
\InsertFigure{!ht}{0.8}{fig:bitonicSort}{img/BitonicSort.png}{4 ακολουθίες ανταλλαγών για ταξινόμηση 16 στοιχείων.} | |||
Η εικόνα \ref{fig:bitonicSort} παρουσιάζει αυτή τη λογική\footnote{Πηγή \href{\bitonicSortWikipedia}{wikipedia}}. | |||
\subsubsection{Πλήθος απαιτούμενων διεργασιών (threads) και καταμερισμός στον πίνακα} | |||
Στην παρούσα εργασία, επιθυμούμε οι ανταλλαγές να λάβουν χώρα εντός του υποσυστήματος γραφικών και να εκτελεστούν από τις διεργασίες (threads) του υποσυστήματος γραφικών. | |||
Σε αντίθεση όμως με την προηγούμενη εργασία, όπου για $M$ υποσύνολα του πίνακα είχαμε $M$ MPI διεργασίες και όλες απαιτούνταν να εκτελέσουν διαχωρισμό μεγίστων -- ελαχίστων, \textbf{εδώ η κάθε διεργασία μπορεί να διαχωρίσει 2 στοιχεία}. | |||
\textbf{Δηλαδή για ταξινόμηση ενός πίνακα $N$ στοιχείων απαιτούνται $\frac{N}{2}$ διεργασίες}. | |||
\par | |||
Βλέπουμε δηλαδή πως δεν είναι απαραίτητο να αναθέσουμε μία διεργασία σε κάθε στοιχείο του πίνακα. | |||
Με αυτό σαν βάση προβήκαμε στον πρώτο καταμερισμό των διεργασιών στα στοιχεία του πίνακα. | |||
Έτσι χωρίσαμε τον πίνακα σε δύο μέρη. | |||
Στο πρώτο μέρος η διευθυνσιοδότηση έγινε ακολουθώντας την αρίθμηση των threads, ενώ για το δεύτερο το διπλάσιο αυτής. | |||
\par | |||
Όπως γίνεται φανερό \textit{έπρεπε να βρεθεί ένας τρόπος ώστε οι μισές διεργασίες να διευθυνσιοδοτήσουν το πρώτο μέρος και οι άλλες μισές το δεύτερο}. | |||
Ο διαχωρισμός έγινε ελέγχοντας τον γείτονα (partner) για την κάθε ανταλλαγή. | |||
\InsertFigure{!ht}{0.85}{fig:threadDivision}{img/V0Addressing.png}{Διευθυνσιοδότηση των threads (V0).} | |||
Η λογική πίσω από αυτό τον έλεγχο είναι ότι αν ένα thread με διεύθυνση $Tid_1$ έχει να ανταλλάξει μέ έναν γείτονα με διεύθυνση $Pid=Tid_2$, τότε το thread που αρχικά πέφτει στη διεύθυνση $Tid_2$ έχει να ανταλλάξει με το $Tid_1$. | |||
Η ανταλλαγή όμως αυτή έχει δρομολογηθεί στο $Tid_1$ και έτσι το συγκεκριμένο thread μπορεί να μεταφερθεί στο δεύτερο μισό του πίνακα στην αντίστοιχη θέση $Tid_2'$ και να ανταλλάξει με τον γείτονα που προκύπτει σε εκείνη τη θέση $Pid'$. | |||
Ο γείτονας σε εκείνη τη θέση φυσικά είναι ο αντίστοιχος του $Tid_1$. | |||
Το διάγραμμα \ref{fig:threadDivision} παρουσιάζει αυτόν τον καταμερισμό. | |||
\par | |||
Έχοντας κατανέμει λοιπόν τα threads στον πίνακα η υλοποίηση εκτελεί το διπλό βρόχο που περιγράψαμε παραπάνω και αναθέτει το σώμα το οποίο εκτελεί τις ανταλλαγές στη κάρτα γραφικών. | |||
Το κάθε thread εκτελεί μια ανταλλαγή με την άνω διευθυνσιοδότηση και ο αλγόριθμος τερματίζει στο τέλος του διπλού βρόχου. | |||
Το πλεονέκτημα αυτής της μεθόδου είναι η απλότητά της. | |||
Κάτι που προφανώς πληρώνουμε με έναν αρκετά μεγάλο αριθμό κλήσεων προς την κάρτα γραφικών που προσθέτει overhead. | |||
\subsection{Δεύτερη έκδοση (V1)} | |||
Από την εκφώνηση της εργασίας ήδη υπάρχουν οδηγίες για τις πρώτες βελτιστοποιήσεις. | |||
Η πρώτη βελτιστοποίηση λοιπόν αφορά ακριβώς αυτές τις κλήσεις των συναρτήσεων που επιταχύνονται από την κάρτα γραφικών. | |||
Γίνεται δηλαδή η \textbf{θεώρηση} από την εκφώνηση, ότι\textbf{ η ελαχιστοποίηση αυτών των κλήσεων θα βελτιστοποιήσει τη διαδικασία}. | |||
Φυσικά αυτό πρέπει πάντα να αποδειχτεί στην πράξη. | |||
\end{document} |
@@ -0,0 +1,708 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
<svg | |||
width="297mm" | |||
height="210mm" | |||
viewBox="0 0 297 210" | |||
version="1.1" | |||
id="svg1" | |||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)" | |||
sodipodi:docname="V0Addresing.svg" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:svg="http://www.w3.org/2000/svg"> | |||
<sodipodi:namedview | |||
id="namedview1" | |||
pagecolor="#ffffff" | |||
bordercolor="#ffffff" | |||
borderopacity="1" | |||
inkscape:showpageshadow="0" | |||
inkscape:pageopacity="0" | |||
inkscape:pagecheckerboard="1" | |||
inkscape:deskcolor="#d1d1d1" | |||
inkscape:document-units="mm" | |||
showguides="true" | |||
inkscape:zoom="0.70710678" | |||
inkscape:cx="439.82042" | |||
inkscape:cy="613.76869" | |||
inkscape:window-width="1920" | |||
inkscape:window-height="1011" | |||
inkscape:window-x="0" | |||
inkscape:window-y="32" | |||
inkscape:window-maximized="1" | |||
inkscape:current-layer="layer1" /> | |||
<defs | |||
id="defs1"> | |||
<rect | |||
x="120.30141" | |||
y="341.30875" | |||
width="234.15368" | |||
height="40.183152" | |||
id="rect5" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="151.55498" | |||
height="31.749651" | |||
id="rect4" /> | |||
<marker | |||
style="overflow:visible" | |||
id="Triangle" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path135" /> | |||
</marker> | |||
<rect | |||
x="75.770079" | |||
y="296.06457" | |||
width="207.66614" | |||
height="78.576378" | |||
id="rect2" /> | |||
<rect | |||
x="75.770081" | |||
y="296.06458" | |||
width="207.66614" | |||
height="78.576378" | |||
id="rect2-2" /> | |||
<rect | |||
x="75.770081" | |||
y="296.06458" | |||
width="207.66614" | |||
height="78.576378" | |||
id="rect2-2-3" /> | |||
<rect | |||
x="75.770081" | |||
y="296.06458" | |||
width="207.66614" | |||
height="78.576378" | |||
id="rect2-2-1" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="151.55498" | |||
height="31.749651" | |||
id="rect4-3" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="151.55498" | |||
height="31.749651" | |||
id="rect4-3-8" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="151.55498" | |||
height="31.749651" | |||
id="rect4-3-8-9" /> | |||
<marker | |||
style="overflow:visible" | |||
id="marker4-6" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path4-1" /> | |||
</marker> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76601" | |||
height="42.273273" | |||
id="rect4-1" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-5" /> | |||
<marker | |||
style="overflow:visible" | |||
id="Dot-0" | |||
refX="0" | |||
refY="0" | |||
orient="auto" | |||
inkscape:stockid="Dot" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:none" | |||
d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" | |||
sodipodi:nodetypes="sssss" | |||
id="path17-9" /> | |||
</marker> | |||
<marker | |||
style="overflow:visible" | |||
id="marker4-4" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path4-8" /> | |||
</marker> | |||
<marker | |||
style="overflow:visible" | |||
id="Triangle-1" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path135-0" /> | |||
</marker> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="151.55498" | |||
height="31.749651" | |||
id="rect4-30" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-5-7" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-5-4" /> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-5-7-3" /> | |||
<marker | |||
style="overflow:visible" | |||
id="marker4-6-9" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path4-1-2" /> | |||
</marker> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-5-7-3-4" /> | |||
<marker | |||
style="overflow:visible" | |||
id="marker4-6-9-6" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path4-1-2-4" /> | |||
</marker> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-5-7-3-4-6" /> | |||
<marker | |||
style="overflow:visible" | |||
id="marker4-6-9-6-2" | |||
refX="0" | |||
refY="0" | |||
orient="auto-start-reverse" | |||
inkscape:stockid="Triangle arrow" | |||
markerWidth="1" | |||
markerHeight="1" | |||
viewBox="0 0 1 1" | |||
inkscape:isstock="true" | |||
inkscape:collect="always" | |||
preserveAspectRatio="xMidYMid"> | |||
<path | |||
transform="scale(0.5)" | |||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" | |||
d="M 5.77,0 -2.88,5 V -5 Z" | |||
id="path4-1-2-4-8" /> | |||
</marker> | |||
<rect | |||
x="171.64655" | |||
y="128.23883" | |||
width="423.76602" | |||
height="42.273273" | |||
id="rect4-1-3" /> | |||
</defs> | |||
<g | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1"> | |||
<rect | |||
style="fill:#93aca7;fill-opacity:1;stroke:#000000;stroke-width:0.687452;stroke-dasharray:none;stroke-opacity:1" | |||
id="rect1" | |||
width="119.56255" | |||
height="8.4508696" | |||
x="20.343727" | |||
y="60.406105" | |||
inkscape:export-filename="V0Addressing.png" | |||
inkscape:export-xdpi="96" | |||
inkscape:export-ydpi="96" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,-24.631251,38.437251)" | |||
id="text4-4" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-3);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan14"><tspan | |||
style="fill:#000000" | |||
id="tspan13">0</tspan></tspan></text> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,96.45285,38.454477)" | |||
id="text4-4-2" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-3-8);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan16"><tspan | |||
style="fill:#000000" | |||
id="tspan15">N/2</tspan></tspan></text> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,215.16783,38.453616)" | |||
id="text4-4-2-0" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-3-8-9);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan18"><tspan | |||
style="fill:#000000" | |||
id="tspan17">N</tspan></tspan></text> | |||
<path | |||
style="fill:none;stroke:#000000;stroke-width:0.629912;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4-6);marker-end:url(#Dot-0)" | |||
d="m 49.749862,65.166268 -7.310658,-0.09543 -6.876337,-0.08975" | |||
id="path3-9" | |||
sodipodi:nodetypes="ccc" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,-24.500611,70.953359)" | |||
id="text4-7" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan22"><tspan | |||
dx="0 0 0 1.0199995 -1.02 1.0200014 -1.02 0 0 0 0 0 0 0 0 0 0 1.0199914 -1.02 1.0199995 -1.02 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.0200067" | |||
style="fill:#000000" | |||
id="tspan19">Tid = threadIdx.x + blockIdx.x*blockDim.x | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan24"><tspan | |||
style="fill:#000000" | |||
id="tspan23"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan26"><tspan | |||
style="fill:#000000" | |||
id="tspan25"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan28"><tspan | |||
style="fill:#000000" | |||
id="tspan27"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan30"><tspan | |||
style="fill:#000000" | |||
id="tspan29"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan32"><tspan | |||
style="fill:#000000" | |||
id="tspan31"> | |||
</tspan></tspan></text> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,-3.8283014,4.3617187)" | |||
id="text5" | |||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:0;font-family:Candara;-inkscape-font-specification:'Candara, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect5);display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,4.062225,24.041723)" | |||
id="text4-7-3" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1-5);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan34"><tspan | |||
dx="0 0 0 1.0200005" | |||
style="fill:#000000" | |||
id="tspan33">Pid | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan36"><tspan | |||
style="fill:#000000" | |||
id="tspan35"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan38"><tspan | |||
style="fill:#000000" | |||
id="tspan37"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan40"><tspan | |||
style="fill:#000000" | |||
id="tspan39"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan42"><tspan | |||
style="fill:#000000" | |||
id="tspan41"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan44"><tspan | |||
style="fill:#000000" | |||
id="tspan43"> | |||
</tspan></tspan></text> | |||
<rect | |||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.687452;stroke-dasharray:none;stroke-opacity:1" | |||
id="rect1-8" | |||
width="119.31255" | |||
height="8.4508696" | |||
x="140.09372" | |||
y="60.406105" /> | |||
<path | |||
style="fill:none;stroke:#000000;stroke-width:0.62991;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Triangle);marker-end:url(#Dot-0)" | |||
d="m 157.38045,65.020432 7.60416,-10e-7 7.15241,-10e-7" | |||
id="path3-6-1" | |||
sodipodi:nodetypes="ccc" /> | |||
<g | |||
id="g6" | |||
transform="translate(-2.1113025,12.383057)"> | |||
<path | |||
style="fill:none;stroke:#000000;stroke-width:0.629911;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4-4);marker-end:url(#Triangle-1)" | |||
d="m 55.947278,39.489953 59.951872,-10e-7 56.39022,-1e-6" | |||
id="path3-4" | |||
sodipodi:nodetypes="ccc" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,55.513176,2.606821)" | |||
id="text4-44" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-30);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan46"><tspan | |||
dx="0 0 0 1.02 -1.0200005" | |||
style="font-style:normal;font-size:16px;font-family:Candara;-inkscape-font-specification:'Candara, Normal';fill:#000000" | |||
id="tspan45">N/2 Threads</tspan></tspan></text> | |||
</g> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,108.51079,24.041723)" | |||
id="text4-7-3-8" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1-5-4);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan48"><tspan | |||
dx="0 0 0 0 1.02" | |||
style="fill:#000000" | |||
id="tspan47">Pid' | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan50"><tspan | |||
style="fill:#000000" | |||
id="tspan49"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan52"><tspan | |||
style="fill:#000000" | |||
id="tspan51"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan54"><tspan | |||
style="fill:#000000" | |||
id="tspan53"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan56"><tspan | |||
style="fill:#000000" | |||
id="tspan55"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan58"><tspan | |||
style="fill:#000000" | |||
id="tspan57"> | |||
</tspan></tspan></text> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,-14.15732,56.454164)" | |||
id="text4-7-3-9-6" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1-5-7-3);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan62"><tspan | |||
style="fill:#000000" | |||
id="tspan59">Tid</tspan><tspan | |||
style="font-size:65%;baseline-shift:sub" | |||
id="tspan60">1</tspan><tspan | |||
dx="1.0200005" | |||
style="fill:#000000" | |||
id="tspan61"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan64"><tspan | |||
style="fill:#000000" | |||
id="tspan63"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan66"><tspan | |||
style="fill:#000000" | |||
id="tspan65"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan68"><tspan | |||
style="fill:#000000" | |||
id="tspan67"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan70"><tspan | |||
style="fill:#000000" | |||
id="tspan69"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan72"><tspan | |||
style="fill:#000000" | |||
id="tspan71"> | |||
</tspan></tspan></text> | |||
<path | |||
style="fill:none;stroke:#000000;stroke-width:0.629912;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4-6-9)" | |||
d="m 35.257872,73.316497 -0.01607,7.311263 -0.0151,6.876903" | |||
id="path3-9-4" | |||
sodipodi:nodetypes="ccc" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,3.1985383,56.454164)" | |||
id="text4-7-3-9-6-1" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1-5-7-3-4);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan76"><tspan | |||
style="fill:#000000" | |||
id="tspan73">Tid</tspan><tspan | |||
style="font-size:65%;baseline-shift:sub" | |||
id="tspan74">2</tspan><tspan | |||
dx="1.0200005" | |||
style="fill:#000000" | |||
id="tspan75"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan78"><tspan | |||
style="fill:#000000" | |||
id="tspan77"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan80"><tspan | |||
style="fill:#000000" | |||
id="tspan79"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan82"><tspan | |||
style="fill:#000000" | |||
id="tspan81"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan84"><tspan | |||
style="fill:#000000" | |||
id="tspan83"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan86"><tspan | |||
style="fill:#000000" | |||
id="tspan85"> | |||
</tspan></tspan></text> | |||
<path | |||
style="fill:none;stroke:#000000;stroke-width:0.629912;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4-6-9-6)" | |||
d="m 52.613731,73.316496 -0.01607,7.311263 -0.0151,6.876903" | |||
id="path3-9-4-2" | |||
sodipodi:nodetypes="ccc" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,122.73004,56.454164)" | |||
id="text4-7-3-9-6-1-7" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1-5-7-3-4-6);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan90"><tspan | |||
style="fill:#000000" | |||
id="tspan87">Tid'</tspan><tspan | |||
style="font-size:65%;baseline-shift:sub" | |||
id="tspan88">2</tspan><tspan | |||
dx="1.0200005" | |||
style="fill:#000000" | |||
id="tspan89"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan92"><tspan | |||
style="fill:#000000" | |||
id="tspan91"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan94"><tspan | |||
style="fill:#000000" | |||
id="tspan93"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan96"><tspan | |||
style="fill:#000000" | |||
id="tspan95"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan98"><tspan | |||
style="fill:#000000" | |||
id="tspan97"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="133.24558" | |||
id="tspan100"><tspan | |||
style="fill:#000000" | |||
id="tspan99"> | |||
</tspan></tspan></text> | |||
<path | |||
style="fill:none;stroke:#000000;stroke-width:0.629912;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4-6-9-6-2)" | |||
d="m 172.14523,73.316496 -0.0161,7.311263 -0.0151,6.876903" | |||
id="path3-9-4-2-9" | |||
sodipodi:nodetypes="ccc" /> | |||
<text | |||
xml:space="preserve" | |||
transform="matrix(0.26458333,0,0,0.26458333,-24.500611,76.822979)" | |||
id="text4-7-8" | |||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial Italic';text-align:start;letter-spacing:2px;word-spacing:-1.02px;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect4-1-3);display:inline;fill:none;stroke:#000000;stroke-width:0.865512;stroke-dasharray:none;stroke-opacity:1"><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan102"><tspan | |||
dx="0 0 0 0 1.02 -1.0199981 1.0199995 -1.02 0 0 1.0199986 -1.02 1.0199995 -1.02 0 0 1.0200062" | |||
style="fill:#000000" | |||
id="tspan101">Tid' = Tid + N/2 | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan104"><tspan | |||
style="fill:#000000" | |||
id="tspan103"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan106"><tspan | |||
style="fill:#000000" | |||
id="tspan105"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan108"><tspan | |||
style="fill:#000000" | |||
id="tspan107"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan110"><tspan | |||
style="fill:#000000" | |||
id="tspan109"> | |||
</tspan></tspan><tspan | |||
x="171.64648" | |||
y="131.94739" | |||
id="tspan112"><tspan | |||
style="fill:#000000" | |||
id="tspan111"> | |||
</tspan></tspan></text> | |||
</g> | |||
</svg> |