내가 삽입하려고하는 for
루프의 OpenMP를 사용하려고위한 OpenMP의 내부 해시 맵/해시 맵 (std::unordered_map
)업데이트 루프
해시 맵을 업데이트하고 키는 실제로 클래스의 구성원 그래서 나는 그들의 주소를 나타내는 포인터를 할당했다. 키는 또한 전역 함수에 의해 반환 된 해시 값이다.
다음은이 작업을 수행하는 가장 쉬운 방법 인 것처럼 보이지만 해시 맵이 올바르게 업데이트되지 않습니다. 무언가가 잘못되었지만 해결 방법을 모르겠습니다. 미리 감사드립니다.
void MyClass::ProcessBuffer(void)
{
omp_set_num_threads(4);
std::unordered_map<unsigned long long,unsigned int>* hashptr=&m_sequencehash;
std::vector<std::string>* bufferptr=&m_buffer;
unsigned int sizevec=m_kmer_size;
size_t i;
#pragma omp parallel for
for (i=0; i<READSTR_BUF_SIZE;++i)
{
++(*hashptr)[_hash((*bufferptr)[i],sizevec)];
}
}
'std :: unordered_map'은 스레드로부터 안전하지 않으므로 코드에 경쟁 조건이있어 정의되지 않은 동작이 발생합니다. –
아마 [해시 맵에 데이터를 병렬로 추가하기] (http://stackoverflow.com/questions/10064372/adding-data-to-a-hashmap-in-parallel) – Arash
병렬 처리에서 얻을 수있는 성능 향상에 대해 궁금한 점이 있습니다. 궁극적으로는 스레드 안전을 위해 잠금을 필요로하는 작업입니까? –