Changeset 82
- Timestamp:
- Jan 9, 2010, 6:44:42 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
proiecte/Parallel-DT/R8/Src/build.c
r65 r82 13 13 #include <omp.h> 14 14 15 #define MAX_DISCR_VAL 50 16 #define MAX_CLASS 50 17 #define MAX_ATT 50 15 18 16 19 ItemCount *Weight, /* Weight[i] = current fraction of item i */ … … 156 159 157 160 // ########### begin parallel region ############## // 158 #pragma omp parallel default(shared)159 {161 //#pragma omp parallel default(shared) 162 //{ 160 163 161 164 //printf("The parallel region is executed by thread %d\n", omp_get_thread_num()); 162 165 /* THIS CAN BE PARALELIZED */ 163 #pragma omp for private(c)166 //#pragma omp for private(c) 164 167 ForEach(c, 0, MaxClass) { 165 168 ClassFreq[c] = 0; … … 167 170 168 171 /* THIS CAN BE PARALELIZED */ 169 #pragma omp for private(i)172 //#pragma omp for private(i) 170 173 ForEach(i, Fp, Lp) { 171 #pragma omp atomic174 //#pragma omp atomic 172 175 ClassFreq[Class(Item[i])] += Weight[i]; 173 176 } 174 }177 //} 175 178 176 179 /* Find the most frequent class */ … … 357 360 DiscrValue v; 358 361 Boolean PrevAllKnown; 359 ItemCount Freq_discr[MAX_DISCR_VAL + 1][MAX_CLASS + 1], ValFreq_discr[MAX_DISCR_VAL + 1];360 float UnknownRate_discr[MAX_ATT + 1];362 ItemCount** Freq_discr, *ValFreq_discr; 363 float* UnknownRate_discr; 361 364 362 365 Cases = CountItems(Fp, Lp); … … 365 368 366 369 // ########### begin parallel region ############## // 367 #pragma omp parallel default(shared) 368 { 369 370 //#pragma omp parallel 371 //{ 370 372 //printf("The parallel region is executed by thread %d\n", omp_get_thread_num()); 371 373 /* THIS CAN BE PARALELIZED */ 372 #pragma omp for private(c)374 //#pragma omp for private(c) 373 375 ForEach(c, 0, MaxClass) { 374 376 ClassFreq[c] = 0; … … 376 378 377 379 /* THIS CAN BE PARALELIZED */ 378 #pragma omp for private(i)380 //#pragma omp for private(i) 379 381 ForEach(i, Fp, Lp) { 380 #pragma omp atomic382 //#pragma omp atomic 381 383 ClassFreq[Class(Item[i])] += Weight[i]; 382 384 } 383 }385 //} 384 386 385 387 /* Find the most frequent class */ … … 410 412 /* For each available attribute, find the information and gain */ 411 413 /* THIS MUST BE PARALELIZED */ 412 #pragma omp parallel default(shared) private(Freq_discr, ValFreq_discr, UnknownRate_discr)414 #pragma omp parallel default(shared) shared(Possible, AvGain) private(v, Freq_discr, ValFreq_discr, UnknownRate_discr) 413 415 { 414 415 #pragma omp for 416 Freq_discr = (ItemCount **) calloc(MaxDiscrVal + 1, sizeof(ItemCount *)); 417 ForEach(v, 0, MaxDiscrVal) { 418 Freq_discr[v] = (ItemCount *) calloc(MaxClass + 1, sizeof(ItemCount)); 419 } 420 421 ValFreq_discr = (ItemCount *) calloc(MaxDiscrVal + 1, sizeof(ItemCount)); 422 UnknownRate_discr = (float *) calloc(MaxAtt + 1, sizeof(float)); 423 424 425 #pragma omp for private(Att) schedule(static) 416 426 ForEach(Att, 0, MaxAtt) { 417 427 Gain[Att] = -Epsilon; … … 426 436 EvalSubset(Att, Fp, Lp, Cases); 427 437 } else if (!Tested[Att]) { 428 EvalDiscreteAtt_Discr(Att, Fp, Lp, Cases, (ItemCount**)Freq_discr, (ItemCount*)ValFreq_discr, (float*)UnknownRate_discr); 438 439 EvalDiscreteAtt_Discr(Att, Fp, Lp, Cases, Freq_discr, ValFreq_discr, UnknownRate_discr); 429 440 } 430 441 } else { … … 437 448 #pragma omp critical 438 449 { 439 if (Gain[Att] > -Epsilon && (MultiVal || MaxAttVal[Att] < 0.3 440 * (MaxItem + 1))) {450 if (Gain[Att] > -Epsilon && (MultiVal || MaxAttVal[Att] < 0.3 * (MaxItem + 1))){ 451 //#pragma omp atomic 441 452 Possible++; 453 454 //#pragma omp atomic 442 455 AvGain += Gain[Att]; 443 456 } 444 457 } 445 458 } 459 460 free(UnknownRate_discr); 461 free(ValFreq_discr); 462 ForEach(v, 0, MaxDiscrVal) { 463 free(Freq_discr[v]); 464 } 465 free(Freq_discr); 446 466 447 467 } … … 659 679 //Lwt = Weight + Lp; 660 680 661 #pragma omp parallel for reduction(+:Sum)681 //#pragma omp parallel for reduction(+:Sum) 662 682 for (i = Fp; i <= Lp; i++) { 663 683 Sum += Weight[i];
Note: See TracChangeset
for help on using the changeset viewer.