Skip to content

Commit 5588eb0

Browse files
authored
[BLAS] Let iamax/iamin accept index_base argument to align to the spec (#635)
Signed-off-by: Jiang, Zhiwei <[email protected]>
1 parent f7a6f14 commit 5588eb0

26 files changed

+1072
-680
lines changed

include/oneapi/math/blas.hxx

+40-24
Original file line numberDiff line numberDiff line change
@@ -791,47 +791,55 @@ static inline void hpr2(sycl::queue& queue, uplo upper_lower, std::int64_t n,
791791
}
792792

793793
static inline void iamax(sycl::queue& queue, std::int64_t n, sycl::buffer<float, 1>& x,
794-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
795-
detail::iamax(get_device_id(queue), queue, n, x, incx, result);
794+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
795+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
796+
detail::iamax(get_device_id(queue), queue, n, x, incx, result, base);
796797
}
797798

798799
static inline void iamax(sycl::queue& queue, std::int64_t n, sycl::buffer<double, 1>& x,
799-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
800-
detail::iamax(get_device_id(queue), queue, n, x, incx, result);
800+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
801+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
802+
detail::iamax(get_device_id(queue), queue, n, x, incx, result, base);
801803
}
802804

803805
static inline void iamax(sycl::queue& queue, std::int64_t n,
804806
sycl::buffer<std::complex<float>, 1>& x, std::int64_t incx,
805-
sycl::buffer<std::int64_t, 1>& result) {
806-
detail::iamax(get_device_id(queue), queue, n, x, incx, result);
807+
sycl::buffer<std::int64_t, 1>& result,
808+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
809+
detail::iamax(get_device_id(queue), queue, n, x, incx, result, base);
807810
}
808811

809812
static inline void iamax(sycl::queue& queue, std::int64_t n,
810813
sycl::buffer<std::complex<double>, 1>& x, std::int64_t incx,
811-
sycl::buffer<std::int64_t, 1>& result) {
812-
detail::iamax(get_device_id(queue), queue, n, x, incx, result);
814+
sycl::buffer<std::int64_t, 1>& result,
815+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
816+
detail::iamax(get_device_id(queue), queue, n, x, incx, result, base);
813817
}
814818

815819
static inline void iamin(sycl::queue& queue, std::int64_t n, sycl::buffer<float, 1>& x,
816-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
817-
detail::iamin(get_device_id(queue), queue, n, x, incx, result);
820+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
821+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
822+
detail::iamin(get_device_id(queue), queue, n, x, incx, result, base);
818823
}
819824

820825
static inline void iamin(sycl::queue& queue, std::int64_t n, sycl::buffer<double, 1>& x,
821-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
822-
detail::iamin(get_device_id(queue), queue, n, x, incx, result);
826+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
827+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
828+
detail::iamin(get_device_id(queue), queue, n, x, incx, result, base);
823829
}
824830

825831
static inline void iamin(sycl::queue& queue, std::int64_t n,
826832
sycl::buffer<std::complex<float>, 1>& x, std::int64_t incx,
827-
sycl::buffer<std::int64_t, 1>& result) {
828-
detail::iamin(get_device_id(queue), queue, n, x, incx, result);
833+
sycl::buffer<std::int64_t, 1>& result,
834+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
835+
detail::iamin(get_device_id(queue), queue, n, x, incx, result, base);
829836
}
830837

831838
static inline void iamin(sycl::queue& queue, std::int64_t n,
832839
sycl::buffer<std::complex<double>, 1>& x, std::int64_t incx,
833-
sycl::buffer<std::int64_t, 1>& result) {
834-
detail::iamin(get_device_id(queue), queue, n, x, incx, result);
840+
sycl::buffer<std::int64_t, 1>& result,
841+
oneapi::math::index_base base = oneapi::math::index_base::zero) {
842+
detail::iamin(get_device_id(queue), queue, n, x, incx, result, base);
835843
}
836844

837845
static inline void nrm2(sycl::queue& queue, std::int64_t n, sycl::buffer<std::complex<float>, 1>& x,
@@ -2948,57 +2956,65 @@ static inline sycl::event hpr2(sycl::queue& queue, uplo upper_lower, std::int64_
29482956

29492957
static inline sycl::event iamax(sycl::queue& queue, std::int64_t n, const float* x,
29502958
std::int64_t incx, std::int64_t* result,
2959+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29512960
const std::vector<sycl::event>& dependencies = {}) {
2952-
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, dependencies);
2961+
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29532962
return done;
29542963
}
29552964

29562965
static inline sycl::event iamax(sycl::queue& queue, std::int64_t n, const double* x,
29572966
std::int64_t incx, std::int64_t* result,
2967+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29582968
const std::vector<sycl::event>& dependencies = {}) {
2959-
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, dependencies);
2969+
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29602970
return done;
29612971
}
29622972

29632973
static inline sycl::event iamax(sycl::queue& queue, std::int64_t n, const std::complex<float>* x,
29642974
std::int64_t incx, std::int64_t* result,
2975+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29652976
const std::vector<sycl::event>& dependencies = {}) {
2966-
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, dependencies);
2977+
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29672978
return done;
29682979
}
29692980

29702981
static inline sycl::event iamax(sycl::queue& queue, std::int64_t n, const std::complex<double>* x,
29712982
std::int64_t incx, std::int64_t* result,
2983+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29722984
const std::vector<sycl::event>& dependencies = {}) {
2973-
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, dependencies);
2985+
auto done = detail::iamax(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29742986
return done;
29752987
}
29762988

29772989
static inline sycl::event iamin(sycl::queue& queue, std::int64_t n, const float* x,
29782990
std::int64_t incx, std::int64_t* result,
2991+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29792992
const std::vector<sycl::event>& dependencies = {}) {
2980-
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, dependencies);
2993+
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29812994
return done;
29822995
}
29832996

29842997
static inline sycl::event iamin(sycl::queue& queue, std::int64_t n, const double* x,
29852998
std::int64_t incx, std::int64_t* result,
2999+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29863000
const std::vector<sycl::event>& dependencies = {}) {
2987-
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, dependencies);
3001+
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29883002
return done;
29893003
}
29903004

29913005
static inline sycl::event iamin(sycl::queue& queue, std::int64_t n, const std::complex<float>* x,
29923006
std::int64_t incx, std::int64_t* result,
3007+
oneapi::math::index_base base = oneapi::math::index_base::zero,
29933008
const std::vector<sycl::event>& dependencies = {}) {
2994-
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, dependencies);
3009+
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
29953010
return done;
29963011
}
29973012

29983013
static inline sycl::event iamin(sycl::queue& queue, std::int64_t n, const std::complex<double>* x,
29993014
std::int64_t incx, std::int64_t* result,
3015+
oneapi::math::index_base base = oneapi::math::index_base::zero,
30003016
const std::vector<sycl::event>& dependencies = {}) {
3001-
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, dependencies);
3017+
auto done = detail::iamin(get_device_id(queue), queue, n, x, incx, result, base, dependencies);
30023018
return done;
30033019
}
30043020

include/oneapi/math/blas/detail/armpl/blas_ct.hxx

+36-32
Original file line numberDiff line numberDiff line change
@@ -618,25 +618,27 @@ void hpr(backend_selector<backend::armpl> selector, uplo upper_lower, std::int64
618618
}
619619

620620
void iamin(backend_selector<backend::armpl> selector, std::int64_t n, sycl::buffer<float, 1>& x,
621-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
622-
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result);
621+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
622+
oneapi::math::index_base base) {
623+
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result, base);
623624
}
624625

625626
void iamin(backend_selector<backend::armpl> selector, std::int64_t n, sycl::buffer<double, 1>& x,
626-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
627-
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result);
627+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
628+
oneapi::math::index_base base) {
629+
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result, base);
628630
}
629631

630632
void iamin(backend_selector<backend::armpl> selector, std::int64_t n,
631633
sycl::buffer<std::complex<float>, 1>& x, std::int64_t incx,
632-
sycl::buffer<std::int64_t, 1>& result) {
633-
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result);
634+
sycl::buffer<std::int64_t, 1>& result, oneapi::math::index_base base) {
635+
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result, base);
634636
}
635637

636638
void iamin(backend_selector<backend::armpl> selector, std::int64_t n,
637639
sycl::buffer<std::complex<double>, 1>& x, std::int64_t incx,
638-
sycl::buffer<std::int64_t, 1>& result) {
639-
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result);
640+
sycl::buffer<std::int64_t, 1>& result, oneapi::math::index_base base) {
641+
oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result, base);
640642
}
641643

642644
void hpmv(backend_selector<backend::armpl> selector, uplo upper_lower, std::int64_t n,
@@ -1340,25 +1342,27 @@ void spr2(backend_selector<backend::armpl> selector, uplo upper_lower, std::int6
13401342
}
13411343

13421344
void iamax(backend_selector<backend::armpl> selector, std::int64_t n, sycl::buffer<float, 1>& x,
1343-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
1344-
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result);
1345+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
1346+
oneapi::math::index_base base) {
1347+
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result, base);
13451348
}
13461349

13471350
void iamax(backend_selector<backend::armpl> selector, std::int64_t n, sycl::buffer<double, 1>& x,
1348-
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result) {
1349-
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result);
1351+
std::int64_t incx, sycl::buffer<std::int64_t, 1>& result,
1352+
oneapi::math::index_base base) {
1353+
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result, base);
13501354
}
13511355

13521356
void iamax(backend_selector<backend::armpl> selector, std::int64_t n,
13531357
sycl::buffer<std::complex<float>, 1>& x, std::int64_t incx,
1354-
sycl::buffer<std::int64_t, 1>& result) {
1355-
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result);
1358+
sycl::buffer<std::int64_t, 1>& result, oneapi::math::index_base base) {
1359+
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result, base);
13561360
}
13571361

