common.h 4.75 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/**
 *
 * @copyright (c) 2009-2014 The University of Tennessee and The University 
 *                          of Tennessee Research Foundation. 
 *                          All rights reserved.
 * @copyright (c) 2012-2014 Inria. All rights reserved.
 * @copyright (c) 2012-2014 IPB. All rights reserved. 
 *
 **/

/**
 *
 * @file common.h
 *
 *  MORSE codelets kernel
 *  MORSE is a software package provided by Univ. of Tennessee,
 *  Univ. of California Berkeley and Univ. of Colorado Denver,
 *  and INRIA Bordeaux Sud-Ouest
 *
20
 * @version 0.9.0
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 * @author Mathieu Faverge
 * @author Cedric Castagnede
 * @date 2012-09-15
 *
 **/

/*******************************************************************************
 *  MORSE facilities of interest to both MORSE core developer
 *  and also of interest to MORSE community contributor.
 **/
#ifndef _MORSE_COMMON_H_
#define _MORSE_COMMON_H_

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>

#if defined( _WIN32 ) || defined( _WIN64 )
#include <io.h>
#else
#include <unistd.h>
#endif


/** ****************************************************************************
 * Implementation headers
 **/
49
#if defined(CHAMELEON_USE_CUDA)
50 51 52 53 54 55
#include <cuda.h>
#include <cuda_runtime.h>
#include <cuda_runtime_api.h>
#include <cublas.h>
#endif

56
#if defined(CHAMELEON_USE_OPENCL)
57 58 59
#include <OpenCL/cl.h>
#endif

60
#if defined(CHAMELEON_USE_MPI)
61 62 63 64 65 66 67
#include <mpi.h>
#endif


/** ****************************************************************************
 * Linear Algebra headers
 **/
68
#if defined(CHAMELEON_USE_MAGMA)
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
#include <magma.h>
#endif


/** ****************************************************************************
 *  Line to avoid conflict with magma, because, we don't know why
 *  but lapacke provide a wrong interface of lapack in fortran
 **/
#ifndef LAPACK_NAME
#define LAPACK_NAME(a, b) lapackef77_##a
#endif
#include <lapacke.h>
#include <coreblas.h>

#include "morse.h"

#include "global.h"
#include "auxiliary.h"
#include "tile.h"
#include "async.h"
#include "bulge.h"

/** ****************************************************************************
 *  Determine FORTRAN names
 **/
#if defined(ADD_)
#define MORSE_FNAME(lcname, UCNAME)        morse_##lcname##_
#define MORSE_TILE_FNAME(lcname, UCNAME)   morse_##lcname##_tile_
#define MORSE_ASYNC_FNAME(lcname, UCNAME)  morse_##lcname##_tile_async_
#define MORSE_WS_FNAME(lcname, UCNAME)     morse_alloc_workspace_##lcname##_
#define MORSE_WST_FNAME(lcname, UCNAME)    morse_alloc_workspace_##lcname##_tile_
#elif defined(NOCHANGE)
#define MORSE_FNAME(lcname, UCNAME)        morse_##lcname
#define MORSE_TILE_FNAME(lcname, UCNAME)   morse_##lcname##_tile
#define MORSE_ASYNC_FNAME(lcname, UCNAME)  morse_##lcname##_tile_async
#define MORSE_WS_FNAME(lcname, UCNAME)     morse_alloc_workspace_##lcname
#define MORSE_WST_FNAME(lcname, UCNAME)    morse_alloc_workspace_##lcname##_tile
#elif defined(UPCASE)
#define MORSE_FNAME(lcname, UCNAME)        MORSE_##UCNAME
#define MORSE_TILE_FNAME(lcname, UCNAME)   MORSE_##UCNAME##_TILE
#define MORSE_ASYNC_FNAME(lcname, UCNAME)  MORSE_##UCNAME##_TILE_ASYNC
#define MORSE_WS_FNAME(lcname, UCNAME)     MORSE_ALLOC_WORKSPACE_##UCNAME
#define MORSE_WST_FNAME(lcname, UCNAME)    MORSE_ALLOC_WORKSPACE_##UCNAME##_TILE
#endif


/*******************************************************************************
 *  Global shortcuts
 **/
#define MORSE_RANK        morse_rank(morse)
#define MORSE_SIZE        morse->world_size
#define MORSE_GRPSIZE     morse->group_size
#define MORSE_NB          morse->nb
#define MORSE_IB          morse->ib
#define MORSE_NBNBSIZE    morse->nbnbsize
#define MORSE_IBNBSIZE    morse->ibnbsize
#define MORSE_SCHEDULING  morse->scheduling
#define MORSE_RHBLK       morse->rhblock
#define MORSE_TRANSLATION morse->translation
#define MORSE_PARALLEL    morse->parallel_enabled
#define MORSE_PROFILING   morse->profiling_enabled
130
#if defined(CHAMELEON_USE_MPI)
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
#define MORSE_MPI_RANK    morse->my_mpi_rank
#define MORSE_MPI_SIZE    morse->mpi_comm_size
#endif


/*******************************************************************************
 *  IPT internal define
 **/
#define MorseIPT_NoDep   0
#define MorseIPT_Panel   1
#define MorseIPT_All     2


/*******************************************************************************
 *  Global array of LAPACK constants
 **/
extern char *morse_lapack_constants[];
#define lapack_const(morse_const) morse_lapack_constants[morse_const][0]

#ifdef __cplusplus
extern "C" {
#endif

#include "compute_s.h"
#include "compute_d.h"
#define COMPLEX
#include "compute_c.h"
#include "compute_z.h"
#undef COMPLEX

/*
void morse_pdlag2s(MORSE_context_t *morse);
void morse_pzlag2c(MORSE_context_t *morse);
void morse_pslag2d(MORSE_context_t *morse);
void morse_pclag2z(MORSE_context_t *morse);
*/

#ifdef __cplusplus
}
#endif

#endif