OPENMP - Please HELP ME

General OpenMP discussion

OPENMP - Please HELP ME

Postby masteredi » Mon Jan 28, 2013 3:53 pm

Please help me... i need this following code parallelize. Nobody can't help me. You are my last hope. If you will run program, you must in shell write program_name -n search_word text_file


Code: Select all
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define rozmiar 35000


int opcje = 0;
int bez_pliku = 0;



Ustawia globalne opcje
void ustaw_opcje(char c)
{
        switch(c)
        {
                case 'n':
                opcje = 1;
                break;
                default:
                printf("\ngrep: Nieprawidlowe opcje -- %c\n",c);
                printf("Uzyj: nazwa_programu -n wzorzec  nazwa pliku. . .\n");
                exit(0);
                break;
        }
}


int wyszukaj_ciag(char *linia, char *wzorzec) {
int i,j;
int len_txt = strlen(linia);
int len_wz = strlen(wzorzec);
for(i=0; i<=len_txt-len_wz; i++) {
for(j=0; j<len_wz; j++) {
if(linia[i+j]!=wzorzec[j])
break;
}
if(j==len_wz)
return i;
}
return -1;
}



void wyszukaj_plik(char *nazwa_pliku, char *wzorzec,int temp_opcje)
        {
        FILE *fp;
        char linia[rozmiar];
        char *uzywana_linia;
        int i;
        int line_no = 0;


                if((fp = fopen(nazwa_pliku,"r"))=='\0')
                {
                printf("Nie można otworzyć %s\n",nazwa_pliku);
                exit(0);
                }
               
               
                while(fgets(linia,rozmiar,fp))
                {
                uzywana_linia =linia;
                line_no++;

                        switch(opcje)
                        {
                                case 1:
                                if((wyszukaj_ciag(uzywana_linia,wzorzec))!=-1)
                                        {
                                        if(bez_pliku == 1)
                                        printf("%d:%s",line_no,linia);
                                        else
                                        printf("%s:%d:%s",nazwa_pliku,line_no,linia);
                                        }
                        break;

                        }
                }
        }


int main(int argc,char*argv[])
        {
               
                float s;
                char *wyszukaj_ciag;
                char *nazwa_pliku;
                int index = 1;
                int i = 0;
                        printf("Uzyj: nazwa_programu -n wzorzec  nazwa pliku. . .\n");
                        if(argc<2)
                                {
                                        printf("Za malo argumentow\n");
                                        return 0;
                                }

                        if(argv[index][0]== '-')
                                {
                                        ustaw_opcje(argv[index][1]);
                                        ++index;
                                        bez_pliku = argc - 3;
                                       
                                }
       
        else
                bez_pliku = argc - 2;
                wyszukaj_ciag = argv[index];
               
                               
                       
                       
                                for(i=0;argv[++index]!= NULL;i++)
                                {
                                       
                                        nazwa_pliku = argv[index];
                                        wyszukaj_plik(nazwa_pliku,wyszukaj_ciag,opcje);
                                }
                       
                               
return 0;
}
masteredi
 
Posts: 2
Joined: Sun Jan 27, 2013 3:27 am

Re: OPENMP - Please HELP ME

Postby MarkB » Tue Jan 29, 2013 3:46 am

Hi there,

This looks very much like a homework assignment! If so, please at least make some effort to solve it before asking on here......

Mark.
MarkB
 
Posts: 487
Joined: Thu Jan 08, 2009 10:12 am
Location: EPCC, University of Edinburgh

Re: OPENMP - Please HELP ME

Postby masteredi » Wed Jan 30, 2013 1:21 pm

Well I tried to do something but I just had a problem with loop
Code: Select all
for (i = 0, i <= len_txt-len_wz, i + +) {
for (j = 0; j <len_wz j + +) {
if (line [i + j]! = pattern [j])
break;
}
if (j == len_wz)
return i;
}
return -1;
}


OPENMI not exepted return command and i dont know how i can parallelize this code. I can assure you that I did try parallelize code
masteredi
 
Posts: 2
Joined: Sun Jan 27, 2013 3:27 am

Re: OPENMP - Please HELP ME

Postby MarkB » Thu Jan 31, 2013 3:24 am

You need to introduce a temporary variable which holds the return value, and move the return statement to after the parallel loop.
You will end up with one such value per thread: you need to think carefully how to extract the right final value (-1 if there is no match, smallest non-negative value if there is)
from these.

Hope that helps,
Mark.
MarkB
 
Posts: 487
Joined: Thu Jan 08, 2009 10:12 am
Location: EPCC, University of Edinburgh


Return to Using OpenMP

Who is online

Users browsing this forum: Google [Bot], Yahoo [Bot] and 6 guests