1
#include "atlas_taffinity.h"
2
#include "atlas_misc.h"
5
#if defined(__MINGW32__) || defined(__MINGW64__)
7
int slashdrivesub(char *ln)
9
* replaces \\c\ with c:\, returns change in string length
10
* this version required for older cygwins
13
char *sp, *lp=ln, ctmp;
17
sp = strstr(lp, "\\\\");
18
if (sp && strlen(sp) > 3)
20
if (sp[2] == 'a' || sp[2] == 'b' || sp[2] == 'c' || sp[2] == 'd' ||
21
sp[2] == 'e' || sp[2] == 'f' || sp[2] == 'g' || sp[2] == 'h')
29
for (lp=sp+3; *lp = lp[1]; lp++);
43
int cygdrivesub(char *ln)
45
* replaces \cygdrive\c\ with c:\, returns change in string length
46
* this version works cygnus version 1.1.0
52
while(sp = strstr(ln, "\\cygdrive\\"))
59
while (*sp = sp[9]) sp++;
61
return( slashdrivesub(ln) - (i*9) );
64
void slashsub(char *ln)
66
* changes forward slash of unix to backslash of windoze
70
for (i=0; ln[i]; i++) if (ln[i] == '/') ln[i] = '\\';
76
void PrintUsage(char *nam)
78
fprintf(stderr, "\nUSAGE: %s [-o <outfile>]\n", nam);
82
FILE *GetFlags(int nargs, char **args)
87
for (i=1; i < nargs; i++)
89
if (args[i][0] != '-') PrintUsage(args[0]);
93
#if defined(__MINGW32__) || defined(__MINGW64__)
96
wp = malloc(sizeof(char)*(strlen(args[++i])+1));;
100
fpout = fopen(wp, "w");
104
fpout = fopen(args[++i], "w");
115
void getLaunchOrder(int P, int *lo)
117
int i, j, k, stop, dest;
119
for (i=0; (1<<i) < P; i++)
122
for (i--; i >= 0; i--)
125
for (j=0; j < stop; j++)
127
dest = lo[j] + (1<<i);
136
int main(int nargs, char **args)
141
fpout = GetFlags(nargs, args);
143
fprintf(fpout, " /* This file generated by %s */\n", __FILE__);
144
fprintf(fpout, "#ifndef ATLAS_NTHREADS_H\n #define ATLAS_NTHREADS_H\n\n");
145
#if !defined(ATL_PAFF_WIN64) && !defined(ATL_PAFF_WIN)
146
fprintf(fpout, "#include \"pthread.h\"\n");
150
#elif defined(ATL_AFF_NUMID)
155
#if defined(ATL_AFF_NUMID)
156
#if ATL_NCPU > ATL_AFF_NUMID
158
"/*\n * I should have tested if NTHREADS = %d(NCPU) or %d(NAFFIDs)\n");
159
fprintf(fpout, " * is better. For now, assuming %d\n */", ATL_NCPU);
162
fprintf(fpout, " #define ATL_NTHREADS %d\n", P);
163
for (i=0; (1<<i) < P; i++);
164
fprintf(fpout, " #define ATL_NTHRPOW2 %d\n", i);
165
lo = malloc(P*sizeof(int));
166
getLaunchOrder(P, lo);
167
fprintf(fpout, " #ifdef ATL_LAUNCHORDER\n");
168
fprintf(fpout, " static int ATL_launchorder[%d] = {0", P);
169
for (i=1; i < P; i++)
170
fprintf(fpout, ",%d", lo[i]);
171
fprintf(fpout, "};\n #endif\n");
172
#if defined(ATL_AFF_NUMID) && !defined(ATL_RANK_IS_PROCESSORID)
173
fprintf(fpout, " #if defined(ATL_RANK2ID)\n");
174
fprintf(fpout, " static int ATL_rank2ID[%d] = {%d",
175
P, ATL_affinityIDs[0]);
176
for (i=1; i < P; i++)
177
fprintf(fpout, ",%d", ATL_affinityIDs[i%ATL_AFF_NUMID]);
178
fprintf(fpout, "};\n #endif\n");
180
fprintf(fpout, "\n#endif\n");