2012-05-07 35 views
8

Tôi đang cố gắng chạy LIBSVM ở chế độ song song, tuy nhiên câu hỏi của tôi là trong OpenMP nói chung. Theo LIBSVM FAQ, tôi đã sửa đổi mã với #pragma cuộc gọi để sử dụng OpenMP. Tôi cũng đã sửa đổi Makefile (cho un * x) bằng cách thêm đối số -fopenmp để nó trở thành:Làm cách nào để biết OpenMP có hoạt động không?

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp 

Mã biên dịch tốt. Tôi kiểm tra (vì nó không phải là máy tính của tôi) dù OpenMP được cài đặt bởi:

/sbin/ldconfig -p | grep gomp 

và thấy rằng nó -probably- được cài đặt:

libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1 
libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1 

Bây giờ; khi tôi chạy chương trình, tôi không thấy bất kỳ cải tiến tốc độ nào. Ngoài ra khi tôi kiểm tra với "top", quá trình này đang sử dụng tối đa% 100 CPU (có 8 lõi), cũng không có nút cổ chai CPU (chỉ có thêm một người dùng có% 100 CPU sử dụng), tôi đã mong đợi để xem nhiều hơn % 100 (hoặc một chỉ số khác) rằng quá trình đang sử dụng nhiều lõi.

Có cách nào để kiểm tra xem nó có đang hoạt động nhiều lõi không?

+0

Chỉ là một ý nghĩ, nhưng không nên là tối đa. 100%/số lõi khi chỉ có một luồng đang chạy? – Tibor

+1

không, khi đa lõi được sử dụng (ít nhất là trong cài đặt máy chủ của tôi), chúng ta thấy các giá trị lớn hơn 100% –

+1

@Tibor, mặc định trên cùng với chế độ Irix cho thấy 100% cho tải đầy đủ của một CPU đơn và n * 100% cho tải đầy đủ của n CPU. Nếu bạn tắt chế độ Irix (nhấn 'I'), nó sẽ hiển thị 100% khi tất cả các CPU được sử dụng. –

Trả lời

7

Bạn có thể sử dụng hàm omp_get_num_threads(). Nó sẽ trả lại cho bạn số lượng các chủ đề được sử dụng bởi chương trình của bạn.

+6

Người ta phải gọi 'omp_get_num_threads()' bên trong một vùng song song. Nếu không, nó luôn luôn trả về 1! –

1

Với omp_get_max_threads() bạn nhận được số lượng chủ đề tối đa có sẵn cho chương trình của mình. Đây cũng là giá trị tối đa của tất cả các giá trị trả về có thể có của omp_get_num_threads(). Bạn có thể đặt rõ ràng số lượng chủ đề sẽ được chương trình của bạn sử dụng với biến môi trường OMP_NUM_THREADS, ví dụ: in bash qua

$export OMP_NUM_THREADS=8; your_program 
Các vấn đề liên quan