CPU của tôi là Core i3 330M với 2 lõi và 4 luồng. Khi tôi thực hiện lệnh cat /proc/cpuinfo
trong terminal của tôi, nó giống như tôi có 4 CPUS. Khi tôi sử dụng chức năng OpenMP get_omp_num_procs()
Tôi cũng nhận được 4.OpenMP và lõi/chủ đề
Bây giờ tôi có một lớp vectơ C++ chuẩn, tôi có nghĩa là một lớp mảng kép có kích thước cố định không sử dụng các mẫu biểu thức. Tôi đã cẩn thận song song tất cả các phương pháp của lớp và tôi nhận được tốc độ "mong đợi".
Câu hỏi đặt ra là: tôi có thể đoán tốc độ tăng tốc dự kiến trong trường hợp đơn giản như vậy không? Ví dụ, nếu tôi thêm hai vectơ không song song cho các vòng lặp tôi nhận được một thời gian (sử dụng lệnh thời gian shell). Bây giờ nếu tôi sử dụng OpenMP, tôi có nên chia thời gian chia cho 2 hoặc 4, theo số lõi/chủ đề không? Tôi nhấn mạnh rằng tôi chỉ yêu cầu vấn đề đơn giản đặc biệt này, nơi không có sự phụ thuộc lẫn nhau trong dữ liệu và mọi thứ đều là tuyến tính (bổ sung vectơ).
Dưới đây là một số mã:
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;
}
Tôi đã đọc bài này: OpenMP thread mapping to physical cores.
Tôi hy vọng rằng ai đó sẽ cho tôi biết thêm về cách OpenMP hoàn thành công việc trong trường hợp đơn giản này. Tôi nên nói rằng tôi là một người mới bắt đầu trong tính toán song song.
Cảm ơn!