Writing to std::unordered_map in parallel leads to std::out_of_range exception

I am trying to fill a std::unordered_map in parallel (OpenMP). A very simplified version of my current approach would be as follows:

std::unordered_map<unsigned, std::vector<double>> data;
unsigned dim, nTasks, largeNum;

#pragma omp parallel
{
  #pragma omp single
  {
    for (unsigned task=0; task < nTasks; task++)
    {
      #pragma omp task shared(data) firstprivate(task)
      {
        for (unsigned it=0; it < largeNum; it++)
        {
          unsigned idx1 = foo(task, it);
          unsigned idx2 = bar(task, it);
          double value = fooBar(task, it);

          if ( !data.count(idx1) )
          {
            #pragma omp critical
            {
              if (!data.count(idx1)) // Guard
                data.emplace(idx1, std::vector<double>(dim, 0.0));
            }
          }

          // The following throws out_of_range
          #pragma omp atomic
          data.at(idx1)[idx2] += value;
        }
      }
    }
  }
}

When executed in parallel, the code throws std::out_of_range after some (seemingly) random number of steps. The code claims that data[idx1] does not exist, but it is explicitly constructed in the critical section preceding the throwing line. What is wrong about this code and why does it throws the exception? Thank you very much for your help!

Some notes:

  • I’ve tried the same code with map instead of unordered_map and in this case the code did not throw the exception.
  • I perform the check if ( !data.count(idx1) ) twice, the first time to avoid entering a critical section every time and the second time to make sure that no other thread created the element data[idx1] while the current thread entered the critical section.
  • I am aware of the typical approach of creating a private copy of data for each thread, filling it locally, and then add the results to the global data inside a critical section. This approach is, however, not feasible in my case, since data is too large (tens or hundreds of GB) and there is no easy way to partition it such that a given thread only needs to write to a portion of it.

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật