MAGMA  1.2.0
MatrixAlgebraonGPUandMulticoreArchitectures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
auxiliary.cpp File Reference
#include "common_magma.h"
#include <assert.h>
Include dependency graph for auxiliary.cpp:

Go to the source code of this file.

Functions

int magma_num_gpus (void)
void printout_devices ()
void swp2pswp (char trans, int n, int *ipiv, int *newipiv)
float getv (float *da)
int sp_cat (char *lp, char *rpp[], magma_int_t *rnp, magma_int_t *np, magma_int_t ll)

Function Documentation

float getv ( float *  da)

Definition at line 161 of file auxiliary.cpp.

{
float res[1];
cublasGetVector(1, sizeof(float), da, 1, res, 1);
return res[0];
}
int magma_num_gpus ( void  )

Definition at line 17 of file auxiliary.cpp.

References MagmaMaxGPUs, and min.

{
const char *ngpu_str = getenv("MAGMA_NUM_GPUS");
int ngpu = 1;
if ( ngpu_str != NULL ) {
char* endptr;
ngpu = strtol( ngpu_str, &endptr, 10 );
int ndevices;
cudaGetDeviceCount( &ndevices );
// if *endptr == '\0' then entire string was valid number (or empty)
if ( ngpu < 1 or *endptr != '\0' ) {
ngpu = 1;
fprintf( stderr, "$MAGMA_NUM_GPUS=%s is an invalid number; using %d GPU.\n",
ngpu_str, ngpu );
}
else if ( ngpu > MagmaMaxGPUs or ngpu > ndevices ) {
ngpu = min( ndevices, MagmaMaxGPUs );
fprintf( stderr, "$MAGMA_NUM_GPUS=%s exceeds MagmaMaxGPUs=%d or available GPUs=%d; using %d GPUs.\n",
ngpu_str, MagmaMaxGPUs, ndevices, ngpu );
}
assert( 1 <= ngpu and ngpu <= ndevices );
}
return ngpu;
}

Here is the caller graph for this function:

void printout_devices ( )

Definition at line 48 of file auxiliary.cpp.

{
int ndevices;
cudaGetDeviceCount( &ndevices );
for( int idevice = 0; idevice < ndevices; idevice++ ) {
cudaDeviceProp prop;
cudaGetDeviceProperties( &prop, idevice );
printf( "device %d: %s, %.1f MHz clock, %.1f MB memory, capability %d.%d\n",
idevice,
prop.name,
prop.clockRate / 1000.,
prop.totalGlobalMem / (1024.*1024.),
prop.major,
prop.minor );
}
}

Here is the caller graph for this function:

int sp_cat ( char *  lp,
char *  rpp[],
magma_int_t rnp,
magma_int_t np,
magma_int_t  ll 
)

Definition at line 171 of file auxiliary.cpp.

{
magma_int_t i, n, nc;
char *f__rp;
n = (int)*np;
for(i = 0 ; i < n ; ++i)
{
nc = ll;
if(rnp[i] < nc)
nc = rnp[i];
ll -= nc;
f__rp = rpp[i];
while(--nc >= 0)
*lp++ = *f__rp++;
}
while(--ll >= 0)
*lp++ = ' ';
return 0;
}
void swp2pswp ( char  trans,
int  n,
int *  ipiv,
int *  newipiv 
)

Definition at line 74 of file auxiliary.cpp.

{
int i, newind, ind;
char trans_[2] = {trans, 0};
long int notran = lapackf77_lsame(trans_, "N");
for(i=0; i<n; i++)
newipiv[i] = -1;
if (notran){
for(i=0; i<n; i++){
newind = ipiv[i] - 1;
if (newipiv[newind] == -1) {
if (newipiv[i]==-1){
newipiv[i] = newind;
if (newind>i)
newipiv[newind]= i;
}
else
{
ind = newipiv[i];
newipiv[i] = newind;
if (newind>i)
newipiv[newind]= ind;
}
}
else {
if (newipiv[i]==-1){
if (newind>i){
ind = newipiv[newind];
newipiv[newind] = i;
newipiv[i] = ind;
}
else
newipiv[i] = newipiv[newind];
}
else{
ind = newipiv[i];
newipiv[i] = newipiv[newind];
if (newind > i)
newipiv[newind] = ind;
}
}
}
} else {
for(i=n-1; i>=0; i--){
newind = ipiv[i] - 1;
if (newipiv[newind] == -1) {
if (newipiv[i]==-1){
newipiv[i] = newind;
if (newind>i)
newipiv[newind]= i;
}
else
{
ind = newipiv[i];
newipiv[i] = newind;
if (newind>i)
newipiv[newind]= ind;
}
}
else {
if (newipiv[i]==-1){
if (newind>i){
ind = newipiv[newind];
newipiv[newind] = i;
newipiv[i] = ind;
}
else
newipiv[i] = newipiv[newind];
}
else{
ind = newipiv[i];
newipiv[i] = newipiv[newind];
if (newind > i)
newipiv[newind] = ind;
}
}
}
}
}

Here is the caller graph for this function: