Mój procesor to Core i3 330M z 2 rdzeniami i 4 wątkami. Kiedy wykonuję polecenie cat /proc/cpuinfo
w moim terminalu, to tak, jakbym miał 4 CPUS. Gdy używam funkcji OpenMP get_omp_num_procs()
Mam również 4.OpenMP i rdzenie/wątki
Teraz mam standardową klasę wektorową C++, mam na myśli klasa o podwójnej tablicy o stałym rozmiarze, która nie używa szablonów wyrażeń. Starannie zrównoważyłem wszystkie metody mojej klasy i otrzymałem "oczekiwane" przyspieszenie.
Pytanie brzmi: czy mogę zgadnąć oczekiwane przyspieszenie w tak prostym przypadku? Na przykład, jeśli dodaję dwa wektory bez równoległych pętli for, otrzymam trochę czasu (używając polecenia czasu powłoki). Teraz, jeśli używam OpenMP, czy powinienem uzyskać czas podzielony przez 2 lub 4, w zależności od liczby rdzeni/wątków? Podkreślam, że proszę tylko o ten konkretny prosty problem, w którym nie ma współzależności w danych i wszystko jest liniowe (dodanie wektora).
Oto kod:
Vector Vector::operator+(const Vector& rhs) const
{
assert(m_size == rhs.m_size);
Vector result(m_size);
#pragma omp parallel for schedule(static)
for (unsigned int i = 0; i < m_size; i++)
result.m_data[i] = m_data[i]+rhs.m_data[i];
return result;
}
już przeczytać ten post: OpenMP thread mapping to physical cores.
Mam nadzieję, że ktoś powie mi więcej o tym, jak OpenMP wykonuje pracę w tym prostym przypadku. Powinienem powiedzieć, że jestem początkującym w obliczeniach równoległych.
Dzięki!