Tôi đang viết một chương trình song song sử dụng OpenMP trong C++.OpenMP set_num_threads() không hoạt động
Tôi muốn kiểm soát số lượng chủ đề trong chương trình bằng cách sử dụng omp_set_num_threads()
, nhưng nó không hoạt động.
#include <iostream>
#include <omp.h>
#include "mpi.h"
using namespace std;
int myrank;
int groupsize;
double sum;
double t1,t2;
int n = 10000000;
int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD,&groupsize);
omp_set_num_threads(4);
sum = 0;
#pragma omp for reduction(+:sum)
for (int i = 0; i < n; i++)
sum+= i/(n/10);
cout<<"sum="<<sum<<endl;
cout<<"threads="<<omp_get_num_threads()<<endl;
MPI_Finalize();
return 0;
}
Các đầu ra chương trình:
sum = 4.5e+007
threads=1
Làm thế nào để kiểm soát số lượng đề?
Nhưng tôi không thể tăng tốc bằng cách thay đổi số lượng chủ đề và cũng bằng cách đặt omp_set_dynamic (0) ?? – Nurlan
Đầu tiên, phiên bản _serial_ mất 50 ms trên CPU của tôi. Bạn không thể mong đợi tăng tốc cho các mã nhanh như vậy vì chi phí OpenMP. Đặt thêm 100x interations trong vòng lặp. Thứ hai, bạn đang thiếu vùng 'song song' trong mã ban đầu của mình. Bạn đã viết '#pragma omp for ...' trong khi nó phải là '#pragma omp song song cho ...'. Thứ ba, bạn đang trộn MPI và OpenMP. Bạn có chắc bạn biết chính xác mình đang làm gì không? –
@HristoIliev người dùng có thể kiểm soát động số lượng chủ đề không? tức là thay vì sử dụng mã cứng '4'. sử dụng một biến? – manatttta