Skip to content

Commit 79ee42e

Browse files
committed
Added relaxed memory ordering in false_sharing.cpp (no perf change noticed on Core i5 8350U)
1 parent 5070f31 commit 79ee42e

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

false_sharing.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,19 @@ struct Data2
3030

3131
static Data2 gData2;
3232

33+
template<std::memory_order memory_order>
3334
static void test1() noexcept
3435
{
3536
auto start = std::chrono::steady_clock::now();
3637
std::thread thread1([](Data1& data1) noexcept
3738
{
3839
for(std::size_t i = 0; i < ITERATION_COUNT; ++i)
39-
data1.value1.fetch_add(1);
40+
data1.value1.fetch_add(1, memory_order);
4041
}, std::ref(gData1));
4142
std::thread thread2([](Data1& data1) noexcept
4243
{
4344
for(std::size_t i = 0; i < ITERATION_COUNT; ++i)
44-
data1.value2.fetch_add(1);
45+
data1.value2.fetch_add(1, memory_order);
4546
}, std::ref(gData1));
4647
thread1.join();
4748
thread2.join();
@@ -50,18 +51,19 @@ static void test1() noexcept
5051
std::cout << "test1: " << elapsedTime << std::endl;
5152
}
5253

54+
template<std::memory_order memory_order>
5355
static void test2() noexcept
5456
{
5557
auto start = std::chrono::steady_clock::now();
5658
std::thread thread1([](Data2& data2) noexcept
5759
{
5860
for(std::size_t i = 0; i < ITERATION_COUNT; ++i)
59-
data2.value1.fetch_add(1);
61+
data2.value1.fetch_add(1, memory_order);
6062
}, std::ref(gData2));
6163
std::thread thread2([](Data2& data2) noexcept
6264
{
6365
for(std::size_t i = 0; i < ITERATION_COUNT; ++i)
64-
data2.value2.fetch_add(1);
66+
data2.value2.fetch_add(1, memory_order);
6567
}, std::ref(gData2));
6668
thread1.join();
6769
thread2.join();
@@ -82,11 +84,20 @@ int main()
8284
gData2.value1.store(0);
8385
gData2.value2.store(0);
8486

87+
std::cout << "memory order: sequentially consistent" << std::endl;
8588
for(std::size_t i = 0; i < TEST_RUN_COUNT; ++i)
8689
{
8790
std::cout << "Run: " << i << std::endl;
88-
test1();
89-
test2();
91+
test1<std::memory_order_seq_cst>();
92+
test2<std::memory_order_seq_cst>();
93+
}
94+
95+
std::cout << "memory order: relaxed" << std::endl;
96+
for(std::size_t i = 0; i < TEST_RUN_COUNT; ++i)
97+
{
98+
std::cout << "Run: " << i << std::endl;
99+
test1<std::memory_order_relaxed>();
100+
test2<std::memory_order_relaxed>();
90101
}
91102
return 0;
92103
}

0 commit comments

Comments
 (0)