我从互联网上找到了一个Pthread程序,我想在visual studio 2010中运行它,但我不知道如何在visual studio中使用pthread。以下是我找到的程序:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 4096
#define NO_PROCESS 8
typedef double matrix[MAX_SIZE][MAX_SIZE];
int N; /* matrix size */
int maxnum; /* max number of element*/
char *Init; /* matrix init type */
int PRINT; /* print switch */
matrix A; /* matrix A */
double b[MAX_SIZE]; /* vector b */
double y[MAX_SIZE]; /* vector y */
pthread_barrier_t barrier;
/* forward declarations */
void work(void*);
void Init_Matrix(void);
void Print_Matrix(void);
void Init_Default(void);
int Read_Options(int, char **);
int main(int argc, char **argv)
{
pthread_t threads[NO_PROCESS];
int timestart, timeend, iter;
long i;
Init_Default(); /* Init default values */
Read_Options(argc, argv); /* Read arguments */
Init_Matrix(); /* Init the matrix */
pthread_barrier_init(&barrier, NULL, NO_PROCESS);
for (i = 0; i < NO_PROCESS; i++)
pthread_create (&threads[i], NULL, (void *) &work, (void *) i);
for (i = 0; i < NO_PROCESS; i++)
pthread_join(threads[i], NULL);
pthread_barrier_destroy(&barrier);
if (PRINT == 1)
Print_Matrix();
}
void work(void *pId)
{
int i, j, k;
long thread_id = (long)pId;
/* Gaussian elimination algorithm */
for (k = 0; k < N; k++)
{ /* Outer loop */
if (thread_id == (k % NO_PROCESS))
{
for (j = k + 1;(j < N); j++)
A[k][j] = A[k][j] / A[k][k]; /* Division step */
y[k] = b[k] / A[k][k];
A[k][k] = 1.0;
}
pthread_barrier_wait(&barrier); /* wait for other threads finishing this round */
for (i = k + 1;(i < N); i++)
{
if (thread_id == (i % NO_PROCESS))
{
for (j = k + 1;(j < N); j++)
A[i][j] = A[i][j] - A[i][k] * A[k][j]; /* Elimination step */
b[i] = b[i] - A[i][k] * y[k];
A[i][k] = 0.0;
}
}
pthread_barrier_wait(&barrier); /* wait for other threads finishing this round */
}
}
void Init_Matrix()
{
int i, j;
printf("\nsize = %dx%d ", N, N);
printf("\nmaxnum = %d \n", maxnum);
printf("Init = %s \n", Init);
printf("Initializing matrix...");
if (strcmp(Init, "rand") == 0)
{
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (i == j) /* diagonal dominance */
A[i][j] = (double)(rand() % maxnum) + 5.0;
else
A[i][j] = (double)(rand() % maxnum) + 1.0;
}
}
}
if (strcmp(Init, "fast") == 0)
{
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (i == j) /* diagonal dominance */
A[i][j] = 5.0;
else
A[i][j] = 2.0;
}
}
}
/* Initialize vectors b and y */
for (i = 0; i < N; i++)
{
b[i] = 2.0;
y[i] = 1.0;
}
printf("done \n\n");
if (PRINT == 1)
Print_Matrix();
}
void Print_Matrix()
{
int i, j;
printf("Matrix A:\n");
for (i = 0; i < N; i++)
{
printf("[");
for (j = 0; j < N; j++)
printf(" %5.2f,", A[i][j]);
printf("]\n");
}
printf("Vector b:\n[");
for (j = 0; j < N; j++)
printf(" %5.2f,", b[j]);
printf("]\n");
printf("Vector y:\n[");
for (j = 0; j < N; j++)
printf(" %5.2f,", y[j]);
printf("]\n");
printf("\n\n");
}
void Init_Default()
{
N = 2048;
Init = "rand";
maxnum = 15.0;
PRINT = 0;
}
int Read_Options(int argc, char **argv)
{
char *prog;
prog = *argv;
while (++argv, --argc > 0)
if (**argv == '-')
switch ( *++*argv )
{
case 'n':
--argc;
N = atoi(*++argv);
break;
case 'h':
printf("\nHELP: try sor -u \n\n");
exit(0);
break;
case 'u':
printf("\nUsage: sor [-n problemsize]\n");
printf(" [-D] show default values \n");
printf(" [-h] help \n");
printf(" [-I init_type] fast/rand \n");
printf(" [-m maxnum] max random no \n");
printf(" [-P print_switch] 0/1 \n");
exit(0);
break;
case 'D':
printf("\nDefault: n = %d ", N);
printf("\n Init = rand" );
printf("\n maxnum = 5 ");
printf("\n P = 0 \n\n");
exit(0);
break;
case 'I':
--argc;
Init = *++argv;
break;
case 'm':
--argc;
maxnum = atoi(*++argv);
break;
case 'P':
--argc;
PRINT = atoi(*++argv);
break;
default:
printf("%s: ignored option: -%s\n", prog, *argv);
printf("HELP: try %s -u \n\n", prog);
break;
}
}
有人可以告诉我如何在visual studio中运行它。我知道应该包括一些标题,但我不知道该怎么做。
请从头到尾逐步告诉我。我是编程的初学者请一步一步告诉我......
答案 0 :(得分:3)
http://sourceware.org/pthreads-win32/
以上链接用于Win32上的pthreads部分实现。它有点旧,但它应该可以完成这项工作。
答案 1 :(得分:3)
现在您已经编译了程序,您需要在以下两个位置之一找到特定的dll(pthreadVC2.dll):
实际上,上面示例中的“C:\ Windows”应该是您安装Windows的实际路径,有时这个拼写为%windir%\ system32或%windir%\ SysWOW64
答案 2 :(得分:0)
可以找到简短易懂的说明here (对于所有文件:* .h,* .lib,* .dll)。