В critpath приложения с потоком я столкнулся с узким местом производительности. Профилирование указывает на неожиданное утверждение на линии кэша, несмотря на то, что кажется независимым доступом к данным в разных потоках. Учитывая следующий код: < /p>
В [b] critpath [/b] приложения с потоком я столкнулся с узким местом производительности. Профилирование указывает на неожиданное утверждение на линии кэша, несмотря на то, что кажется независимым доступом к данным в разных потоках. Учитывая следующий код: < /p> [code]#include #include #include #include #include
struct Base { virtual ~Base() = default; };
struct DerivedA : public Base { alignas(64) std::atomic counter_a{0}; };
struct DerivedB : public Base { alignas(64) std::atomic counter_b{0}; };
void increment_a(DerivedA* da, int iterations) { for (int i = 0; i < iterations; ++i) { da->counter_a.fetch_add(1, std::memory_order_relaxed); } }
void increment_b(DerivedB* db, int iterations) { for (int i = 0; i < iterations; ++i) { db->counter_b.fetch_add(1, std::memory_order_relaxed); } }
int main() { std::vector objects; objects.emplace_back(std::make_unique()); objects.emplace_back(std::make_unique());