mirror of
https://github.com/openvswitch/ovs
synced 2025-10-23 14:57:06 +00:00
lib/bitmap: Faster bitmap functions.
Replace bitwise loops with a single operation, inline all bitmap functions. Inlining allows the compiler to remove unnecessary code due to some parameters being compile-time constants. Before: $ tests/ovstest test-bitmap benchmark 1000000 bitmap equal: 341 ms bitmap scan: 8089 ms After: $ tests/ovstest test-bitmap benchmark 1000000 bitmap equal: 152 ms bitmap scan: 146 ms Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com> Co-authored-by: Kmindg <kmindg@gmail.com> Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -82,12 +82,12 @@ test_bitmap_scan(void)
|
||||
bitmap_set1(a, MAX_BITS - 1);
|
||||
assert(bitmap_scan(a, true, 0, MAX_BITS) == MAX_BITS - 1);
|
||||
bitmap_set1(a, MAX_BITS - BITMAP_ULONG_BITS + 1);
|
||||
assert(bitmap_scan(a, true, 0, MAX_BITS - 1)
|
||||
assert(bitmap_scan(a, true, 3, MAX_BITS)
|
||||
== MAX_BITS - BITMAP_ULONG_BITS + 1);
|
||||
bitmap_set1(a, BITMAP_ULONG_BITS - 1);
|
||||
assert(bitmap_scan(a, true, 0, MAX_BITS - 1) == BITMAP_ULONG_BITS - 1);
|
||||
assert(bitmap_scan(a, true, 7, MAX_BITS - 1) == BITMAP_ULONG_BITS - 1);
|
||||
bitmap_set1(a, 0);
|
||||
assert(bitmap_scan(a, true, 0, MAX_BITS - 1) == 0);
|
||||
assert(bitmap_scan(a, true, 0, MAX_BITS - 7) == 0);
|
||||
|
||||
bitmap_set_multiple(a, 0, MAX_BITS, true);
|
||||
|
||||
@@ -104,12 +104,12 @@ test_bitmap_scan(void)
|
||||
bitmap_set0(a, MAX_BITS - 1);
|
||||
assert(bitmap_scan(a, false, 0, MAX_BITS) == MAX_BITS - 1);
|
||||
bitmap_set0(a, MAX_BITS - BITMAP_ULONG_BITS + 1);
|
||||
assert(bitmap_scan(a, false, 0, MAX_BITS - 1)
|
||||
assert(bitmap_scan(a, false, 3, MAX_BITS)
|
||||
== MAX_BITS - BITMAP_ULONG_BITS + 1);
|
||||
bitmap_set0(a, BITMAP_ULONG_BITS - 1);
|
||||
assert(bitmap_scan(a, false, 0, MAX_BITS - 1) == BITMAP_ULONG_BITS - 1);
|
||||
assert(bitmap_scan(a, false, 7, MAX_BITS - 1) == BITMAP_ULONG_BITS - 1);
|
||||
bitmap_set0(a, 0);
|
||||
assert(bitmap_scan(a, false, 0, MAX_BITS - 1) == 0);
|
||||
assert(bitmap_scan(a, false, 0, MAX_BITS - 7) == 0);
|
||||
|
||||
free(a);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user