moved shared data into global variables, removed SMArg struct
git-svn-id: svn://anubis/gvsu@167 45c1a28c-8058-47b2-ae61-ca45b979098e
This commit is contained in:
parent
86e44617bf
commit
c452c1eecb
@ -15,19 +15,15 @@ using namespace std;
|
|||||||
|
|
||||||
#define eq(x, y) ( ( (x) == (y) ) || ( (x) == '?' ) || ( (y) == '?' ) )
|
#define eq(x, y) ( ( (x) == (y) ) || ( (x) == '?' ) || ( (y) == '?' ) )
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
vector<char> * s;
|
|
||||||
vector<char> * t;
|
|
||||||
int id;
|
|
||||||
void * matrix;
|
|
||||||
} SMArg;
|
|
||||||
|
|
||||||
void usage(char * prog);
|
void usage(char * prog);
|
||||||
void * calcSimMatrixThread(void * arg);
|
void * calcSimMatrixThread(void * arg);
|
||||||
bool readFile(char * fileName, vector<char> & v);
|
bool readFile(char * fileName, vector<char> & v);
|
||||||
|
|
||||||
pthread_barrier_t barrier;
|
pthread_barrier_t barrier;
|
||||||
|
int num_threads;
|
||||||
|
int * matrix;
|
||||||
|
vector<char> * s;
|
||||||
|
vector<char> * t;
|
||||||
|
|
||||||
/* Print basic usage information */
|
/* Print basic usage information */
|
||||||
void usage(char * prog)
|
void usage(char * prog)
|
||||||
@ -39,7 +35,7 @@ void usage(char * prog)
|
|||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
vector<char> files[2];
|
vector<char> files[2];
|
||||||
int num_threads = 1;
|
num_threads = 1;
|
||||||
int file_to_read = 0;
|
int file_to_read = 0;
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++)
|
for (int i = 1; i < argc; i++)
|
||||||
@ -64,19 +60,15 @@ int main(int argc, char * argv[])
|
|||||||
if (file_to_read != 2)
|
if (file_to_read != 2)
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
|
|
||||||
|
s = &files[0];
|
||||||
|
t = &files[1];
|
||||||
pthread_t * threads = new pthread_t[num_threads];
|
pthread_t * threads = new pthread_t[num_threads];
|
||||||
int * similarityMatrix = new int[files[0].size() * files[1].size()];
|
matrix = new int[files[0].size() * files[1].size()];
|
||||||
pthread_barrier_init(&barrier, NULL, num_threads);
|
pthread_barrier_init(&barrier, NULL, num_threads);
|
||||||
|
|
||||||
for (int i = 0; i < num_threads; i++)
|
for (int i = 0; i < num_threads; i++)
|
||||||
{
|
{
|
||||||
SMArg * arg = new SMArg;
|
int ret = pthread_create(&threads[i], NULL, &calcSimMatrixThread, (void *) i);
|
||||||
arg->s = &files[0];
|
|
||||||
arg->t = &files[1];
|
|
||||||
arg->id = i;
|
|
||||||
arg->matrix = similarityMatrix;
|
|
||||||
|
|
||||||
int ret = pthread_create(&threads[i], NULL, &calcSimMatrixThread, arg);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
cerr << "Error " << ret << " when creating thread!" << endl;
|
cerr << "Error " << ret << " when creating thread!" << endl;
|
||||||
@ -91,6 +83,7 @@ int main(int argc, char * argv[])
|
|||||||
|
|
||||||
pthread_barrier_destroy(&barrier);
|
pthread_barrier_destroy(&barrier);
|
||||||
|
|
||||||
|
delete[] matrix;
|
||||||
delete[] threads;
|
delete[] threads;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -113,10 +106,10 @@ bool readFile(char * fileName, vector<char> & v)
|
|||||||
/* Compute portions of the similarity matrix between two character arrays */
|
/* Compute portions of the similarity matrix between two character arrays */
|
||||||
void * calcSimMatrixThread(void * arg)
|
void * calcSimMatrixThread(void * arg)
|
||||||
{
|
{
|
||||||
SMArg * smarg = (SMArg *) arg;
|
int id = (int) arg;
|
||||||
int s_size = smarg->s->size();
|
int s_size = s->size();
|
||||||
int t_size = smarg->t->size();
|
int t_size = t->size();
|
||||||
int (*F)[s_size][t_size] = (int (*) [s_size][t_size]) smarg->matrix;
|
int (*F)[s_size][t_size] = (int (*) [s_size][t_size]) matrix;
|
||||||
int max_x = 0, max_y = 0, max_val = 0;
|
int max_x = 0, max_y = 0, max_val = 0;
|
||||||
for (int i = 0; i < t_size; i++) /* set first row to 0's */
|
for (int i = 0; i < t_size; i++) /* set first row to 0's */
|
||||||
(*F)[0][i] = 0;
|
(*F)[0][i] = 0;
|
||||||
@ -132,7 +125,7 @@ void * calcSimMatrixThread(void * arg)
|
|||||||
max(
|
max(
|
||||||
(*F)[i][j-1] - 2,
|
(*F)[i][j-1] - 2,
|
||||||
(*F)[i-1][j-1] +
|
(*F)[i-1][j-1] +
|
||||||
(eq(smarg->s->at(i), smarg->t->at(j)) ? 1 : -1)
|
(eq(s->at(i), t->at(j)) ? 1 : -1)
|
||||||
),
|
),
|
||||||
max(
|
max(
|
||||||
(*F)[i-1][j] - 2,
|
(*F)[i-1][j] - 2,
|
||||||
@ -162,6 +155,5 @@ void * calcSimMatrixThread(void * arg)
|
|||||||
cout << "Maximum value is " << max_val << " at position ("
|
cout << "Maximum value is " << max_val << " at position ("
|
||||||
<< max_x << ", " << max_y << ")" << endl;
|
<< max_x << ", " << max_y << ")" << endl;
|
||||||
|
|
||||||
delete smarg;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user