3 #define NUM_PROCESSORS 12
17 unsigned backoff_base;
19 unsigned backoff_addend;
21 unsigned backoff_base_bits = 0;
22 unsigned backoff_cap_bits = 0;
25 unsigned iterations = 1;
26 unsigned initial_nodes = 0;
27 unsigned repetitions = 1;
28 unsigned backoff_shift_bits = 0;
36 ussetlock(native_lock);
42 usunsetlock(native_lock);
46 tts_acq(unsigned* plock)
50 backoff = backoff_base;
55 } while (tas(plock) == 1);
72 barrier(Barrier, procs*multi);
77 for(i=0;i<iterations;i++) {
80 for(j=0; j<work;) j++;
82 for(j=0; j<work;) j++;
85 barrier(Barrier, procs*multi);
89 printf("p%d m%d i%d b%d c%d s%d w%d time %.0f ms.\n",
90 procs, multi, iterations*procs*multi,
91 backoff_base_bits, backoff_cap_bits,
92 backoff_shift_bits, work, ((t2-t1)*1000)/(double)HZ);
102 processor = (pid/multi)+1;
103 processor %= NUM_PROCESSORS;
104 if(sysmp(MP_MUSTRUN, processor) == -1) { perror("Could not MUSTRUN"); }
106 printf("--- %s\n", name);
109 for (i=0; i<repetitions; i++) {
116 shmid = shmget(IPC_PRIVATE, sizeof(shared_mem_t), 511);
118 smp = (shared_mem_t *)shmat(shmid, 0, 0);
119 assert((int)smp != -1);
122 void my_m_fork(void (*func)(),int num_procs)
124 for (pid=1;pid<num_procs;pid++) {
125 if(fork()==0) /* Child */ {
126 (*func)(); /* Call the program */
131 (*func)(); /* Call the program */
134 main(int argc,char **argv)
136 parse_args(argc, argv);
138 iterations = (iterations + ((procs*multi)>>1))/(procs*multi);
140 Handle = usinit("/tmp/foo_barrier");
141 Barrier = new_barrier(Handle);
142 init_barrier(Barrier);
143 lock_handle = usinit("/tmp/foo_lock");
144 native_lock = usnewlock(lock_handle);
145 my_m_fork(main_task, procs*multi);
146 shmctl(shmid, IPC_RMID, smp);