Commit 2799f3eb authored by Björn Fischer's avatar Björn Fischer

parameter for threads

parent f7db8b76
......@@ -3,9 +3,10 @@
#include <stdlib.h>
#include <math.h>
void Process_Args(int argc, char **argv, int *m, int *n, double *eps, double *delta_t) {
if ((argc < 3) || (argc > 5)) {
fprintf(stderr, "Usage: heat <m> <n> [<epsilon> [delta_t]]!\n\n");
void Process_Args(int argc, char **argv, int *num_threads, int *m, int *n, double *eps, double *delta_t) {
if ((argc < 4) || (argc > 6)) {
fprintf(stderr, "Usage: main <num_threads> <m> <n> [<epsilon> [delta_t]]!\n\n");
fprintf(stderr, " <num_threads> -- Number of threads\n");
fprintf(stderr, " <m> -- X-Size of matrix\n");
fprintf(stderr, " <n> -- Y-Size of matrix\n");
fprintf(stderr, " <epsilon> -- accuracy parameter\n");
......@@ -13,15 +14,17 @@ void Process_Args(int argc, char **argv, int *m, int *n, double *eps, double *de
exit(1);
}
*num_threads = atoi(argv[1]);
/*
** Erstes und zweites Argument: Größe der Matrix
*/
*m = atoi(argv[1]);
*m = atoi(argv[2]);
if ((*m < 3) || (*m > 6000)) {
fprintf(stderr, "Error: size m out of range [3 .. 6000] !\n");
exit(1);
}
*n = atoi(argv[2]);
*n = atoi(argv[3]);
if ((*n < 3) || (*n > 6000)) {
fprintf(stderr, "Error: size n out of range [3 .. 6000] !\n");
exit(1);
......@@ -29,8 +32,8 @@ void Process_Args(int argc, char **argv, int *m, int *n, double *eps, double *de
/*
** Drittes (optionales) Argument: "Genauigkeitsfaktor" eps
*/
if (argc >= 4) {
*eps = atof(argv[3]);
if (argc >= 5) {
*eps = atof(argv[4]);
}
if ((*eps <= 0) || (*eps > 0.01)){
fprintf(stderr, "Error: epsilon must be between 0.0000000001 and 0.01 )\n");
......@@ -39,8 +42,8 @@ void Process_Args(int argc, char **argv, int *m, int *n, double *eps, double *de
/*
** Viertes (optionales) Argument: delta_t
*/
if (argc >= 5) {
*delta_t = atof(argv[4]);
if (argc >= 6) {
*delta_t = atof(argv[5]);
}
if ((*delta_t <= 0) || (*delta_t > 1.0)){
fprintf(stderr, "Error: delta_t (%f) must be between 0.0000000001 and 1.0\n", *delta_t);
......
......@@ -7,6 +7,7 @@
#include <mpi.h>
#include <sys/time.h>
#include "project.h"
#include "omp.h"
int main(int argc, char **argv)
{
......@@ -14,6 +15,7 @@ int main(int argc, char **argv)
double delta_t = 0.000001;
double alpha = 1;
int dim0_size, dim1_size;
int num_threads;
double **root_field; // complete field owned by root
double **partial_field; // partial field where process works on
double **partial_field_clipboard; // copy of partial field
......@@ -33,7 +35,10 @@ int main(int argc, char **argv)
MPI_Init(&argc, &argv);
Process_Args(argc, argv, &dim0_size, &dim1_size, &eps, &delta_t);
Process_Args(argc, argv, &num_threads, &dim0_size, &dim1_size, &eps, &delta_t);
printf("%d threads per process\n", num_threads);
omp_set_num_threads(num_threads);
int rank, cart_cluster_size;
if(MPI_Comm_rank(MPI_COMM_WORLD, &rank)) {
......
......@@ -19,7 +19,7 @@ void Insert_Matrix(double **a, int a_dim0, int a_dim1, int pos_dim0, int pos_dim
void Insert_Array_In_Matrix(double **a, int a_dim0, int a_dim1, int pos_dim0, int pos_dim1, double *b, int b_dim0, int b_dim1, int offset_top, int offset_right, int offset_bottom, int offset_left);
// args.c
void Process_Args(int argc, char **argv, int *m, int *n, double *eps, double *delta_t);
void Process_Args(int argc, char **argv, int *num_threads, int *m, int *n, double *eps, double *delta_t);
// mpi_util.c
void Create_MPI_Type_t_process_info(MPI_Datatype *datatype);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment