Skip to content

Commit 082a9d2

Browse files
committed
Resolve symbol conflicts when building sbgemm and bgemm together
1 parent 59d0cf4 commit 082a9d2

File tree

4 files changed

+73
-20
lines changed

4 files changed

+73
-20
lines changed

common_param.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ typedef struct {
5252
#if BUILD_BFLOAT16_ONLY == 1
5353
int bgemm_p, bgemm_q, bgemm_r;
5454
int bgemm_unroll_m, bgemm_unroll_n, bgemm_unroll_mn;
55-
int sbgemm_align_k;
55+
int bgemm_align_k;
5656

5757
int (*bgemm_kernel )(BLASLONG, BLASLONG, BLASLONG, bfloat16, bfloat16 *, bfloat16 *, bfloat16 *, BLASLONG);
5858
int (*bgemm_beta )(BLASLONG, BLASLONG, BLASLONG, bfloat16, bfloat16 *, BLASLONG, bfloat16 *, BLASLONG, bfloat16 *, BLASLONG);
@@ -1245,12 +1245,12 @@ extern gotoblas_t *gotoblas;
12451245
#define HAVE_EX_L2 gotoblas -> exclusive_cache
12461246

12471247
#if (BUILD_BFLOAT16_ONLY==1)
1248-
#define SBGEMM_P gotoblas -> bgemm_p
1249-
#define SBGEMM_Q gotoblas -> bgemm_q
1250-
#define SBGEMM_R gotoblas -> bgemm_r
1251-
#define SBGEMM_UNROLL_M gotoblas -> bgemm_unroll_m
1252-
#define SBGEMM_UNROLL_N gotoblas -> bgemm_unroll_n
1253-
#define SBGEMM_UNROLL_MN gotoblas -> bgemm_unroll_mn
1248+
#define BGEMM_P gotoblas -> bgemm_p
1249+
#define BGEMM_Q gotoblas -> bgemm_q
1250+
#define BGEMM_R gotoblas -> bgemm_r
1251+
#define BGEMM_UNROLL_M gotoblas -> bgemm_unroll_m
1252+
#define BGEMM_UNROLL_N gotoblas -> bgemm_unroll_n
1253+
#define BGEMM_UNROLL_MN gotoblas -> bgemm_unroll_mn
12541254
#endif
12551255

12561256
#if (BUILD_BFLOAT16==1)

driver/level3/level3.c

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*********************************************************************/
22
/* Copyright 2009, 2010 The University of Texas at Austin. */
3+
/* Copyright (c) 2025, The OpenBLAS Project */
34
/* All rights reserved. */
45
/* */
56
/* Redistribution and use in source and binary forms, with or */
@@ -169,6 +170,22 @@
169170
#define STOP_RPCC(COUNTER)
170171
#endif
171172

173+
#if defined(HALF)
174+
#if defined(DYNAMIC_ARCH)
175+
#if defined(BUILD_BFLOAT16)
176+
#define HALF_DTYPE_ALIGN_K gotoblas->sbgemm_align_k
177+
#else
178+
#define HALF_DTYPE_ALIGN_K gotoblas->bgemm_align_k
179+
#endif
180+
#else
181+
#if defined(BUILD_BFLOAT16)
182+
#define HALF_DTYPE_ALIGN_K SBGEMM_ALIGN_K
183+
#else
184+
#define HALF_DTYPE_ALIGN_K BGEMM_ALIGN_K
185+
#endif
186+
#endif
187+
#endif
188+
172189
int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
173190
XFLOAT *sa, XFLOAT *sb, BLASLONG dummy){
174191
BLASLONG k, lda, ldb, ldc;
@@ -305,12 +322,9 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
305322
}
306323

307324
BLASLONG pad_min_l = min_l;
325+
308326
#if defined(HALF)
309-
#if defined(DYNAMIC_ARCH)
310-
pad_min_l = (min_l + gotoblas->sbgemm_align_k - 1) & ~(gotoblas->sbgemm_align_k-1);
311-
#else
312-
pad_min_l = (min_l + SBGEMM_ALIGN_K - 1) & ~(SBGEMM_ALIGN_K - 1);;
313-
#endif
327+
pad_min_l = (min_l + HALF_DTYPE_ALIGN_K - 1) & ~(HALF_DTYPE_ALIGN_K - 1);
314328
#endif
315329

316330
/* First, we have to move data A to L2 cache */

