1 / 24

Associative Functions implemented on ClearSpeed CSX600

Associative Functions implemented on ClearSpeed CSX600. Mike Yuan. Introduction. Important for ATC applications asc.cn, asc.h, asc_asm.cn, carlot.h and carlot_n Overview - PickOne: get, next - AnyResponder: any, ascNany - MAX/MIN: max_int, min_int, max_float, min_float Three versions

Download Presentation

Associative Functions implemented on ClearSpeed CSX600

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Associative Functions implemented on ClearSpeed CSX600 Mike Yuan

  2. Introduction • Important for ATC applications • asc.cn, asc.h, asc_asm.cn, carlot.h and carlot_n • Overview - PickOne: get, next - AnyResponder: any, ascNany - MAX/MIN: max_int, min_int, max_float, min_float • Three versions • Pure Cn (preferred): all functions in asc.cn • Assembler: max, min in asc_asm.cn • Mixed Cn and assembler: get, next, ascAny, ascNany in asc_asm.cn

  3. Compile and run • For Cn versions -bash-3.00$ cscn -o test1.csx carlot_next.cn asc.cn -bash-3.00$ csrun test1.csx • For mixed and assembler versions -bash-3.00$ cscn -o test1.csx carlot_next.cn asc_asm.cn -bash-3.00$ csrun test1.csx

  4. Get • Signature: mono short get (poly const char mask) • Return the first PE number of the enabled PEs

  5. Get example codes //set the mask to only PE's with a 1991 model car. if (mycarlot.year == 1991) { mask = 1; } //get first car with the year 1991 ONE = get(mask); //set the ONE to color M if (get_penum() == ONE) { mycarlot.color = 'M'; }

  6. Get results produced • Before: 1990 L F 1 1991 R H 1 1992 O T 0 • After: 1990 L F 1 1991 M H 1 1992 O T 0

  7. Next • Signature: mono short next (poly const char mask, short ONE) • Return the PE number of the next PE in the mask

  8. Next example codes //get NEXT car with 1991 year. ONE = next(mask,ONE); //set the second one to color N if (get_penum() == ONE) { mycarlot.color = 'N'; } //skip to the fourth carwith year 1991 ONE = next(mask,ONE); ONE = next(mask,ONE); //set the forth car with year 1991 to Z if (get_penum() == ONE) { mycarlot.color = 'Z'; }

  9. Next results produced • Before: 1991 G D 1 19 91 L H 1 1991 Y D 1 • After: 1991 N D 1 1991 L H 1 1991 Z D 1

  10. any • Signature: mono char any (poly int condition); • Test the condition condition on all of the enabled PEs and returns true if any of the enabled PEs return true

  11. Example codes //set mask if (mycarlot.year == 1991) { mask = 1; } //turn off PE's not in mask if (mask) { //if there are any red and 1991 cars if(any(mycarlot.color == 'R')) { //all cars turn to color T mycarlot.color = 'T'; } }

  12. any results • Before there is a: 1991 R D 1 • After 1991 T H 1 1991 T D 1 1991 T H 1

  13. ascNany • Signature: mono char ascNany (poly int condition); • Test the condition condition on all of the enabled PEs and returns true if all of the enabled PEs return false

  14. ascNany (cont) • Example codes: if(ascNany(mycarlot.color=='NONE')) { mycarlot.onlot = 0; } • Results 1991 T H 0 1991 T D 0 1991 T H 0

  15. Max for int/float/short • Signature of max: int max_int(poly int value) • Return the maximum instance of a signed poly int value

  16. Min for int/float/short • Signature of min: int min_int(poly int value) • Return the minimum instance of a signed poly int value

  17. Max/Min (cont) • Example codes poly int index = get_penum(); int max_index, min_index; max_index = max_int(index); printf ("The maximum of PE number is: %d\n", max_index); min_index = min_int(index); printf ("The minimum of PE number is: %d\n", min_index); • Results The maximum of PE number is: 95 The minimum of PE number is: 0

  18. Timing • Record cycles of operations • Example codes: // min_int start_time = get_cycles_ila(); min_int_result = min_int(int_value); elapsed_time = get_cycles_ila() - start_time; printf("min_int Result: %2d Time: %4u\n",min_int_result, elapsed_time);

  19. Timing (cont) • Results: min_int Result: 0 Time: 6377 • run csreset -v and the frequency is displayed • Core clock frequency: Processor 0: 210.0 MHz, Processor 1: 210.0 MHz • 6377/210M=30.367 ms

  20. Random function • Generate random data in PE • Randp() generates random numbers between 0 and RAND_MAX • Example codes: poly int rand_num = 0; rand_num = randp(); plane.speed[i] = (scale * (rand_num*(600.0 - 30.0)/RAND_MAX + 30));

  21. Random number (cont) • Problem: average is median: (600-30)/2=285, not 250 • Use Poisson distribution or Weibu distribution to get average=250

  22. Handle timer • Do timing in host for accuracy • Two semaphores sem_start, sem_end between host and PE • Host signals sem_start and records time • PE waits for it and then execute • PE signals sem_end • Host waits for sem_end

  23. Handle timer (cont) • Host records time • How much time spent? • If > 0.5s, error • Else if< 0.5s, wait for rest of time

  24. Task scheduling • One .csx file • A count for every 0.5s • If count=8, do terrain avoidance • If count=16, do conflict detection and correlation

More Related