summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: b5bde1c)
raw | patch | inline | side by side (parent: b5bde1c)
author | Jianzhong Xu <xuj@ti.com> | |
Wed, 1 Jun 2016 14:59:34 +0000 (14:59 +0000) | ||
committer | Jianzhong Xu <xuj@ti.com> | |
Wed, 1 Jun 2016 14:59:34 +0000 (14:59 +0000) |
diff --git a/readme.txt b/readme.txt
index 3332fbfcca5e70bc12e150efcb2ba3c3f7c62cc9..234d5198e05c9af47448a576ae0df56eb59c2432 100644 (file)
--- a/readme.txt
+++ b/readme.txt
1.--------- Set environment variables ---------
-Following environment vaialbes must be set in order to build DSP-only LINALG (version numbers are used as examples):
+Following environment variables must be set in order to build DSP-only LINALG (version numbers are used as examples):
export CGTROOT="<TI_CGT_INSTALLATION_ROOT>/cgt-c6x"
export PDK_DIR="<COMPONENTS_INSTALLATION_ROOT>/pdk_c667x_2_0_1"
index d68e3878c61e170be43ba63f7cc3eb4bfe106496..472c00a00252ff151fa7682d84004aec3268c61b 100644 (file)
* - CLAPACK API: http://www.netlib.org/clapack/
* - @ref ti_cblas_api
*
- * @section linalg_integration Integration
+ * @section linalg_ug User's Guide
+ * For detailed information about how to use LINALG, including integration, tuning, rebuilding, and porting to
+ * more devices, please refer to http://processors.wiki.ti.com/index.php/Processor_SDK_Linear_Algebra_Library.
+ *
*/
diff --git a/src/ti/linalg/tuning/cgemm_tune/cgemm_tune.c b/src/ti/linalg/tuning/cgemm_tune/cgemm_tune.c
index ad44fc84aa6e0c97510103dfedf7bb1d6d24a031..fb07301873d839b568b044d24702b3c624a41029 100644 (file)
@@ -204,15 +204,15 @@ int run_cgemm_dsp_and_arm(int M, int K, int N, float *time_dsp, float *time_arm,
/*-------------------------------------------------------------------------
* Initialize matrices and print if small enough.
*------------------------------------------------------------------------*/
- for (i = 0; i < M*K; ++i)
+ for (i = 0; i < (long long)M*K; ++i)
{
A[i] = (float)rand()/RAND_MAX + (float)rand()/RAND_MAX * I;
}
- for (i = 0; i < K*N; ++i)
+ for (i = 0; i < (long long)K*N; ++i)
{
B[i] = (float)rand()/RAND_MAX + (float)rand()/RAND_MAX * I;
}
- for (i = 0; i < M*N; ++i)
+ for (i = 0; i < (long long)M*N; ++i)
{
Carm[i] = Cdsp[i] = (float)rand()/RAND_MAX + (float)rand()/RAND_MAX * I;
}
index e467a8f117aaa0d0e43fb7dd1c08b3c7a5bffed9..9aed1775c9ae77dba495fc7124c33a5a1d4e4c30 100644 (file)
#include <math.h>
#include <complex.h>
+#define EPISILON 1e-5
+#define DELTA 1e-5
+#define NERRORS 5
+
+
+#define DISPLAY_ERROR_MESSAGE(num_errs) \
+ if (num_errs > 0) { \
+ printf("FAIL with %d errors!\n", num_errs); \
+ } \
+ else { \
+ printf("PASS!\n"); \
+ }
+
/*-----------------------------------------------------------------------------
-* Compare two single precision complex matrices
+* Compare two single precision real matrices
*----------------------------------------------------------------------------*/
-int comp_matrix_complex(const float complex *C1, const float complex *C2, int M, int N)
+int comp_matrix(const float *C1, const float *C2, int M, int N)
{
- int i;
- float norm, delta;
- const float EPISILON = 1e-5;
- const float DELTA = 1e-5;
- const int NERRORS = 5;
- int num_errors = 0;
-
- for (i=0; i<M*N; i++)
+ long long i;
+ int num_errors = 0;
+
+ for (i=0; i<(long long)M*N; i++)
{
- delta = cabs(C1[i]) - cabs(C2[i]);
- norm = cabs(C1[i]);
- if(norm < cabs(C2[i])) {
- norm = cabs(C2[i]);
+ float norm;
+ float delta = fabsf(C1[i] - C2[i]);
+ if(fabsf(C1[i]) > fabsf(C2[i])) {
+ norm = fabsf(C1[i]);
+ }
+ else {
+ norm = fabsf(C2[i]);
}
- if (delta > EPISILON*norm && delta>DELTA) {
+ if ( (delta > EPISILON*norm) && (delta > DELTA)) {
if ((num_errors += 1) < NERRORS) {
- printf("Error [elem:%d]: %f <==> %f\n", i, cabs(C1[i]), cabs(C2[i]));
+ printf("Error [elem:%d]: %e <==> %e\n", i, C1[i], C2[i]);
}
}
}
@@ -65,22 +77,29 @@ int comp_matrix_complex(const float complex *C1, const float complex *C2, int M,
}
return num_errors;
-} /* comp_matrix_complex */
+}
/*-----------------------------------------------------------------------------
* Compare two double precision real matrices
*----------------------------------------------------------------------------*/
int comp_matrix_double(const double *C1, const double *C2, int M, int N)
{
- int i;
- const double EPISILON = 1e-10;
- const int NERRORS = 5;
- int num_errors = 0;
+ long long i;
+ double norm;
+ int num_errors = 0;
- for (i=0; i<(long)M*N; i++)
+ for (i=0; i<(long long)M*N; i++)
{
+ double norm;
double delta = fabs(C1[i] - C2[i]);
- if (delta > EPISILON*fabs(C1[i])) {
+ if(fabs(C1[i]) > fabs(C2[i])) {
+ norm = fabs(C1[i]);
+ }
+ else {
+ norm = fabs(C2[i]);
+ }
+
+ if ( (delta > EPISILON*norm) && (delta > DELTA)) {
if ((num_errors += 1) < NERRORS) {
printf("Error [elem:%d]: %e <==> %e\n", i, C1[i], C2[i]);
}
} /* comp_matrix_double */
/*-----------------------------------------------------------------------------
-* Compare two single precision real matrices
+* Compare two single precision complex matrices
*----------------------------------------------------------------------------*/
-int comp_matrix(const float *C1, const float *C2, int M, int N)
+int comp_matrix_complex(const float complex *C1, const float complex *C2, int M, int N)
{
- int i;
- const float EPISILON = 1e-5;
- const int NERRORS = 5;
- int num_errors = 0;
+ long long i;
+ int num_errors = 0;
- for (i=0; i<(long)M*N; i++)
+ for (i=0; i<(long long)M*N; i++)
{
- float delta = fabs(C1[i] - C2[i]);
+ float norm;
+ float delta = cabsf(C1[i] - C2[i]);
+ if(cabsf(C1[i]) > cabsf(C2[i])) {
+ norm = cabsf(C1[i]);
+ }
+ else {
+ norm = cabsf(C2[i]);
+ }
- if (delta > EPISILON*fabs(C1[i])) {
+ if ( (delta > EPISILON*norm) && (delta > DELTA)) {
if ((num_errors += 1) < NERRORS) {
- printf("Error [elem:%d]: %e <==> %e\n", i, C1[i], C2[i]);
+ printf("Error [elem:%d]: %e + %e*j <==> %e + %e*j\n", i,
+ crealf(C1[i]), cimagf(C1[i]), crealf(C2[i]), cimagf(C2[i]));
}
}
}
}
return num_errors;
-}
+} /* comp_matrix_complex */
/*-----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/
int comp_matrix_double_complex(const double complex *C1, const double complex *C2, int M, int N)
{
- int i;
- const double EPISILON = 1e-10;
- const int NERRORS = 5;
- int num_errors = 0;
+ long long i;
+ int num_errors = 0;
- for (i=0; i<M*N; i++)
+ for (i=0; i<(long long)M*N; i++)
{
- double delta = fabs(cabs(C1[i]) - cabs(C2[i]));
+ double norm;
+ double delta = cabs(C1[i] - C2[i]);
+ if(cabs(C1[i]) > cabs(C2[i])) {
+ norm = cabs(C1[i]);
+ }
+ else {
+ norm = cabs(C2[i]);
+ }
- if (delta > EPISILON*cabs(C1[i])) {
+ if ( (delta > EPISILON*norm) && (delta > DELTA)) {
if ((num_errors += 1) < NERRORS) {
- printf("Error [elem:%d]: %f <==> %f\n", i, cabs(C1[i]), cabs(C2[i]));
+ printf("Error [elem:%d]: %e + %e*j <==> %e + %e*j\n", i,
+ creal(C1[i]), cimag(C1[i]), creal(C2[i]), cimag(C2[i]));
}
}
}
- if (num_errors > 0) {
- printf("FAIL with %d errors!\n", num_errors);
- }
- else {
- printf("PASS!\n");
- }
+ DISPLAY_ERROR_MESSAGE(num_errors);
return num_errors;
} /* comp_matrix_double_complex */
index 0e065326fc17de6b9e0f5fadfc681b888c0ee935..cd3c6538463667638d51f7970f3c1ae39edd9851 100644 (file)
CC = gcc
endif
-CFLAGS = -g -O2 -I$(TARGET_ROOTDIR)/usr/include -I$(LINALG_DIR)/packages/ti/linalg
+CFLAGS = -g -O2 -I$(TARGET_ROOTDIR)/usr/include -I../../include
LIB_DIR = ../../lib
LD_FLAGS=-L$(TARGET_ROOTDIR)/lib -L$(TARGET_ROOTDIR)/usr/lib -Wl,-rpath-link,$(TARGET_ROOTDIR)/lib -Wl,-rpath-link,$(TARGET_ROOTDIR)/usr/lib
diff --git a/src/ti/linalg/tuning/zgemm_tune/zgemm_tune.c b/src/ti/linalg/tuning/zgemm_tune/zgemm_tune.c
index fe15243ad343d45bd37c9c9e8bbaf06e434be7db..beb3fbc7561c5caf8458096d17e33b7d7d917c88 100644 (file)
@@ -205,15 +205,15 @@ int run_zgemm_dsp_and_arm(int M, int N, int K, float *time_dsp, float *time_arm,
/*-------------------------------------------------------------------------
* Initialize matrices and print if small enough.
*------------------------------------------------------------------------*/
- for (i = 0; i < M*K; ++i)
+ for (i = 0; i < (long long)M*K; ++i)
{
A[i] = (double)rand()/RAND_MAX + (double)rand()/RAND_MAX * I;
}
- for (i = 0; i < K*N; ++i)
+ for (i = 0; i < (long long)K*N; ++i)
{
B[i] = (double)rand()/RAND_MAX + (double)rand()/RAND_MAX * I;
}
- for (i = 0; i < M*N; ++i)
+ for (i = 0; i < (long long)M*N; ++i)
{
Carm[i] = Cdsp[i] = (double)rand()/RAND_MAX + (double)rand()/RAND_MAX * I;
}