我正在向您发送一个关于多进程编程的玩具程序。程序运行良好与否我可以获得 50% 以上的性能。但是,如果我为程序输入 # pragma parallel 将不再起作用。怎样才能提高性能?我如何知道应该运行多少进程才能获得最佳性能。例如,在 4 核或 8 核上?:
#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <time.h>
#include <stdlib.h>
#define X 100000
char matrix[8000*X] ;
volatile long barrier = 0 ;
unsigned long long start[] ={ 0 , 1000*X+1 , 2000*X+1 , 3000*X+1 , 4000*X+1 , 5000*X+1, 7000*X+1 } ;
unsigned long long stop[] ={ 1000*X , 2000*X , 3000*X , 4000*X , 5000*X , 6000*X , 8000*X } ;
void init( void *arg1 )
{
long i ;
const long s0 = start[(ULONG_PTR)arg1];
const long s1 = stop[(ULONG_PTR)arg1];
// #pragma omp parallel for <------ *** with pragma does not work ! ***
for (i= s0 ; i< s1 ; i++ )
{
matrix[i] = 0 ;
}
++barrier ;
}
long main()
{
register long i , ZZZ;
clock_t tempo0 ;
clock_t tempo1 ;
// ********************************************************#1
printf( "Now in the main() function.\n" );
tempo0 = clock();
for (ZZZ=0;ZZZ<100;ZZZ++)
{
for ( i=0;i<8000*X;i++)
matrix[i] = 0 ;
}
tempo1 = clock();
printf ( "\nsequenziale <%lf>\n" , (double) tempo1-tempo0 );
// return 0 ;
// ******************************************************* #2
tempo0 = clock();
for (ZZZ=0;ZZZ<100;ZZZ++)
{
barrier = 0 ;
_beginthread( init, 0, (void*) 0 );
_beginthread( init, 0, (void*) 1 );
_beginthread( init, 0, (void*) 2 );
_beginthread( init, 0, (void*) 3 );
_beginthread( init, 0, (void*) 4 );
_beginthread( init, 0, (void*) 5 );
_beginthread( init, 0, (void*) 6 );
_beginthread( init, 0, (void*) 7 );
while ( barrier!=8)
;
}
tempo1 = clock ();
printf ( "\nthread <%lf>\n" , (double) tempo1-tempo0 );
}
预先感谢