driver/level3/level3_thread.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*********************************************************************/
22
/* Copyright 2009, 2010 The University of Texas at Austin. */
3-
/* Copyright 2023 The OpenBLAS Project. */
3+
/* Copyright 2023, 2025 The OpenBLAS Project. */
44
/* All rights reserved. */
55
/* */
66
/* Redistribution and use in source and binary forms, with or */
@@ -216,6 +216,22 @@ typedef struct {
216216
#define STOP_RPCC(COUNTER)
217217
#endif
218218

219+
#if defined(HALF)
220+
#if defined(DYNAMIC_ARCH)
221+
#if defined(BUILD_BFLOAT16)
222+
#define HALF_DTYPE_ALIGN_K gotoblas->sbgemm_align_k
223+
#else
224+
#define HALF_DTYPE_ALIGN_K gotoblas->bgemm_align_k
225+
#endif
226+
#else
227+
#if defined(BUILD_BFLOAT16)
228+
#define HALF_DTYPE_ALIGN_K SBGEMM_ALIGN_K
229+
#else
230+
#define HALF_DTYPE_ALIGN_K BGEMM_ALIGN_K
231+
#endif
232+
#endif
233+
#endif
234+
219235
static int inner_thread(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, IFLOAT *sa, IFLOAT *sb, BLASLONG mypos){
220236

221237
IFLOAT *buffer[DIVIDE_RATE];
@@ -325,11 +341,7 @@ static int inner_thread(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
325341
BLASLONG pad_min_l = min_l;
326342

327343
#if defined(HALF)
328-
#if defined(DYNAMIC_ARCH)
329-
pad_min_l = (min_l + gotoblas->sbgemm_align_k - 1) & ~(gotoblas->sbgemm_align_k-1);
330-
#else
331-
pad_min_l = (min_l + SBGEMM_ALIGN_K - 1) & ~(SBGEMM_ALIGN_K - 1);;
332-
#endif
344+
pad_min_l = (min_l + HALF_DTYPE_ALIGN_K - 1) & ~(HALF_DTYPE_ALIGN_K - 1);
333345
#endif
334346

335347
/* Determine step size in m

kernel/Makefile.L3

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
###############################################################################
2+
# Copyright (c) 2025, The OpenBLAS Project
3+
# All rights reserved.
4+
# Redistribution and use in source and binary forms, with or without
5+
# modification, are permitted provided that the following conditions are
6+
# met:
7+
# 1. Redistributions of source code must retain the above copyright
8+
# notice, this list of conditions and the following disclaimer.
9+
# 2. Redistributions in binary form must reproduce the above copyright
10+
# notice, this list of conditions and the following disclaimer in
11+
# the documentation and/or other materials provided with the
12+
# distribution.
13+
# 3. Neither the name of the OpenBLAS project nor the names of
14+
# its contributors may be used to endorse or promote products
15+
# derived from this software without specific prior written permission.
16+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
# ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
20+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
# POSSIBILITY OF SUCH DAMAGE.
27+
###############################################################################
128
USE_GEMM3M = 0
229
OS := $(shell uname)
330

@@ -660,15 +687,15 @@ $(KDIR)$(SBGEMMONCOPYOBJ) : $(KERNELDIR)/$(SBGEMMONCOPY)
660687
$(KDIR)$(SBGEMMOTCOPYOBJ) : $(KERNELDIR)/$(SBGEMMOTCOPY)
661688
$(CC) $(CFLAGS) -c -DBFLOAT16 -UDOUBLE -UCOMPLEX $< -o $@
662689

663-
ifneq ($(SBGEMM_UNROLL_M), $(SBGEMM_UNROLL_N))
690+
#ifneq ($(SBGEMM_UNROLL_M), $(SBGEMM_UNROLL_N))
664691

665692
$(KDIR)$(SBGEMMINCOPYOBJ) : $(KERNELDIR)/$(SBGEMMINCOPY)
666693
$(CC) $(CFLAGS) -c -DBFLOAT16 -UDOUBLE -UCOMPLEX $< -o $@
667694

668695
$(KDIR)$(SBGEMMITCOPYOBJ) : $(KERNELDIR)/$(SBGEMMITCOPY)
669696
$(CC) $(CFLAGS) -c -DBFLOAT16 -UDOUBLE -UCOMPLEX $< -o $@
670697

671-
endif
698+
#endif
672699
endif
673700

674701
$(KDIR)$(SGEMMONCOPYOBJ) : $(KERNELDIR)/$(SGEMMONCOPY)

0 commit comments

Comments
 (0)