13581362
void iamax(backend_selector<backend::armpl> selector, std::int64_t n,
13591363
sycl::buffer<std::complex<double>, 1>& x, std::int64_t incx,
1360-
sycl::buffer<std::int64_t, 1>& result) {
1361-
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result);
1364+
sycl::buffer<std::int64_t, 1>& result, oneapi::math::index_base base) {
1365+
oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result, base);
13621366
}
13631367

13641368
void rotm(backend_selector<backend::armpl> selector, std::int64_t n, sycl::buffer<float, 1>& x,
@@ -2548,34 +2552,34 @@ sycl::event hpr(backend_selector<backend::armpl> selector, uplo upper_lower, std
25482552
}
25492553

25502554
sycl::event iamin(backend_selector<backend::armpl> selector, std::int64_t n, const float* x,
2551-
std::int64_t incx, std::int64_t* result,
2555+
std::int64_t incx, std::int64_t* result, oneapi::math::index_base base,
25522556
const std::vector<sycl::event>& dependencies) {
25532557
auto done = oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result,
2554-
dependencies);
2558+
base, dependencies);
25552559
return done;
25562560
}
25572561

25582562
sycl::event iamin(backend_selector<backend::armpl> selector, std::int64_t n, const double* x,
2559-
std::int64_t incx, std::int64_t* result,
2563+
std::int64_t incx, std::int64_t* result, oneapi::math::index_base base,
25602564
const std::vector<sycl::event>& dependencies) {
25612565
auto done = oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result,
2562-
dependencies);
2566+
base, dependencies);
25632567
return done;
25642568
}
25652569

25662570
sycl::event iamin(backend_selector<backend::armpl> selector, std::int64_t n,
25672571
const std::complex<float>* x, std::int64_t incx, std::int64_t* result,
2568-
const std::vector<sycl::event>& dependencies) {
2572+
oneapi::math::index_base base, const std::vector<sycl::event>& dependencies) {
25692573
auto done = oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result,
2570-
dependencies);
2574+
base, dependencies);
25712575
return done;
25722576
}
25732577

25742578
sycl::event iamin(backend_selector<backend::armpl> selector, std::int64_t n,
25752579
const std::complex<double>* x, std::int64_t incx, std::int64_t* result,
2576-
const std::vector<sycl::event>& dependencies) {
2580+
oneapi::math::index_base base, const std::vector<sycl::event>& dependencies) {
25772581
auto done = oneapi::math::blas::armpl::MAJOR::iamin(selector.get_queue(), n, x, incx, result,
2578-
dependencies);
2582+
base, dependencies);
25792583
return done;
25802584
}
25812585

@@ -3760,34 +3764,34 @@ sycl::event spr2(backend_selector<backend::armpl> selector, uplo upper_lower, st
37603764
}
37613765

37623766
sycl::event iamax(backend_selector<backend::armpl> selector, std::int64_t n, const float* x,
3763-
std::int64_t incx, std::int64_t* result,
3767+
std::int64_t incx, std::int64_t* result, oneapi::math::index_base base,
37643768
const std::vector<sycl::event>& dependencies) {
37653769
auto done = oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result,
3766-
dependencies);
3770+
base, dependencies);
37673771
return done;
37683772
}
37693773

37703774
sycl::event iamax(backend_selector<backend::armpl> selector, std::int64_t n, const double* x,
3771-
std::int64_t incx, std::int64_t* result,
3775+
std::int64_t incx, std::int64_t* result, oneapi::math::index_base base,
37723776
const std::vector<sycl::event>& dependencies) {
37733777
auto done = oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result,
3774-
dependencies);
3778+
base, dependencies);
37753779
return done;
37763780
}
37773781

37783782
sycl::event iamax(backend_selector<backend::armpl> selector, std::int64_t n,
37793783
const std::complex<float>* x, std::int64_t incx, std::int64_t* result,
3780-
const std::vector<sycl::event>& dependencies) {
3784+
oneapi::math::index_base base, const std::vector<sycl::event>& dependencies) {
37813785
auto done = oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result,
3782-
dependencies);
3786+
base, dependencies);
37833787
return done;
37843788
}
37853789

37863790
sycl::event iamax(backend_selector<backend::armpl> selector, std::int64_t n,
37873791
const std::complex<double>* x, std::int64_t incx, std::int64_t* result,
3788-
const std::vector<sycl::event>& dependencies) {
3792+
oneapi::math::index_base base, const std::vector<sycl::event>& dependencies) {
37893793
auto done = oneapi::math::blas::armpl::MAJOR::iamax(selector.get_queue(), n, x, incx, result,
3790-
dependencies);
3794+
base, dependencies);
37913795
return done;
37923796
}
37933797

0 commit comments

Comments
 (0)