19 const char *ngpu_str = getenv(
"MAGMA_NUM_GPUS");
21 if ( ngpu_str != NULL ) {
23 ngpu = strtol( ngpu_str, &endptr, 10 );
25 cudaGetDeviceCount( &ndevices );
27 if ( ngpu < 1 or *endptr !=
'\0' ) {
29 fprintf( stderr,
"$MAGMA_NUM_GPUS=%s is an invalid number; using %d GPU.\n",
34 fprintf( stderr,
"$MAGMA_NUM_GPUS=%s exceeds MagmaMaxGPUs=%d or available GPUs=%d; using %d GPUs.\n",
37 assert( 1 <= ngpu and ngpu <= ndevices );
51 cudaGetDeviceCount( &ndevices );
52 for(
int idevice = 0; idevice < ndevices; idevice++ ) {
54 cudaGetDeviceProperties( &prop, idevice );
55 printf(
"device %d: %s, %.1f MHz clock, %.1f MB memory, capability %d.%d\n",
58 prop.clockRate / 1000.,
59 prop.totalGlobalMem / (1024.*1024.),
76 char trans_[2] = {
trans, 0};
85 if (newipiv[newind] == -1) {
102 ind = newipiv[newind];
107 newipiv[i] = newipiv[newind];
111 newipiv[i] = newipiv[newind];
113 newipiv[newind] = ind;
118 for(i=n-1; i>=0; i--){
119 newind = ipiv[i] - 1;
120 if (newipiv[newind] == -1) {
131 newipiv[newind]= ind;
137 ind = newipiv[newind];
142 newipiv[i] = newipiv[newind];
146 newipiv[i] = newipiv[newind];
148 newipiv[newind] = ind;
163 cublasGetVector(1,
sizeof(
float), da, 1, res, 1);
177 for(i = 0 ; i < n ; ++i)