Skip to content

Commit 68cbd37

Browse files
author
Kent Knox
committed
Merge pull request #38 from gicmo/addBuildOpt
Add small helper function to build up kernel build options :+1:
2 parents 7471dcb + e75d11d commit 68cbd37

26 files changed

+143
-119
lines changed

src/library/blas/generic/common.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <clkern.h>
2323
#include <cltypes.h>
2424
#include <stdio.h>
25+
#include <ctype.h>
2526

2627
#include "clblas-internal.h"
2728

@@ -526,17 +527,34 @@ setupBuildOpts(
526527
opts[0] = '\0';
527528

528529
#if !defined NDEBUG
529-
strcpy(opts, "-g ");
530+
addBuildOpt(opts, BUILD_OPTS_MAXLEN, "-g");
530531
#endif /* NDEBUG */
531532

532533
if (target.ident.vendor == VENDOR_NVIDIA &&
533534
!strcmp(mempat->name, "2-staged cached global memory based "
534535
"block trsm")) {
535536

536-
strcat(opts, "-cl-opt-disable");
537+
addBuildOpt(opts, BUILD_OPTS_MAXLEN, "-cl-opt-disable");
537538
}
538539
}
539540

541+
void addBuildOpt(
542+
char * opts,
543+
size_t len,
544+
const char * option)
545+
{
546+
size_t l = strlen(opts);
547+
548+
if (l > 0 && !isspace(opts[l-1]) && l+1 < len) {
549+
opts[l] = ' ';
550+
opts[l+1] = '\0';
551+
l++;
552+
}
553+
554+
strncat(opts, option, len - l - 1);
555+
}
556+
557+
540558
char VISIBILITY_HIDDEN
541559
*sprintfGranulation(char *buf, const SubproblemDim *dim, int level)
542560
{

src/library/blas/gens/asum.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,23 +125,23 @@ setBuildOpts(
125125
const CLBlasKargs *kargs = (const CLBlasKargs *)(&step->args);
126126
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
127127
{
128-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
128+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
129129
#ifdef DEBUG_DOT
130130
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
131131
#endif
132132
}
133133
if ( (kargs->dtype == TYPE_COMPLEX_FLOAT) || (kargs->dtype == TYPE_COMPLEX_DOUBLE))
134134
{
135-
strcat( buildOptStr, " -DCOMPLEX ");
135+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCOMPLEX");
136136
#ifdef DEBUG_ASUM
137137
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
138138
#endif
139139
}
140140
if( (kargs->ldb.vector) != 1) {
141-
strcat( buildOptStr, " -DINCX_NONUNITY ");
141+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCX_NONUNITY");
142142
}
143143
if( (kargs->ldb.vector) < 1) {
144-
strcat( buildOptStr, " -DINCX_NEGATIVE ");
144+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCX_NEGATIVE");
145145
}
146146
return;
147147
}

src/library/blas/gens/axpy_reg.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,16 @@ setBuildOpts(
125125
const CLBlasKargs *kargs = (const CLBlasKargs *)(&step->args);
126126
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
127127
{
128-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
128+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
129129
#ifdef DEBUG_AXPY
130130
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
131131
#endif
132132
}
133133
if( (kargs->ldb.vector) != 1) {
134-
strcat( buildOptStr, " -DINCX_NONUNITY ");
134+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCX_NONUNITY");
135135
}
136136
if( (kargs->ldc.vector) != 1) {
137-
strcat( buildOptStr, " -DINCY_NONUNITY ");
137+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCY_NONUNITY");
138138
}
139139

140140
return;

src/library/blas/gens/copy_reg.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,16 @@ setBuildOpts(
125125
const CLBlasKargs *kargs = (const CLBlasKargs *)(&step->args);
126126
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
127127
{
128-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
128+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
129129
#ifdef DEBUG_COPY
130130
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
131131
#endif
132132
}
133133
if( (kargs->ldb.vector) != 1) {
134-
strcat( buildOptStr, " -DINCX_NONUNITY ");
134+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCX_NONUNITY");
135135
}
136136
if( (kargs->ldc.vector) != 1) {
137-
strcat( buildOptStr, " -DINCY_NONUNITY ");
137+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCY_NONUNITY");
138138
}
139139

140140
return;

src/library/blas/gens/dot.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,16 +128,16 @@ setBuildOpts(
128128
const CLBlasKargs *kargs = (const CLBlasKargs *)(&step->args);
129129
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
130130
{
131-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
131+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
132132
#ifdef DEBUG_DOT
133133
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
134134
#endif
135135
}
136136
if( (kargs->ldb.vector) != 1) {
137-
strcat( buildOptStr, " -DINCX_NONUNITY ");
137+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCX_NONUNITY");
138138
}
139139
if( (kargs->ldc.vector) != 1) {
140-
strcat( buildOptStr, " -DINCY_NONUNITY ");
140+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DINCY_NONUNITY");
141141
}
142142

143143
return;

src/library/blas/gens/gbmv.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,23 +116,23 @@ setBuildOpts(
116116

117117
if ( (kargs->dtype == TYPE_DOUBLE) || (kargs->dtype == TYPE_COMPLEX_DOUBLE) )
118118
{
119-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
119+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
120120
#ifdef DEBUG_GBMV
121121
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
122122
#endif
123123
}
124124

125125
if( kargs->pigFuncID == CLBLAS_TBMV )
126126
{
127-
strcat( buildOptStr, " -DTBMV_ONLY ");
127+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DTBMV_ONLY");
128128
if( kargs->diag == clblasUnit )
129129
{
130-
strcat( buildOptStr, " -DUNIT_DIAG ");
130+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DUNIT_DIAG");
131131
}
132132
}
133133
if( ((kargs->pigFuncID == CLBLAS_GBMV) || (kargs->pigFuncID == CLBLAS_TBMV)) && (kargs->transA == clblasConjTrans) )
134134
{
135-
strcat( buildOptStr, " -DDO_CONJ ");
135+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDO_CONJ");
136136
}
137137

138138
if( (kargs->pigFuncID == CLBLAS_SBMV) || (kargs->pigFuncID == CLBLAS_HBMV) )
@@ -141,15 +141,15 @@ setBuildOpts(
141141
isUpper = ( kargs->order == clblasColumnMajor )? !isUpper : isUpper;
142142

143143
if( isUpper )
144-
strcat( buildOptStr, " -DGIVEN_SHBMV_UPPER ");
145-
else strcat( buildOptStr, " -DGIVEN_SHBMV_LOWER ");
144+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DGIVEN_SHBMV_UPPER");
145+
else addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DGIVEN_SHBMV_LOWER");
146146

147147
if(kargs->pigFuncID == CLBLAS_HBMV)
148148
{
149-
strcat( buildOptStr, " -DHBMV_ONLY ");
149+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHBMV_ONLY");
150150
if( kargs->order == clblasColumnMajor ) // Since routine calls Row-major, the whole matrix has to be conjugated while loading
151151
{
152-
strcat( buildOptStr, " -DDO_CONJ ");
152+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDO_CONJ");
153153
}
154154
}
155155
}

src/library/blas/gens/gemm_cached.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -158,36 +158,36 @@ setBuildOpts(
158158

159159
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
160160
{
161-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
161+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
162162
}
163163

164164
if (isComplexType(kargs->dtype))
165165
{
166-
strcat(buildOptStr, " -DCOMPLEX ");
166+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCOMPLEX");
167167
}
168168

169169
if ((bestSize.useBarrier) == 1)
170170
{
171-
strcat(buildOptStr, " -DGEMM_NEEDS_BARRIER ");
171+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DGEMM_NEEDS_BARRIER");
172172
}
173173

174174
if (kargs->M % dims->y)
175175
{
176-
strcat(buildOptStr, " -DM_TAIL_PRESENT ");
176+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DM_TAIL_PRESENT");
177177
}
178178

179179
if (kargs->N % dims->x)
180180
{
181-
strcat(buildOptStr, " -DN_TAIL_PRESENT ");
181+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DN_TAIL_PRESENT");
182182
}
183183

184184
if (kflags & KEXTRA_CONJUGATE_A)
185185
{
186-
strcat( buildOptStr, " -DCONJUGATE_A ");
186+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCONJUGATE_A");
187187
}
188188
if (kflags & KEXTRA_CONJUGATE_B)
189189
{
190-
strcat( buildOptStr, " -DCONJUGATE_B ");
190+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCONJUGATE_B");
191191
}
192192

193193
switch(kargs->pigFuncID)
@@ -201,46 +201,46 @@ setBuildOpts(
201201
#endif
202202
if (kargs->side == clblasLeft)
203203
{
204-
strcat (buildOptStr, " -D__SYMM_LEFT__ ");
204+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_LEFT__");
205205
}
206206
if (kargs->side == clblasRight)
207207
{
208-
strcat (buildOptStr, " -D__SYMM_RIGHT__ ");
208+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_RIGHT__");
209209
}
210210
if (kargs->uplo == clblasLower)
211211
{
212-
strcat(buildOptStr, " -D__SYMM_LOWER__ ");
212+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_LOWER__");
213213
}
214214
if (kargs->uplo == clblasUpper)
215215
{
216-
strcat(buildOptStr, " -D__SYMM_UPPER__ ");
216+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_UPPER__");
217217
}
218218
// Define the order for Legacy sake.
219219
if (kargs->order == clblasColumnMajor)
220220
{
221-
strcat(buildOptStr, " -D__SYMM_COLMAJOR__ ");
221+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_COLMAJOR__");
222222
} else {
223-
strcat(buildOptStr, " -D__SYMM_ROWMAJOR__ ");
223+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_ROWMAJOR__");
224224
}
225225
if ((kargs->pigFuncID == CLBLAS_SYMM_DIAGONAL) || (kargs->pigFuncID == CLBLAS_HEMM_DIAGONAL))
226226
{
227-
strcat(buildOptStr, " -D__SYMM_DIAGONAL__ ");
227+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_DIAGONAL__");
228228
}
229229
if (kargs->pigFuncID == CLBLAS_HEMM_DIAGONAL)
230230
{
231-
strcat(buildOptStr, " -D__HEMM__ ");
231+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__HEMM__");
232232
}
233233
break;
234234

235235
case CLBLAS_HERK:
236-
strcat( buildOptStr, " -DHERK");
236+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHERK");
237237
if(kargs->uplo == clblasLower)
238238
{
239-
strcat( buildOptStr, " -DHERK_LOWER_TRIANGLE");
239+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHERK_LOWER_TRIANGLE");
240240
}
241241
else if(kargs->uplo == clblasUpper)
242242
{
243-
strcat( buildOptStr, " -DHERK_UPPER_TRIANGLE");
243+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHERK_UPPER_TRIANGLE");
244244
}
245245
break;
246246

src/library/blas/gens/gemm_tail_cached.cpp

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -96,27 +96,27 @@ setBuildOpts(
9696
const CLBlasKargs *kargs = (const CLBlasKargs *)(&step->args);
9797
KernelExtraFlags kflags = step->extraFlags;
9898

99-
strcat(buildOptStr, " -DTAIL_RUN -DM_TAIL_PRESENT -DN_TAIL_PRESENT ");
99+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DTAIL_RUN -DM_TAIL_PRESENT -DN_TAIL_PRESENT");
100100
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
101101
{
102-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
102+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
103103
#ifdef DEBUG_GEMM_TAIL
104104
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");
105105
#endif
106106
}
107107

108108
if (isComplexType(kargs->dtype))
109109
{
110-
strcat(buildOptStr, " -DCOMPLEX ");
110+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCOMPLEX");
111111
}
112112

113113
if (kflags & KEXTRA_CONJUGATE_A)
114114
{
115-
strcat( buildOptStr, " -DCONJUGATE_A ");
116-
}
115+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCONJUGATE_A");
116+
}
117117
if (kflags & KEXTRA_CONJUGATE_B)
118118
{
119-
strcat( buildOptStr, " -DCONJUGATE_B ");
119+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DCONJUGATE_B");
120120
}
121121

122122

@@ -127,14 +127,14 @@ setBuildOpts(
127127
break;
128128

129129
case CLBLAS_HERK:
130-
strcat( buildOptStr, " -DHERK");
130+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHERK");
131131
if(kargs->uplo == clblasLower)
132132
{
133-
strcat( buildOptStr, " -DHERK_LOWER_TRIANGLE");
133+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHERK_LOWER_TRIANGLE");
134134
}
135135
else if(kargs->uplo == clblasUpper)
136136
{
137-
strcat( buildOptStr, " -DHERK_UPPER_TRIANGLE");
137+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DHERK_UPPER_TRIANGLE");
138138
}
139139
break;
140140

@@ -147,33 +147,34 @@ setBuildOpts(
147147
#endif
148148
if (kargs->side == clblasLeft)
149149
{
150-
strcat (buildOptStr, " -D__SYMM_LEFT__ ");
150+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_LEFT__");
151151
}
152152
if (kargs->side == clblasRight)
153153
{
154-
strcat (buildOptStr, " -D__SYMM_RIGHT__ ");
154+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_RIGHT__");
155155
}
156156
if (kargs->uplo == clblasLower)
157157
{
158-
strcat(buildOptStr, " -D__SYMM_LOWER__ ");
158+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_LOWER__");
159159
}
160160
if (kargs->uplo == clblasUpper)
161161
{
162-
strcat(buildOptStr, " -D__SYMM_UPPER__ ");
162+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_UPPER__");
163163
}
164+
// Define the order for Legacy sake.
164165
if (kargs->order == clblasColumnMajor)
165166
{
166-
strcat(buildOptStr, " -D__SYMM_COLMAJOR__ ");
167+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_COLMAJOR__");
167168
} else {
168-
strcat(buildOptStr, " -D__SYMM_ROWMAJOR__ ");
169+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_ROWMAJOR__");
169170
}
170-
if ((kargs->pigFuncID == CLBLAS_SYMM_DIAGONAL) || (kargs->pigFuncID == CLBLAS_HEMM_DIAGONAL))
171+
if ((kargs->pigFuncID == CLBLAS_SYMM_DIAGONAL) || (kargs->pigFuncID == CLBLAS_HEMM_DIAGONAL))
171172
{
172-
strcat(buildOptStr, " -D__SYMM_DIAGONAL__ ");
173+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__SYMM_DIAGONAL__");
173174
}
174175
if (kargs->pigFuncID == CLBLAS_HEMM_DIAGONAL)
175176
{
176-
strcat(buildOptStr, " -D__HEMM__ ");
177+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-D__HEMM__");
177178
}
178179
break;
179180

src/library/blas/gens/ger_lds.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ setBuildOpts(
137137
const CLBlasKargs *kargs = (const CLBlasKargs *)(&step->args);
138138
if ( kargs->dtype == TYPE_DOUBLE || kargs->dtype == TYPE_COMPLEX_DOUBLE)
139139
{
140-
strcat( buildOptStr, " -DDOUBLE_PRECISION ");
140+
addBuildOpt( buildOptStr, BUILD_OPTS_MAXLEN, "-DDOUBLE_PRECISION");
141141

142142
#ifdef DEBUG_GER
143143
printf("Setting build options ... Double... for DOUBLE PRECISION support\n");

0 commit comments

Comments
 (0)