Compare commits
711
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
632ef87437 | ||
|
|
b47183a713 | ||
|
|
4919204154 | ||
|
|
ed0bb8903c | ||
|
|
77affe1f15 | ||
|
|
0944e9e7c1 | ||
|
|
146beeda59 | ||
|
|
6d36cf6b9b | ||
|
|
0f74330773 | ||
|
|
4e2ab1f3f3 | ||
|
|
778224cee2 | ||
|
|
459624cec2 | ||
|
|
12e3e23654 | ||
|
|
6d59c0de34 | ||
|
|
2ed3ca3940 | ||
|
|
0fb0441220 | ||
|
|
cc3fc1e319 | ||
|
|
ffe8b242c7 | ||
|
|
d9f362aae8 | ||
|
|
f2ba6a2213 | ||
|
|
5bd5547bc9 | ||
|
|
b08df585f6 | ||
|
|
377753094d | ||
|
|
7779b52f99 | ||
|
|
d7d350317b | ||
|
|
0b663a112e | ||
|
|
86c65a5a0c | ||
|
|
98425fe1bc | ||
|
|
e7083596c9 | ||
|
|
e0cabe9b59 | ||
|
|
b83ffe61f3 | ||
|
|
2d4212947e | ||
|
|
7313f3ff6e | ||
|
|
17d99746fe | ||
|
|
40fea772be | ||
|
|
a79dce7976 | ||
|
|
d43c87d317 | ||
|
|
0e79f73488 | ||
|
|
29de61484d | ||
|
|
9884c480ea | ||
|
|
f285f47ab1 | ||
|
|
305bd67178 | ||
|
|
f8830b66e3 | ||
|
|
81dd859785 | ||
|
|
3ead57fd2b | ||
|
|
c073f087b4 | ||
|
|
9724481b59 | ||
|
|
fc6f4a3b46 | ||
|
|
8f2a8fe318 | ||
|
|
404f288a9d | ||
|
|
d793be85b4 | ||
|
|
8d73a856fb | ||
|
|
4ae369ac0a | ||
|
|
1ed99815fa | ||
|
|
4e923d1ba6 | ||
|
|
e24e0da779 | ||
|
|
39b56e9a05 | ||
|
|
cf1b7c1ad9 | ||
|
|
78f03216de | ||
|
|
f2dc74796f | ||
|
|
2f915c5e23 | ||
|
|
5aa2c41e8d | ||
|
|
df6032c375 | ||
|
|
2b69faff24 | ||
|
|
23f832c464 | ||
|
|
560caa56e6 | ||
|
|
05518e0f11 | ||
|
|
7fdb527565 | ||
|
|
b8d6a7bef8 | ||
|
|
9ff46235ea | ||
|
|
330063dec8 | ||
|
|
2f24d51c5d | ||
|
|
b22e3244e4 | ||
|
|
8554a7e586 | ||
|
|
4d35c91404 | ||
|
|
a9a238157b | ||
|
|
4a4cd8fbb6 | ||
|
|
446c436e10 | ||
|
|
a6923005ec | ||
|
|
75b93b4465 | ||
|
|
761ebe91ab | ||
|
|
ed2ba87203 | ||
|
|
cb8199dda2 | ||
|
|
ec6eb7922a | ||
|
|
ad7a417489 | ||
|
|
1f83c8be22 | ||
|
|
284bcbae13 | ||
|
|
c56410d60f | ||
|
|
b14b82ce17 | ||
|
|
721f5da709 | ||
|
|
0041b780ed | ||
|
|
28da957ee1 | ||
|
|
2bb30e03dd | ||
|
|
4ea40779bd | ||
|
|
210b6a2962 | ||
|
|
fbe55b25c9 | ||
|
|
8c7c04b671 | ||
|
|
b8d83a72f4 | ||
|
|
95120da710 | ||
|
|
0c5fc4552b | ||
|
|
64ad27325a | ||
|
|
6e5c5255b0 | ||
|
|
0392a36007 | ||
|
|
e24af350c0 | ||
|
|
dacfb92ec3 | ||
|
|
b6ee68da06 | ||
|
|
acfe406eb7 | ||
|
|
914f3ae6a8 | ||
|
|
d591836293 | ||
|
|
d7dc043d61 | ||
|
|
880a4a596e | ||
|
|
99f7c78e79 | ||
|
|
61f5f03311 | ||
|
|
dddd08507e | ||
|
|
a7b6ce7ae0 | ||
|
|
21d02cf01e | ||
|
|
5c57734ac6 | ||
|
|
ecc04e57cf | ||
|
|
c3db185d6c | ||
|
|
80920a3242 | ||
|
|
2621df71d5 | ||
|
|
2a921cfe85 | ||
|
|
76e12db33b | ||
|
|
28e75a8530 | ||
|
|
4230fe472e | ||
|
|
e7363c16c1 | ||
|
|
842189bf3f | ||
|
|
e17e958a09 | ||
|
|
e231f4bb89 | ||
|
|
876310b12c | ||
|
|
c6aeca0365 | ||
|
|
181aadf226 | ||
|
|
b080247a21 | ||
|
|
b6ad3e2079 | ||
|
|
d16316e942 | ||
|
|
1b3358b3c5 | ||
|
|
4c78593874 | ||
|
|
018891aa98 | ||
|
|
8766886cfc | ||
|
|
15a14842a1 | ||
|
|
0ddb20ffea | ||
|
|
a543bd5d07 | ||
|
|
8d439717c5 | ||
|
|
0d6d459161 | ||
|
|
2a9e09faad | ||
|
|
52f0572564 | ||
|
|
c3de327dd5 | ||
|
|
251169b710 | ||
|
|
cf8a045b0e | ||
|
|
b6df159a67 | ||
|
|
8c1535b8d9 | ||
|
|
39cdbe6a3c | ||
|
|
63ad298a67 | ||
|
|
1c6f5f4efd | ||
|
|
efab2a2fde | ||
|
|
0b54dd1154 | ||
|
|
d496ab17c2 | ||
|
|
4ab4f1eae9 | ||
|
|
96d60aa6a8 | ||
|
|
0d928ca275 | ||
|
|
544afb15d6 | ||
|
|
f959027a06 | ||
|
|
1b64851291 | ||
|
|
43f18d82f5 | ||
|
|
837c5f67d3 | ||
|
|
6421c17643 | ||
|
|
2f21ad9282 | ||
|
|
e21bffc882 | ||
|
|
c7d1f1381c | ||
|
|
7a07c8e1f4 | ||
|
|
14d78d31c8 | ||
|
|
e3b9b82636 | ||
|
|
3f55cbce38 | ||
|
|
a7d62fe5de | ||
|
|
c604fcf79c | ||
|
|
59907029f6 | ||
|
|
e0166008be | ||
|
|
45e68d2240 | ||
|
|
c13a003e40 | ||
|
|
07690084bf | ||
|
|
55d6e6b98c | ||
|
|
bf7f06d9ac | ||
|
|
739b2f084c | ||
|
|
9ce1d6ff2a | ||
|
|
15351019ea | ||
|
|
dd69b9d0ce | ||
|
|
cefdaed87c | ||
|
|
43f9441317 | ||
|
|
53b14986de | ||
|
|
3e48730742 | ||
|
|
dc3aa2cbd9 | ||
|
|
aade7ec2ff | ||
|
|
2c6bf39e4e | ||
|
|
b338322e9a | ||
|
|
6604a7277c | ||
|
|
75b8a2ce93 | ||
|
|
b28cdccd2d | ||
|
|
036e835019 | ||
|
|
fd88cac200 | ||
|
|
87aac59e87 | ||
|
|
1e14cc90f8 | ||
|
|
136a714687 | ||
|
|
a5dcb2a8a8 | ||
|
|
41aad1107a | ||
|
|
873f005957 | ||
|
|
6b1d101317 | ||
|
|
cdde6e8c4d | ||
|
|
5e517085c5 | ||
|
|
65382d22d4 | ||
|
|
5d7868f487 | ||
|
|
113410db3e | ||
|
|
b668c9a376 | ||
|
|
65b51b0c12 | ||
|
|
269e1cd505 | ||
|
|
0f68da835c | ||
|
|
f8674a7be8 | ||
|
|
992a536238 | ||
|
|
6720959694 | ||
|
|
477131d547 | ||
|
|
03cfefcdcb | ||
|
|
8ac41809cf | ||
|
|
e4891bc055 | ||
|
|
7a24cf7a6a | ||
|
|
b5fa89f351 | ||
|
|
066e9076c3 | ||
|
|
d9788925a9 | ||
|
|
97abc61bfc | ||
|
|
d093ab90e9 | ||
|
|
ed8f1198b2 | ||
|
|
f07e6a3d0d | ||
|
|
490721cbd9 | ||
|
|
5daa61827a | ||
|
|
cd4786dd78 | ||
|
|
39526d88c9 | ||
|
|
99bb32ae59 | ||
|
|
29703e52ad | ||
|
|
d7e007e0fb | ||
|
|
8da645954b | ||
|
|
6a04925804 | ||
|
|
b2ba228de5 | ||
|
|
992ea2dab5 | ||
|
|
d6e64e8032 | ||
|
|
cfdaa69b9f | ||
|
|
4999e881a5 | ||
|
|
e4228c3255 | ||
|
|
b8949d1663 | ||
|
|
2707282e8c | ||
|
|
e127edeb5e | ||
|
|
a3620c264a | ||
|
|
7c991951a5 | ||
|
|
48c927bd1f | ||
|
|
06d553d0b1 | ||
|
|
6fdc8db640 | ||
|
|
95cae64181 | ||
|
|
18b41f3c4d | ||
|
|
a33e238b35 | ||
|
|
8dcf13a87e | ||
|
|
e7b4517435 | ||
|
|
788d544f3a | ||
|
|
8af8d8f4b6 | ||
|
|
baa253650a | ||
|
|
0e163c9db2 | ||
|
|
a8b8136114 | ||
|
|
0723136260 | ||
|
|
e4e3ad2430 | ||
|
|
945f4352d3 | ||
|
|
5282a38239 | ||
|
|
34f66e5004 | ||
|
|
57da6f5902 | ||
|
|
71e999bc9a | ||
|
|
45199ce655 | ||
|
|
80d7922240 | ||
|
|
2b11a16f56 | ||
|
|
09fd1da6fa | ||
|
|
a11b444d67 | ||
|
|
395f8b347f | ||
|
|
f82cf88caa | ||
|
|
de54968e16 | ||
|
|
27b0d441ad | ||
|
|
1b538d7fd1 | ||
|
|
d560f6d74f | ||
|
|
a0febbbc8d | ||
|
|
2497041827 | ||
|
|
6468bcbdad | ||
|
|
c61f95c8d3 | ||
|
|
a2f9fc83df | ||
|
|
a5d477f195 | ||
|
|
36365a602e | ||
|
|
130102e661 | ||
|
|
3781e2c15d | ||
|
|
edd8ab196d | ||
|
|
aa8b19de74 | ||
|
|
8cde36c9b8 | ||
|
|
d49cd021dd | ||
|
|
9925b29db5 | ||
|
|
35a841fd49 | ||
|
|
ab27636deb | ||
|
|
882526a408 | ||
|
|
170da5f679 | ||
|
|
ac394175e4 | ||
|
|
cc02866ef1 | ||
|
|
022b1c6a03 | ||
|
|
6cd5516da2 | ||
|
|
baa8c5d0b9 | ||
|
|
60d3fbea46 | ||
|
|
f3f5fd9116 | ||
|
|
db20661747 | ||
|
|
78f06538c7 | ||
|
|
a55df7c0c6 | ||
|
|
a45da9e756 | ||
|
|
e70a7a735f | ||
|
|
5aa157c2cf | ||
|
|
e97eb66c29 | ||
|
|
58846317d9 | ||
|
|
8f0b0333ba | ||
|
|
448622eeea | ||
|
|
45bf57426a | ||
|
|
e097d0b32c | ||
|
|
1a2386b437 | ||
|
|
68a988c441 | ||
|
|
ac7fa5c7d3 | ||
|
|
a8c41f73ed | ||
|
|
34232eb5f4 | ||
|
|
aedbcbc5a5 | ||
|
|
e717107ba6 | ||
|
|
8e6088de89 | ||
|
|
1d7cbce8ba | ||
|
|
aea58b2b91 | ||
|
|
71f2260186 | ||
|
|
2d75a67d89 | ||
|
|
a2261f9e52 | ||
|
|
43f0a90e1b | ||
|
|
0f51e2d22f | ||
|
|
a782e10a22 | ||
|
|
66d041d75f | ||
|
|
6265056f19 | ||
|
|
a22ee97671 | ||
|
|
4ca72cb7a4 | ||
|
|
0d820b8597 | ||
|
|
5010c0abb8 | ||
|
|
c0c2dadbd9 | ||
|
|
9cc2702c0f | ||
|
|
fa597c2191 | ||
|
|
fd89e78ff3 | ||
|
|
dd3ba971bc | ||
|
|
b997290389 | ||
|
|
3f6241b8db | ||
|
|
cd395c801a | ||
|
|
7370b520d2 | ||
|
|
132f2a3ebd | ||
|
|
71db152f80 | ||
|
|
ac015fab8c | ||
|
|
100988fddd | ||
|
|
3cdf5dcf0b | ||
|
|
753604cfe2 | ||
|
|
56b08939f5 | ||
|
|
e202bcb942 | ||
|
|
72ebe7b777 | ||
|
|
68b4f228c0 | ||
|
|
1dd3ec9f1f | ||
|
|
854479839b | ||
|
|
4ba480e436 | ||
|
|
562aeed4a2 | ||
|
|
faa10e60e4 | ||
|
|
5cc9ff49f5 | ||
|
|
caa18db35f | ||
|
|
c5cd266fff | ||
|
|
9e9c5a541f | ||
|
|
2a859d5fc4 | ||
|
|
ea007b5c03 | ||
|
|
788a2dfec4 | ||
|
|
9971940f04 | ||
|
|
6dd2948a2b | ||
|
|
358d3676d0 | ||
|
|
fb4e77d379 | ||
|
|
6409343512 | ||
|
|
aae8526e3a | ||
|
|
a36e22cbb2 | ||
|
|
1afb4c9ba1 | ||
|
|
6d648c6b4d | ||
|
|
648a53b5cb | ||
|
|
7fdd58a7d6 | ||
|
|
aae00921a9 | ||
|
|
cfeb270288 | ||
|
|
9f6c07c5a8 | ||
|
|
8f2b1e8c7c | ||
|
|
a08b1aa853 | ||
|
|
5da71f5c5b | ||
|
|
afcba13127 | ||
|
|
08c8c1051f | ||
|
|
3ae1586d3f | ||
|
|
5135d5c96c | ||
|
|
ea2a52d014 | ||
|
|
298d53c061 | ||
|
|
f986fd3322 | ||
|
|
46aa158dcc | ||
|
|
6773c85b16 | ||
|
|
2d9cbfc9e9 | ||
|
|
7ac17f4b6b | ||
|
|
cf627715d9 | ||
|
|
7126fcf40c | ||
|
|
18e2fe9fa4 | ||
|
|
9bdf051b96 | ||
|
|
ef20ea1644 | ||
|
|
7c7c65e692 | ||
|
|
9363452742 | ||
|
|
7aa79fbdff | ||
|
|
ede136ee4e | ||
|
|
a033631ee8 | ||
|
|
faf7ddbbea | ||
|
|
94f85eb6b1 | ||
|
|
7e3877f263 | ||
|
|
901c214a9b | ||
|
|
4850f86e3d | ||
|
|
d1df5928ae | ||
|
|
16a5ea5b4c | ||
|
|
7006a422b6 | ||
|
|
1145c75a96 | ||
|
|
8a767975b0 | ||
|
|
7a08010406 | ||
|
|
831b822b94 | ||
|
|
3863a7778d | ||
|
|
6a23c36313 | ||
|
|
91f97c667e | ||
|
|
7a2b8b5aa6 | ||
|
|
6731dac68b | ||
|
|
5b22140dfc | ||
|
|
601ff0ef2a | ||
|
|
1bd74ad3d1 | ||
|
|
1f2ae720af | ||
|
|
804a77cb1a | ||
|
|
cc84d9cccd | ||
|
|
e82de18f9f | ||
|
|
dc8fcad1ea | ||
|
|
69668d1441 | ||
|
|
774924e03b | ||
|
|
70a5a53747 | ||
|
|
fda55ad259 | ||
|
|
f3f718b228 | ||
|
|
6506d703c9 | ||
|
|
029a05fa84 | ||
|
|
55c72a934f | ||
|
|
26c4eb65d1 | ||
|
|
3dc0ba50e2 | ||
|
|
b528b9bbe2 | ||
|
|
a47b45d4eb | ||
|
|
693e22f1f8 | ||
|
|
125d79c02b | ||
|
|
1877075414 | ||
|
|
9cb7d3932f | ||
|
|
c32eefd87f | ||
|
|
beed554ae5 | ||
|
|
a4aae76382 | ||
|
|
d4d02fee71 | ||
|
|
3da0ff7bc2 | ||
|
|
e8ad16cad1 | ||
|
|
627153fcdb | ||
|
|
1dc25c14cd | ||
|
|
fc9d7c7fe3 | ||
|
|
9d58b8d64e | ||
|
|
cd276c2c09 | ||
|
|
d7aeae8933 | ||
|
|
2fd0e2416f | ||
|
|
45e5426e1c | ||
|
|
373fa9da05 | ||
|
|
7b7aaac822 | ||
|
|
7324f370bf | ||
|
|
8bc50c45ac | ||
|
|
3cde598ea2 | ||
|
|
88705a9328 | ||
|
|
416008431f | ||
|
|
bd3cd916a5 | ||
|
|
2f6a673980 | ||
|
|
8e57c8667d | ||
|
|
525070fdcd | ||
|
|
0dceb8313e | ||
|
|
08a67c87e4 | ||
|
|
f90b0d5bc5 | ||
|
|
d394815eb2 | ||
|
|
3b23194778 | ||
|
|
619c22a14a | ||
|
|
c8dbfd74e2 | ||
|
|
6419432e7d | ||
|
|
a8ac7c91fc | ||
|
|
e2174b31c1 | ||
|
|
4e5c4bf567 | ||
|
|
33c14c66c7 | ||
|
|
703710763d | ||
|
|
54efe8ae71 | ||
|
|
57765364fc | ||
|
|
43aa35c2ef | ||
|
|
1ecfee24b3 | ||
|
|
75791e4d0a | ||
|
|
b4dececea7 | ||
|
|
fd09633cdf | ||
|
|
d4824562d9 | ||
|
|
a8974e0f7a | ||
|
|
a3cd2eeaa7 | ||
|
|
65ae31125f | ||
|
|
beb4ab7bf6 | ||
|
|
f2c5129b40 | ||
|
|
5fa0aec3cf | ||
|
|
94b4c6c47c | ||
|
|
10cf63eea4 | ||
|
|
0a3e061977 | ||
|
|
2347cdd77f | ||
|
|
7367af6649 | ||
|
|
feca8f994d | ||
|
|
9019f9b6ff | ||
|
|
0b3b486606 | ||
|
|
05ecfc6d47 | ||
|
|
a90ffae6b2 | ||
|
|
a8469771b5 | ||
|
|
662d80bf37 | ||
|
|
91f83f00b9 | ||
|
|
0a74cb6dcc | ||
|
|
ca4d867cbb | ||
|
|
3c553ef705 | ||
|
|
7aa181e819 | ||
|
|
c696bdcfa8 | ||
|
|
62bcfb0dc9 | ||
|
|
a8ffcea555 | ||
|
|
b0a0364be7 | ||
|
|
dbad3e1e19 | ||
|
|
2bbd11129c | ||
|
|
81bf61b118 | ||
|
|
c7356182f4 | ||
|
|
70d1c2f7b2 | ||
|
|
07e7594ffe | ||
|
|
e447f2c7ce | ||
|
|
ded9a96920 | ||
|
|
c1bb49dc51 | ||
|
|
54b939e4e3 | ||
|
|
d270dcb123 | ||
|
|
59cfea0859 | ||
|
|
fd862d43b6 | ||
|
|
74486799bb | ||
|
|
9a46ffba36 | ||
|
|
775f467be6 | ||
|
|
41dbca901e | ||
|
|
c87e4fca72 | ||
|
|
02dc625d42 | ||
|
|
6f0dfd5276 | ||
|
|
b8bb6d08f7 | ||
|
|
2a5d33a95d | ||
|
|
b77cd0ae06 | ||
|
|
4991de5f3e | ||
|
|
fe23eadd17 | ||
|
|
ecca5e480d | ||
|
|
2847354ffb | ||
|
|
5f4a5b323d | ||
|
|
3a3903a49e | ||
|
|
822b873c7c | ||
|
|
330abcd5a9 | ||
|
|
7073b680ee | ||
|
|
1d15733ff5 | ||
|
|
70faa9f19d | ||
|
|
c59578f314 | ||
|
|
d9786d387c | ||
|
|
b9da7dbd24 | ||
|
|
172f41c818 | ||
|
|
94e053ac10 | ||
|
|
646d0c9fee | ||
|
|
2c80f8c974 | ||
|
|
0ea23484c6 | ||
|
|
1aea1d6237 | ||
|
|
6a5d2142f4 | ||
|
|
f9f8e94a14 | ||
|
|
9a0f76a0a1 | ||
|
|
75a99605af | ||
|
|
9d9fcc1881 | ||
|
|
e926bb0523 | ||
|
|
e875a9cdd0 | ||
|
|
fb45e7da89 | ||
|
|
e41cb1ad7a | ||
|
|
dc32a8a90f | ||
|
|
a04ea2b2c4 | ||
|
|
f272216ae3 | ||
|
|
0a4d6b2e11 | ||
|
|
cc1b5794a0 | ||
|
|
22b7950baa | ||
|
|
3b1aef12c7 | ||
|
|
9b3cc7835b | ||
|
|
bef5f1c6e2 | ||
|
|
3bbd755ba7 | ||
|
|
47be0d8a52 | ||
|
|
93515c2f7a | ||
|
|
7dde52d5d2 | ||
|
|
c6e4d17819 | ||
|
|
b9ba9be508 | ||
|
|
d27e98c97a | ||
|
|
429d23f420 | ||
|
|
3f2338ba85 | ||
|
|
62dcdca823 | ||
|
|
eaeaf95e23 | ||
|
|
f1f36c02b9 | ||
|
|
9816062aaf | ||
|
|
664f17655c | ||
|
|
aec6170a8b | ||
|
|
daa3215fb4 | ||
|
|
66cc9f043d | ||
|
|
cc74393520 | ||
|
|
4bbb9fefc0 | ||
|
|
e48625414f | ||
|
|
844939a9fb | ||
|
|
f085c70784 | ||
|
|
391cbf8584 | ||
|
|
6e89813300 | ||
|
|
37e189c85d | ||
|
|
6dad37ff8d | ||
|
|
004cf0d3d0 | ||
|
|
1243314201 | ||
|
|
edad2a8b2f | ||
|
|
55d7dd89ae | ||
|
|
e19e140619 | ||
|
|
a03cd30185 | ||
|
|
904f9d60b0 | ||
|
|
d69be17b6f | ||
|
|
ff5dc3ebc1 | ||
|
|
a5d0f89ea4 | ||
|
|
af63f2a1aa | ||
|
|
4342764c23 | ||
|
|
d9bb8f369f | ||
|
|
f5f789fc52 | ||
|
|
605b1287e3 | ||
|
|
d26960a21e | ||
|
|
16211b7170 | ||
|
|
0f9f6e4be5 | ||
|
|
3ebfc0ef65 | ||
|
|
0315003d1f | ||
|
|
75511cb67c | ||
|
|
b8dbc4a1fc | ||
|
|
e6eba9fa21 | ||
|
|
2671786e61 | ||
|
|
3c188e4c12 | ||
|
|
7086a1b075 | ||
|
|
f6d4fe703b | ||
|
|
1f1fcd4927 | ||
|
|
e3ce4623c2 | ||
|
|
86971646ed | ||
|
|
8fc0004024 | ||
|
|
c114ca5247 | ||
|
|
b8697b3448 | ||
|
|
d511552e64 | ||
|
|
821242ed9d | ||
|
|
8cecf899e2 | ||
|
|
3f1eac4ba0 | ||
|
|
fd1c5ca01a | ||
|
|
52178f70c7 | ||
|
|
f88aa7def7 | ||
|
|
a24cca9576 | ||
|
|
7eab365219 | ||
|
|
983fca52d5 | ||
|
|
6137054da3 | ||
|
|
b227de9429 | ||
|
|
99c120916a | ||
|
|
1b6fc34f0c | ||
|
|
51e904df27 | ||
|
|
8b9b3f0f5e | ||
|
|
500e32818a | ||
|
|
f6d5eb7af9 | ||
|
|
9d3ae22b28 | ||
|
|
494a3f735f | ||
|
|
496af0d8bb | ||
|
|
1e48eca408 | ||
|
|
ebf4cd1c6e | ||
|
|
faa06bd759 | ||
|
|
81d1029950 | ||
|
|
aa6a59a32e | ||
|
|
4956446ca2 | ||
|
|
a89142fd5d | ||
|
|
1bb72b223d | ||
|
|
afcf70dad9 | ||
|
|
c9185e91ad | ||
|
|
0dd501d794 | ||
|
|
6bf687b2ef | ||
|
|
3f6e928d34 | ||
|
|
7d4a479a29 | ||
|
|
f0d142c4dd | ||
|
|
a8a00bbf4f | ||
|
|
1e48686df8 | ||
|
|
b7601ea92f | ||
|
|
8f5e49556f | ||
|
|
d7b13fec90 | ||
|
|
d832ee5086 | ||
|
|
477dd40f07 | ||
|
|
79d9fe39c2 | ||
|
|
f927b9448a | ||
|
|
010f24f961 | ||
|
|
b0ee407943 | ||
|
|
eb9bbcc299 | ||
|
|
fda433f25a | ||
|
|
9c16449dfd | ||
|
|
6d6af1dee5 | ||
|
|
376d3a138f | ||
|
|
548a9f3eaa | ||
|
|
ea44d63ad7 | ||
|
|
a5eeb2bb08 | ||
|
|
fc243a36e8 | ||
|
|
3c5cea0ca9 | ||
|
|
c4d1ab81c6 | ||
|
|
5d13317c8f | ||
|
|
d0c4d08637 | ||
|
|
1353767996 | ||
|
|
da494a58da | ||
|
|
b53e015473 | ||
|
|
73f34751fd | ||
|
|
be7da1f111 | ||
|
|
4026d7ba7c | ||
|
|
1607a49cb9 | ||
|
|
7414e363f0 |
+122
-119
@@ -1,6 +1,6 @@
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-monterey-xcode:latest
|
||||
|
||||
#macos_instance:
|
||||
# image: ghcr.io/cirruslabs/macos-monterey-xcode:latest
|
||||
#
|
||||
#task:
|
||||
# name: AppleM1/LLVM
|
||||
# compile_script:
|
||||
@@ -9,7 +9,7 @@ macos_instance:
|
||||
# - export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
# - export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
# - make TARGET=VORTEX USE_OPENMP=1 CC=clang
|
||||
|
||||
#
|
||||
#task:
|
||||
# name: AppleM1/LLVM/ILP64
|
||||
# compile_script:
|
||||
@@ -18,7 +18,7 @@ macos_instance:
|
||||
# - export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
# - export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
# - make TARGET=VORTEX USE_OPENMP=1 CC=clang INTERFACE64=1
|
||||
|
||||
#
|
||||
#task:
|
||||
# name: AppleM1/LLVM/CMAKE
|
||||
# compile_script:
|
||||
@@ -30,7 +30,7 @@ macos_instance:
|
||||
# - cd build
|
||||
# - cmake -DTARGET=VORTEX -DCMAKE_C_COMPILER=clang -DBUILD_SHARED_LIBS=ON ..
|
||||
# - make -j 4
|
||||
|
||||
#
|
||||
#task:
|
||||
# name: AppleM1/GCC/MAKE/OPENMP
|
||||
# compile_script:
|
||||
@@ -39,122 +39,125 @@ macos_instance:
|
||||
# - export LDFLAGS="-L/opt/homebrew/lib"
|
||||
# - export CPPFLAGS="-I/opt/homebrew/include"
|
||||
# - make CC=gcc-11 FC=gfortran-11 USE_OPENMP=1
|
||||
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-sonoma-xcode:latest
|
||||
task:
|
||||
name: AppleM1/LLVM x86_64 xbuild
|
||||
compile_script:
|
||||
- #brew install llvm
|
||||
- export #PATH=/opt/homebrew/opt/llvm/bin:$PATH
|
||||
- export #LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
- export #CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
- export ARCHS="i386 x86_64"
|
||||
- export ARCHS_STANDARD="i386 x86_64"
|
||||
- export ARCHS_STANDARD_32_64_BIT="i386 x86_64"
|
||||
- export ARCHS_STANDARD_64_BIT=x86_64
|
||||
- export ARCHS_STANDARD_INCLUDING_64_BIT="i386 x86_64"
|
||||
- export ARCHS_UNIVERSAL_IPHONE_OS="i386 x86_64"
|
||||
- export VALID_ARCHS="i386 x86_64"
|
||||
- xcrun --sdk macosx --show-sdk-path
|
||||
- xcodebuild -version
|
||||
- export CC=/Applications/Xcode_26.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
- export CFLAGS="-O2 -unwindlib=none -Wno-macro-redefined -isysroot /Applications/Xcode_26.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.0.sdk -arch x86_64"
|
||||
- make TARGET=CORE2 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 RANLIB="ls -l"
|
||||
always:
|
||||
config_artifacts:
|
||||
path: "*conf*"
|
||||
type: text/plain
|
||||
#
|
||||
#macos_instance:
|
||||
# image: ghcr.io/cirruslabs/macos-sonoma-xcode:latest
|
||||
#task:
|
||||
# name: AppleM1/LLVM x86_64 xbuild
|
||||
# compile_script:
|
||||
# - #brew install llvm
|
||||
# - export #PATH=/opt/homebrew/opt/llvm/bin:$PATH
|
||||
# - export #LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
# - export #CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
# - export ARCHS="i386 x86_64"
|
||||
# - export ARCHS_STANDARD="i386 x86_64"
|
||||
# - export ARCHS_STANDARD_32_64_BIT="i386 x86_64"
|
||||
# - export ARCHS_STANDARD_64_BIT=x86_64
|
||||
# - export ARCHS_STANDARD_INCLUDING_64_BIT="i386 x86_64"
|
||||
# - export ARCHS_UNIVERSAL_IPHONE_OS="i386 x86_64"
|
||||
# - export VALID_ARCHS="i386 x86_64"
|
||||
# - xcrun --sdk macosx --show-sdk-path
|
||||
# - xcodebuild -version
|
||||
# - export CC=/Applications/Xcode_26.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
# - export CFLAGS="-O2 -unwindlib=none -Wno-macro-redefined -isysroot /Applications/Xcode_26.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.0.sdk -arch x86_64"
|
||||
# - make TARGET=CORE2 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 RANLIB="ls -l"
|
||||
# always:
|
||||
# config_artifacts:
|
||||
# path: "*conf*"
|
||||
# type: text/plain
|
||||
# lib_artifacts:
|
||||
# path: "libopenblas*"
|
||||
# type: application/octet-streamm
|
||||
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-sonoma-xcode:latest
|
||||
task:
|
||||
name: AppleM1/LLVM armv8-ios xbuild
|
||||
compile_script:
|
||||
- #brew install llvm
|
||||
- export #PATH=/opt/homebrew/opt/llvm/bin:$PATH
|
||||
- export #LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
- export #CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
- export CC=/Applications/Xcode_26.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
- export CFLAGS="-O2 -unwindlib=none -Wno-macro-redefined -isysroot /Applications/Xcode_26.0.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.0.sdk -arch arm64 -miphoneos-version-min=10.0"
|
||||
- xcrun --sdk iphoneos --show-sdk-path
|
||||
- ls -l /Applications
|
||||
- make TARGET=ARMV8 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 CROSS=1
|
||||
always:
|
||||
config_artifacts:
|
||||
path: "*conf*"
|
||||
type: text/plain
|
||||
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-sonoma-xcode:latest
|
||||
task:
|
||||
name: AppleM1/LLVM armv7-androidndk xbuild
|
||||
compile_script:
|
||||
- brew install --cask android-ndk
|
||||
- export ANDROID_NDK_HOME="/opt/homebrew/share/android-ndk"
|
||||
- export CC=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi23-clang
|
||||
- make TARGET=ARMV7 ARM_SOFTFP_ABI=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 RANLIB="ls -l"
|
||||
always:
|
||||
config_artifacts:
|
||||
path: "*conf*"
|
||||
type: text/plain
|
||||
|
||||
task:
|
||||
name: NeoverseN1
|
||||
arm_container:
|
||||
image: node:latest
|
||||
compile_script:
|
||||
- make
|
||||
|
||||
task:
|
||||
name: NeoverseN1-ILP64
|
||||
arm_container:
|
||||
image: node:latest
|
||||
compile_script:
|
||||
- make INTERFACE64=1
|
||||
|
||||
task:
|
||||
name: NeoverseN1-OMP
|
||||
arm_container:
|
||||
image: node:latest
|
||||
cpu: 8
|
||||
compile_script:
|
||||
- make USE_OPENMP=1
|
||||
|
||||
FreeBSD_task:
|
||||
name: FreeBSD-gcc
|
||||
freebsd_instance:
|
||||
image_family: freebsd-14-3
|
||||
install_script:
|
||||
- pkg update -f && pkg upgrade -y && pkg install -y gmake gcc
|
||||
compile_script:
|
||||
- ls -l /usr/local/lib
|
||||
- gmake CC=gcc
|
||||
|
||||
|
||||
FreeBSD_task:
|
||||
name: freebsd-gcc-ilp64
|
||||
freebsd_instance:
|
||||
image_family: freebsd-14-3
|
||||
install_script:
|
||||
- pkg update -f && pkg upgrade -y && pkg install -y gmake gcc
|
||||
compile_script:
|
||||
- ls -l /usr/local/lib
|
||||
- gmake CC=gcc INTERFACE64=1
|
||||
|
||||
FreeBSD_task:
|
||||
name: FreeBSD-clang-openmp
|
||||
freebsd_instance:
|
||||
image_family: freebsd-14-3
|
||||
install_script:
|
||||
- pkg update -f && pkg upgrade -y && pkg install -y gmake gcc
|
||||
- ln -s /usr/local/lib/gcc14/libgfortran.so.5.0.0 /usr/lib/libgfortran.so
|
||||
compile_script:
|
||||
- gmake CC=clang FC=gfortran USE_OPENMP=1 CPP_THREAD_SAFETY_TEST=1
|
||||
|
||||
#
|
||||
#macos_instance:
|
||||
# image: ghcr.io/cirruslabs/macos-sonoma-xcode:latest
|
||||
#task:
|
||||
# name: AppleM1/LLVM armv8-ios xbuild
|
||||
# compile_script:
|
||||
# - #brew install llvm
|
||||
# - export #PATH=/opt/homebrew/opt/llvm/bin:$PATH
|
||||
# - export #LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
# - export #CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
# - export CC=/Applications/Xcode_26.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
# - export CFLAGS="-O2 -unwindlib=none -Wno-macro-redefined -isysroot /Applications/Xcode_26.0.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.0.sdk -arch arm64 -miphoneos-version-min=10.0"
|
||||
# - xcrun --sdk iphoneos --show-sdk-path
|
||||
# - ls -l /Applications
|
||||
# - make TARGET=ARMV8 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 CROSS=1
|
||||
# always:
|
||||
# config_artifacts:
|
||||
# path: "*conf*"
|
||||
# type: text/plain
|
||||
#
|
||||
#macos_instance:
|
||||
# image: ghcr.io/cirruslabs/macos-tahoe-xcode:latest
|
||||
#task:
|
||||
# name: AppleM1/LLVM armv7-androidndk xbuild
|
||||
# compile_script:
|
||||
# - brew install --cask android-ndk
|
||||
# - export ANDROID_NDK_HOME="/opt/homebrew/share/android-ndk"
|
||||
# - export CC=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi23-clang
|
||||
# - export AR=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar
|
||||
# - export RANLIB=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ranlib
|
||||
# - make TARGET=ARMV7 ARM_SOFTFP_ABI=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
|
||||
# always:
|
||||
# config_artifacts:
|
||||
# path: "*conf*"
|
||||
# type: text/plain
|
||||
#
|
||||
#task:
|
||||
# name: NeoverseN1
|
||||
# arm_container:
|
||||
# image: node:latest
|
||||
# compile_script:
|
||||
# - make
|
||||
#
|
||||
# task:
|
||||
# name: NeoverseN1-ILP64
|
||||
# arm_container:
|
||||
# image: node:latest
|
||||
# compile_script:
|
||||
# - make INTERFACE64=1
|
||||
#
|
||||
#task:
|
||||
# name: NeoverseN1-OMP
|
||||
# arm_container:
|
||||
# image: node:latest
|
||||
# cpu: 8
|
||||
# compile_script:
|
||||
# - make USE_OPENMP=1
|
||||
#
|
||||
#
|
||||
#FreeBSD_task:
|
||||
# name: FreeBSD-gcc
|
||||
# freebsd_instance:
|
||||
# image_family: freebsd-14-3
|
||||
# install_script:
|
||||
# - pkg update -f && pkg upgrade -y && pkg install -y gmake gcc
|
||||
# compile_script:
|
||||
# - ls -l /usr/local/lib
|
||||
# - gmake CC=gcc
|
||||
#
|
||||
#
|
||||
#FreeBSD_task:
|
||||
# name: freebsd-gcc-ilp64
|
||||
# freebsd_instance:
|
||||
# image_family: freebsd-14-3
|
||||
# install_script:
|
||||
# - pkg update -f && pkg upgrade -y && pkg install -y gmake gcc
|
||||
# compile_script:
|
||||
# - ls -l /usr/local/lib
|
||||
# - gmake CC=gcc INTERFACE64=1
|
||||
#
|
||||
#FreeBSD_task:
|
||||
# name: FreeBSD-clang-openmp
|
||||
# freebsd_instance:
|
||||
# image_family: freebsd-14-3
|
||||
# install_script:
|
||||
# - pkg update -f && pkg upgrade -y && pkg install -y gmake gcc
|
||||
# - ln -s /usr/local/lib/gcc14/libgfortran.so.5.0.0 /usr/lib/libgfortran.so
|
||||
# compile_script:
|
||||
# - gmake CC=clang FC=gfortran USE_OPENMP=1 CPP_THREAD_SAFETY_TEST=1
|
||||
#
|
||||
#task:
|
||||
# name: Windows/LLVM16 --- too slow ---
|
||||
# windows_container:
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: apple m
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -10,7 +18,7 @@ permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-windows:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: macos-14
|
||||
|
||||
@@ -24,7 +32,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Print system information
|
||||
run: |
|
||||
@@ -52,7 +60,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
# We include the commit sha in the cache key, as new cache entries are
|
||||
@@ -155,3 +163,141 @@ jobs:
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
xbuild-x86_64:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: macos-26
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Print system information
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "macOS" ]; then
|
||||
sysctl -a | grep machdep.cpu
|
||||
else
|
||||
echo "::error::$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
sudo apt-get install -y gfortran cmake ccache libtinfo5
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
# It looks like "gfortran" isn't working correctly unless "gcc" is re-installed.
|
||||
brew reinstall gcc
|
||||
brew install coreutils ccache
|
||||
brew install llvm
|
||||
else
|
||||
echo "::error::$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Crossbuild OpenBLAS to x86_64
|
||||
run: |
|
||||
#export PATH=/opt/homebrew/opt/llvm/bin:$PATH
|
||||
#export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
|
||||
#export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
||||
export ARCHS="i386 x86_64"
|
||||
export ARCHS_STANDARD="i386 x86_64"
|
||||
export ARCHS_STANDARD_32_64_BIT="i386 x86_64"
|
||||
export ARCHS_STANDARD_64_BIT=x86_64
|
||||
export ARCHS_STANDARD_INCLUDING_64_BIT="i386 x86_64"
|
||||
export ARCHS_UNIVERSAL_IPHONE_OS="i386 x86_64"
|
||||
export VALID_ARCHS="i386 x86_64"
|
||||
xcrun --sdk macosx --show-sdk-path
|
||||
xcodebuild -version
|
||||
export CC=/Applications/Xcode_26.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
export CFLAGS="-O2 -unwindlib=none -Wno-macro-redefined -isysroot /Applications/Xcode_26.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.0.sdk -arch x86_64"
|
||||
make TARGET=CORE2 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 RANLIB="ls -l"
|
||||
|
||||
xbuild-ios:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: macos-26
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Print system information
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "macOS" ]; then
|
||||
sysctl -a | grep machdep.cpu
|
||||
else
|
||||
echo "::error::$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
sudo apt-get install -y gfortran cmake ccache libtinfo5
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
# It looks like "gfortran" isn't working correctly unless "gcc" is re-installed.
|
||||
brew reinstall gcc
|
||||
brew install coreutils ccache
|
||||
brew install llvm
|
||||
else
|
||||
echo "::error::$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Crossbuild to iOS
|
||||
run: |
|
||||
CC="$(xcrun --sdk iphoneos --find clang)"
|
||||
SDKROOT="$(xcrun --sdk iphoneos --show-sdk-path)"
|
||||
echo "CC=${CC}"
|
||||
echo "SDKROOT=${SDKROOT}"
|
||||
make TARGET=ARMV8 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 \
|
||||
CC="${CC}" CFLAGS="-O2 -Wno-macro-redefined -isysroot ${SDKROOT} -arch arm64 -miphoneos-version-min=10.0"
|
||||
|
||||
xbuild-ios32:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: macos-26
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Print system information
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "macOS" ]; then
|
||||
sysctl -a | grep machdep.cpu
|
||||
else
|
||||
echo "::error::$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
sudo apt-get install -y gfortran cmake ccache libtinfo5
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
# It looks like "gfortran" isn't working correctly unless "gcc" is re-installed.
|
||||
brew reinstall gcc
|
||||
brew install coreutils ccache
|
||||
brew install llvm
|
||||
brew install --cask android-ndk
|
||||
else
|
||||
echo "::error::$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: AppleM1/LLVM armv7-androidndk xbuild
|
||||
run: |
|
||||
export ANDROID_NDK_HOME="/opt/homebrew/share/android-ndk"
|
||||
export CC=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi23-clang
|
||||
export AR=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar
|
||||
export RANLIB=/opt/homebrew/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ranlib
|
||||
make TARGET=ARMV7 ARM_SOFTFP_ABI=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
|
||||
|
||||
@@ -5,10 +5,16 @@ on:
|
||||
branches:
|
||||
- develop
|
||||
- release-**
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
- release-**
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -30,7 +36,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Print system information
|
||||
run: |
|
||||
@@ -52,7 +58,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
# We include the commit sha in the cache key, as new cache entries are
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: c910v qemu test
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -31,7 +39,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: install build deps
|
||||
run: |
|
||||
@@ -40,7 +48,7 @@ jobs:
|
||||
gcc-${{ matrix.apt_triple }} gfortran-${{ matrix.apt_triple }} libgomp1-riscv64-cross libglib2.0-dev
|
||||
|
||||
- name: checkout qemu
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: XUANTIE-RV/qemu
|
||||
path: qemu
|
||||
@@ -50,15 +58,18 @@ jobs:
|
||||
run: |
|
||||
# Force use c910v qemu-user
|
||||
wget https://github.com/revyos/qemu/commit/222729c7455784dd855216d7a2bec4bd8f2a6800.patch
|
||||
# Backport the upstream linux-user clone_lock fix
|
||||
wget -O qemu-clone-lock.patch https://gitlab.com/qemu-project/qemu/-/commit/d22e9aec572396836782e993cb18d598e6012688.patch
|
||||
cd qemu
|
||||
patch -p1 < ../222729c7455784dd855216d7a2bec4bd8f2a6800.patch
|
||||
patch -p1 < ../qemu-clone-lock.patch
|
||||
export CXXFLAGS="-Wno-error"; export CFLAGS="-Wno-error"
|
||||
./configure --prefix=$GITHUB_WORKSPACE/qemu-install --target-list=riscv64-linux-user --disable-system
|
||||
make -j$(nproc)
|
||||
make install
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
|
||||
@@ -85,8 +96,9 @@ jobs:
|
||||
run: |
|
||||
run_with_retry() {
|
||||
local cmd="$1"
|
||||
local time_out=10
|
||||
local retries=10
|
||||
local time_out="${2:-10}"
|
||||
local retries="${3:-10}"
|
||||
local timeout_step="${4:-5}"
|
||||
local attempt=0
|
||||
|
||||
for ((i=1; i<=retries; i++)); do
|
||||
@@ -98,7 +110,7 @@ jobs:
|
||||
local exit_code=$?
|
||||
if [ $exit_code -eq 140 ]; then
|
||||
echo "Attempt $i timed out (retrying...)"
|
||||
time_out=$((time_out + 5))
|
||||
time_out=$((time_out + timeout_step))
|
||||
else
|
||||
echo "Attempt $i failed with exit code $exit_code. Aborting workflow."
|
||||
exit $exit_code
|
||||
@@ -113,7 +125,7 @@ jobs:
|
||||
export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH
|
||||
which qemu-riscv64
|
||||
export QEMU_BIN=$(which qemu-riscv64)
|
||||
run_with_retry "$QEMU_BIN ./utest/openblas_utest"
|
||||
run_with_retry "$QEMU_BIN ./utest/openblas_utest" 120 2 30
|
||||
run_with_retry "$QEMU_BIN ./utest/openblas_utest_ext"
|
||||
|
||||
OPENBLAS_NUM_THREADS=2 qemu-riscv64 ./ctest/xscblat1
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: Run codspeed benchmarks
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -21,8 +29,8 @@ jobs:
|
||||
pyver: ["3.12"]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v3
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: ${{ matrix.pyver }}
|
||||
|
||||
@@ -43,7 +51,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
# We include the commit sha in the cache key, as new cache entries are
|
||||
@@ -147,8 +155,9 @@ jobs:
|
||||
OPENBLAS_NUM_THREADS=1 pytest benchmarks/bench_blas.py -k 'gesdd'
|
||||
|
||||
- name: Run benchmarks
|
||||
uses: CodSpeedHQ/action@v3
|
||||
uses: CodSpeedHQ/action@v4
|
||||
with:
|
||||
mode: simulation
|
||||
token: ${{ secrets.CODSPEED_TOKEN }}
|
||||
run: |
|
||||
cd benchmark/pybench
|
||||
|
||||
@@ -4,9 +4,17 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- 'mkdocs.yml'
|
||||
- '.github/workflows/docs.yml'
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- 'mkdocs.yml'
|
||||
- '.github/workflows/docs.yml'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -14,11 +22,11 @@ jobs:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.10"
|
||||
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
name: continuous build
|
||||
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -33,7 +42,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Print system information
|
||||
run: |
|
||||
@@ -61,8 +70,8 @@ jobs:
|
||||
sudo ./llvm.sh 21
|
||||
fi
|
||||
if [ "${{ matrix.fortran }}" == "flang" ]; then
|
||||
wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
|
||||
sudo apt install ./libtinfo5_6.3-2ubuntu0.1_amd64.deb
|
||||
wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.2_amd64.deb
|
||||
sudo apt install ./libtinfo5_6.3-2ubuntu0.2_amd64.deb
|
||||
else
|
||||
sudo apt-get install -y ${{ matrix.fortran }}
|
||||
fi
|
||||
@@ -76,7 +85,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
# We include the commit sha in the cache key, as new cache entries are
|
||||
@@ -196,29 +205,29 @@ jobs:
|
||||
- msystem: UCRT64
|
||||
idx: int32
|
||||
target-prefix: mingw-w64-ucrt-x86_64
|
||||
fc-pkg: fc
|
||||
fc-pkg: mingw-w64-ucrt-x86_64-fc
|
||||
- msystem: MINGW32
|
||||
idx: int32
|
||||
target-prefix: mingw-w64-i686
|
||||
fc-pkg: fc
|
||||
fc-pkg:
|
||||
- msystem: CLANG64
|
||||
idx: int32
|
||||
target-prefix: mingw-w64-clang-x86_64
|
||||
fc-pkg: fc
|
||||
fc-pkg: mingw-w64-clang-x86_64-fc
|
||||
- msystem: UCRT64
|
||||
idx: int64
|
||||
idx64-flags: -DBINARY=64 -DINTERFACE64=1
|
||||
target-prefix: mingw-w64-ucrt-x86_64
|
||||
fc-pkg: fc
|
||||
fc-pkg: mingw-w64-ucrt-x86_64-fc
|
||||
- msystem: CLANG64
|
||||
idx: int64
|
||||
idx64-flags: -DBINARY=64 -DINTERFACE64=1
|
||||
target-prefix: mingw-w64-clang-x86_64
|
||||
fc-pkg: fc
|
||||
fc-pkg: mingw-w64-clang-x86_64-fc
|
||||
- msystem: UCRT64
|
||||
idx: int32
|
||||
target-prefix: mingw-w64-ucrt-x86_64
|
||||
fc-pkg: fc
|
||||
fc-pkg: mingw-w64-ucrt-x86_64-fc
|
||||
build-type: None
|
||||
exclude:
|
||||
- msystem: MINGW32
|
||||
@@ -247,13 +256,13 @@ jobs:
|
||||
install: >-
|
||||
base-devel
|
||||
${{ matrix.target-prefix }}-cc
|
||||
${{ matrix.target-prefix }}-${{ matrix.fc-pkg }}
|
||||
${{ matrix.fc-pkg }}
|
||||
${{ matrix.target-prefix }}-cmake
|
||||
${{ matrix.target-prefix }}-ninja
|
||||
${{ matrix.target-prefix }}-ccache
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Prepare ccache
|
||||
# Get cache location of ccache
|
||||
@@ -266,7 +275,7 @@ jobs:
|
||||
echo "key=ccache-msys2-${{ matrix.msystem }}-${{ matrix.idx }}-${{ matrix.build-type }}-${{ github.ref }}-${{ github.sha }}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Restore ccache
|
||||
uses: actions/cache/restore@v3
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: ${{ steps.ccache-prepare.outputs.ccachedir }}
|
||||
key: ${{ steps.ccache-prepare.outputs.key }}
|
||||
@@ -311,7 +320,7 @@ jobs:
|
||||
|
||||
- name: Save ccache
|
||||
# Save the cache after we are done (successfully) building
|
||||
uses: actions/cache/save@v3
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: ${{ steps.ccache-prepare.outputs.ccachedir }}
|
||||
key: ${{ steps.ccache-prepare.outputs.key }}
|
||||
@@ -334,6 +343,277 @@ jobs:
|
||||
echo "::endgroup::"
|
||||
|
||||
|
||||
linux_thread_stress:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
name: ${{ matrix.check-name }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- backend: pthread
|
||||
check-name: "linux_thread_stress (pthread)"
|
||||
- backend: openmp
|
||||
check-name: "linux_thread_stress (openmp)"
|
||||
- backend: tsan
|
||||
check-name: linux_thread_sanitizer
|
||||
- backend: tsan-openmp
|
||||
check-name: linux_thread_sanitizer_openmp
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
cat << EOF | sudo tee -a /etc/apt/apt.conf.d/01norecommend
|
||||
APT::Install-Recommends "0";
|
||||
APT::Install-Suggests "0";
|
||||
EOF
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache cmake ninja-build
|
||||
case "${{ matrix.backend }}" in
|
||||
tsan|tsan-openmp) sudo apt-get install -y clang llvm ;;
|
||||
esac
|
||||
if [ "${{ matrix.backend }}" = "tsan-openmp" ]; then
|
||||
sudo apt-get install -y libomp-dev
|
||||
fi
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-thread-${{ matrix.backend }}-${{ github.ref }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
ccache-${{ runner.os }}-thread-${{ matrix.backend }}-${{ github.ref }}
|
||||
ccache-${{ runner.os }}-thread-${{ matrix.backend }}
|
||||
|
||||
- name: Configure ccache
|
||||
# Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota.
|
||||
run: |
|
||||
test -d ~/.ccache || mkdir -p ~/.ccache
|
||||
echo "max_size = 250M" > ~/.ccache/ccache.conf
|
||||
echo "compression = true" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
|
||||
- name: Configure OpenBLAS
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
build_type=Release
|
||||
c_compiler=gcc
|
||||
cxx_compiler=g++
|
||||
dynamic_arch=ON
|
||||
use_openmp=OFF
|
||||
cpp_thread_safety_use_openmp=ON
|
||||
dgemm_args="512;12;4"
|
||||
dgemm_mixed_args="524288;16;20"
|
||||
dgemv_args="512;12;4"
|
||||
sanitizer_flags=
|
||||
if [ "${{ matrix.backend }}" = "openmp" ]; then
|
||||
use_openmp=ON
|
||||
elif [ "${{ matrix.backend }}" = "tsan" ] || [ "${{ matrix.backend }}" = "tsan-openmp" ]; then
|
||||
build_type=RelWithDebInfo
|
||||
c_compiler=clang
|
||||
cxx_compiler=clang++
|
||||
dynamic_arch=OFF
|
||||
cpp_thread_safety_use_openmp=OFF
|
||||
dgemm_args="64;4;1"
|
||||
dgemm_mixed_args="131072;8;10"
|
||||
dgemv_args="64;4;1"
|
||||
sanitizer_flags="-fsanitize=thread -g -O1 -fno-omit-frame-pointer"
|
||||
if [ "${{ matrix.backend }}" = "tsan-openmp" ]; then
|
||||
use_openmp=ON
|
||||
cpp_thread_safety_use_openmp=ON
|
||||
fi
|
||||
fi
|
||||
cmake_args=(
|
||||
-G Ninja
|
||||
"-DCMAKE_BUILD_TYPE=$build_type"
|
||||
"-DCMAKE_C_COMPILER=$c_compiler"
|
||||
"-DCMAKE_CXX_COMPILER=$cxx_compiler"
|
||||
-DBUILD_SHARED_LIBS=ON
|
||||
-DBUILD_STATIC_LIBS=OFF
|
||||
-DBUILD_WITHOUT_LAPACK=ON
|
||||
-DBUILD_SINGLE=OFF
|
||||
-DBUILD_DOUBLE=ON
|
||||
-DBUILD_COMPLEX=OFF
|
||||
-DBUILD_COMPLEX16=OFF
|
||||
"-DDYNAMIC_ARCH=$dynamic_arch"
|
||||
-DNOFORTRAN=ON
|
||||
-DUSE_THREAD=ON
|
||||
"-DUSE_OPENMP=$use_openmp"
|
||||
-DNUM_THREADS=32
|
||||
-DNUM_PARALLEL=2
|
||||
-DTARGET=CORE2
|
||||
-DCPP_THREAD_SAFETY_TEST=ON
|
||||
"-DCPP_THREAD_SAFETY_USE_OPENMP=$cpp_thread_safety_use_openmp"
|
||||
"-DCPP_THREAD_SAFETY_DGEMM_ARGS=$dgemm_args"
|
||||
"-DCPP_THREAD_SAFETY_DGEMM_MIXED_ARGS=$dgemm_mixed_args"
|
||||
"-DCPP_THREAD_SAFETY_DGEMV_ARGS=$dgemv_args"
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||
)
|
||||
if [ "${{ matrix.backend }}" = "tsan" ] || [ "${{ matrix.backend }}" = "tsan-openmp" ]; then
|
||||
cmake_args+=(
|
||||
"-DCMAKE_C_FLAGS=$sanitizer_flags"
|
||||
"-DCMAKE_CXX_FLAGS=$sanitizer_flags"
|
||||
-DCMAKE_SHARED_LINKER_FLAGS=-fsanitize=thread
|
||||
-DCMAKE_EXE_LINKER_FLAGS=-fsanitize=thread
|
||||
)
|
||||
fi
|
||||
cmake "${cmake_args[@]}" ..
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: |
|
||||
cd build
|
||||
cmake --build . --target dgemm_thread_safety dgemm_thread_safety_mixed dgemv_thread_safety
|
||||
|
||||
- name: Show ccache status
|
||||
continue-on-error: true
|
||||
run: ccache -s
|
||||
|
||||
- name: Run thread stress tests
|
||||
timeout-minutes: 30
|
||||
run: |
|
||||
cd build
|
||||
if [ "${{ matrix.backend }}" = "tsan" ] || [ "${{ matrix.backend }}" = "tsan-openmp" ]; then
|
||||
export LLVM_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
|
||||
export TSAN_OPTIONS=halt_on_error=1:exitcode=66:second_deadlock_stack=1
|
||||
fi
|
||||
if [ "${{ matrix.backend }}" = "tsan-openmp" ]; then
|
||||
# Load Archer (the OMPT tool from Ubuntu's libomp-dev) so TSan
|
||||
# understands libomp's barriers instead of flagging them as false positives. The OpenMP runtime will load this tool automatically if OMP_TOOL_LIBRARIES is set.
|
||||
archer=$(clang -print-file-name=libarcher.so)
|
||||
[ -f "$archer" ] || archer=$(find /usr/lib/llvm-* -name libarcher.so 2>/dev/null | head -1)
|
||||
if [ ! -f "$archer" ]; then
|
||||
echo "::error::libarcher.so not found (expected from libomp-dev)"
|
||||
exit 1
|
||||
fi
|
||||
echo "Using distro Archer: $archer"
|
||||
export OMP_TOOL_LIBRARIES="$archer"
|
||||
export TSAN_OPTIONS="$TSAN_OPTIONS:ignore_noninstrumented_modules=1"
|
||||
fi
|
||||
if [ "${{ matrix.backend }}" != "tsan" ]; then
|
||||
export OMP_NUM_THREADS=16
|
||||
fi
|
||||
export OPENBLAS_NUM_THREADS=8
|
||||
ctest -R 'dgemm_thread_safety|dgemm_thread_safety_mixed|dgemv_thread_safety' --output-on-failure
|
||||
|
||||
|
||||
msys2_thread_stress:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: windows-latest
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
|
||||
env:
|
||||
CHERE_INVOKING: 1
|
||||
|
||||
steps:
|
||||
- name: Get CPU name
|
||||
shell: pwsh
|
||||
run : |
|
||||
Get-CIMInstance -Class Win32_Processor | Select-Object -Property Name
|
||||
|
||||
- name: Install build dependencies
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: UCRT64
|
||||
update: true
|
||||
release: false # Use pre-installed version
|
||||
install: >-
|
||||
base-devel
|
||||
mingw-w64-ucrt-x86_64-cc
|
||||
mingw-w64-ucrt-x86_64-cmake
|
||||
mingw-w64-ucrt-x86_64-ninja
|
||||
mingw-w64-ucrt-x86_64-ccache
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Prepare ccache
|
||||
# Get cache location of ccache
|
||||
# Create key that is used in action/cache/restore and action/cache/save steps
|
||||
id: ccache-prepare
|
||||
run: |
|
||||
echo "ccachedir=$(cygpath -m $(ccache -k cache_dir))" >> $GITHUB_OUTPUT
|
||||
# We include the commit sha in the cache key, as new cache entries are
|
||||
# only created if there is no existing entry for the key yet.
|
||||
echo "key=ccache-msys2-thread-stress-${{ github.ref }}-${{ github.sha }}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Restore ccache
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: ${{ steps.ccache-prepare.outputs.ccachedir }}
|
||||
key: ${{ steps.ccache-prepare.outputs.key }}
|
||||
# Restore a matching ccache cache entry. Prefer same branch.
|
||||
restore-keys: |
|
||||
ccache-msys2-thread-stress-${{ github.ref }}
|
||||
ccache-msys2-thread-stress
|
||||
|
||||
- name: Configure ccache
|
||||
# Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota.
|
||||
run: |
|
||||
which ccache
|
||||
test -d ${{ steps.ccache-prepare.outputs.ccachedir }} || mkdir -p ${{ steps.ccache-prepare.outputs.ccachedir }}
|
||||
echo "max_size = 250M" > ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf
|
||||
echo "compression = true" >> ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf
|
||||
ccache -p
|
||||
ccache -s
|
||||
|
||||
- name: Configure OpenBLAS
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=OFF \
|
||||
-DBUILD_WITHOUT_LAPACK=ON \
|
||||
-DBUILD_SINGLE=OFF \
|
||||
-DBUILD_DOUBLE=ON \
|
||||
-DBUILD_COMPLEX=OFF \
|
||||
-DBUILD_COMPLEX16=OFF \
|
||||
-DDYNAMIC_ARCH=OFF \
|
||||
-DNOFORTRAN=ON \
|
||||
-DUSE_THREAD=ON \
|
||||
-DUSE_OPENMP=OFF \
|
||||
-DNUM_THREADS=32 \
|
||||
-DTARGET=CORE2 \
|
||||
-DCPP_THREAD_SAFETY_TEST=ON \
|
||||
-DCPP_THREAD_SAFETY_DGEMM_ARGS="384;8;4" \
|
||||
-DCPP_THREAD_SAFETY_DGEMM_MIXED_ARGS="524288;16;20" \
|
||||
-DCPP_THREAD_SAFETY_DGEMV_ARGS="384;8;4" \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
..
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: |
|
||||
cd build
|
||||
cmake --build . --target dgemm_thread_safety dgemm_thread_safety_mixed dgemm_thread_safety_shutdown dgemv_thread_safety
|
||||
|
||||
- name: Show ccache status
|
||||
continue-on-error: true
|
||||
run: ccache -s
|
||||
|
||||
- name: Save ccache
|
||||
# Save the cache after we are done (successfully) building
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: ${{ steps.ccache-prepare.outputs.ccachedir }}
|
||||
key: ${{ steps.ccache-prepare.outputs.key }}
|
||||
|
||||
- name: Run thread stress tests
|
||||
timeout-minutes: 30
|
||||
run: |
|
||||
cd build
|
||||
export PATH="$PWD/lib:$PATH"
|
||||
OPENBLAS_NUM_THREADS=8 OMP_NUM_THREADS=16 ctest -R 'dgemm_thread_safety|dgemm_thread_safety_mixed|dgemm_thread_safety_shutdown|dgemv_thread_safety' --output-on-failure
|
||||
|
||||
|
||||
cross_build:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-22.04
|
||||
@@ -357,7 +637,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
@@ -365,7 +645,7 @@ jobs:
|
||||
sudo apt-get install -y ccache gcc-${{ matrix.triple }} gfortran-${{ matrix.triple }} libgomp1-${{ matrix.target }}-cross
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
|
||||
@@ -392,7 +672,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
@@ -404,4 +684,55 @@ jobs:
|
||||
make -j${nproc}
|
||||
make -j${nproc} lapack-test
|
||||
|
||||
neoverse_n1_build:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-24.04-arm
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc gfortran make
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: |
|
||||
make -j${nproc} TARGET=NEOVERSEN1
|
||||
make -j${nproc} TARGET=NEOVERSEN1 lapack-test
|
||||
|
||||
neoverse_n1_omp_build:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-24.04-arm
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc gfortran make
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: |
|
||||
make -j${nproc} TARGET=NEOVERSEN1 USE_OPENMP=1
|
||||
|
||||
neoverse_n1_ilp64_build:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-24.04-arm
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc gfortran make
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: |
|
||||
make -j${nproc} TARGET=NEOVERSEN1 INTERFACE64=1
|
||||
make -j${nproc} TARGET=NEOVERSEN1 INTERFACE64=1 lapack-test
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
name: freebsd
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
bsd-x86:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: build
|
||||
id: freebsd_x86_64
|
||||
uses: vmactions/freebsd-vm@v1
|
||||
with:
|
||||
usesh: true
|
||||
prepare: |
|
||||
|
||||
run: |
|
||||
freebsd-version
|
||||
sysctl hw.ncpu
|
||||
pkg install -y gmake gcc15
|
||||
gmake CC=gcc15 FC=gfortran15
|
||||
|
||||
bsd-aarch64:
|
||||
if: "github.repository == 'OpenMathLib/OpenBLAS'"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: build
|
||||
id: freebsd_arm64
|
||||
uses: vmactions/freebsd-vm@v1
|
||||
with:
|
||||
arch: aarch64
|
||||
usesh: true
|
||||
run: |
|
||||
freebsd-version
|
||||
sysctl hw.ncpu
|
||||
pkg install -y gmake gcc15
|
||||
gmake CC=gcc15 FC=gfortran15
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: harmonyos
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -20,7 +28,7 @@ jobs:
|
||||
-DCMAKE_INSTALL_PREFIX=install \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
- name: ndk-install
|
||||
run: |
|
||||
wget https://repo.huaweicloud.com/harmonyos/os/4.1.1-Release/ohos-sdk-windows_linux-public.tar.gz
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: loongarch64 qemu test
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -38,16 +46,16 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install APT deps
|
||||
run: |
|
||||
sudo apt-get update && \
|
||||
sudo apt-get install autoconf automake autotools-dev ninja-build make ccache qemu-user-static \
|
||||
sudo apt-get install autoconf automake autotools-dev ninja-build make ccache \
|
||||
gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu gfortran-14-loongarch64-linux-gnu
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
|
||||
@@ -62,11 +70,18 @@ jobs:
|
||||
echo "compression = true" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
|
||||
- name: Disable utest dsdot:dsdot_n_1
|
||||
- name: Install QEMU 10.2.1
|
||||
run: |
|
||||
echo -n > utest/test_dsdot.c
|
||||
echo "Due to the current version of qemu causing utest cases to fail,"
|
||||
echo "the utest dsdot:dsdot_n_1 have been temporarily disabled."
|
||||
qemu_deb="${RUNNER_TEMP}/qemu-user_10.2.1+ds-1ubuntu3_amd64.deb"
|
||||
qemu_root="${RUNNER_TEMP}/qemu-user-10.2.1"
|
||||
wget --output-document="${qemu_deb}" \
|
||||
https://archive.ubuntu.com/ubuntu/pool/universe/q/qemu/qemu-user_10.2.1+ds-1ubuntu3_amd64.deb
|
||||
echo "e6bdaac070232a44b8657cad84ac0853d84b7167b55af82370af040291f55bd8 ${qemu_deb}" \
|
||||
| sha256sum --check -
|
||||
dpkg-deb --extract "${qemu_deb}" "${qemu_root}"
|
||||
sudo install -m 0755 "${qemu_root}/usr/bin/qemu-loongarch64" \
|
||||
/usr/local/bin/qemu-loongarch64-static
|
||||
qemu-loongarch64-static --version
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: |
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: loongarch64 clang qemu test
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -31,7 +39,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install libffi6
|
||||
run: |
|
||||
@@ -51,7 +59,7 @@ jobs:
|
||||
tar -xf loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3.tar.xz -C /opt
|
||||
|
||||
- name: Checkout qemu
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: qemu/qemu
|
||||
path: qemu
|
||||
@@ -69,7 +77,7 @@ jobs:
|
||||
echo "PATH=$GITHUB_WORKSPACE:/opt/clang+llvm_8.0.1-6_amd64-linux-gnu_debian-10/bin:/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3/bin:$PATH" >> $GITHUB_ENV
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
|
||||
@@ -84,12 +92,6 @@ jobs:
|
||||
echo "compression = true" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
|
||||
- name: Disable utest dsdot:dsdot_n_1
|
||||
run: |
|
||||
echo -n > utest/test_dsdot.c
|
||||
echo "Due to the qemu versions 7.2 causing utest cases to fail,"
|
||||
echo "the utest dsdot:dsdot_n_1 have been temporarily disabled."
|
||||
|
||||
- name: Build OpenBLAS
|
||||
run: make CC='ccache clang --target=loongarch64-linux-gnu --sysroot=/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3/loongarch64-linux-gnu/sysroot/ -static' FC='ccache loongarch64-linux-gnu-gfortran -static' HOSTCC='ccache clang' CROSS_SUFFIX=llvm- NO_SHARED=1 ${{ matrix.opts }} -j$(nproc)
|
||||
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: mips64 qemu test
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -35,7 +43,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: install build deps
|
||||
run: |
|
||||
@@ -44,11 +52,11 @@ jobs:
|
||||
gcc-${{ matrix.triple }} gfortran-${{ matrix.triple }} libgomp1-mips64el-cross libglib2.0-dev
|
||||
|
||||
- name: checkout qemu
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: qemu/qemu
|
||||
path: qemu
|
||||
ref: ae35f033b874c627d81d51070187fbf55f0bf1a7
|
||||
ref: 3e0bcba1ca7d6607ca49a988d165f052a3a53323
|
||||
|
||||
- name: build qemu
|
||||
run: |
|
||||
@@ -58,7 +66,7 @@ jobs:
|
||||
make install
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
|
||||
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
sleep ${delay}
|
||||
if: github.event_name == 'schedule'
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v6
|
||||
# This isn't even needed, technically. Homebrew will get `develop` via git
|
||||
|
||||
- name: Update Homebrew
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
mv *.bottle.tar.gz bottles
|
||||
|
||||
- name: Upload bottle
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: openblas--HEAD.catalina.bottle.tar.gz
|
||||
path: bottles
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: riscv64 zvl256b qemu test
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -34,7 +42,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: install build deps
|
||||
run: |
|
||||
@@ -48,7 +56,7 @@ jobs:
|
||||
chmod +x /opt/riscv/bin/qemu-riscv64
|
||||
|
||||
- name: Compilation cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
|
||||
|
||||
@@ -4,9 +4,15 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||
@@ -21,7 +27,7 @@ jobs:
|
||||
runs-on: windows-11-arm
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install LLVM for Win-ARM64
|
||||
shell: pwsh
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*.dylib
|
||||
*.def
|
||||
*.o
|
||||
*.exe
|
||||
*.out
|
||||
*.tmp
|
||||
lapack-3.1.1
|
||||
|
||||
+113
-28
@@ -9,7 +9,7 @@ project(OpenBLAS C ASM)
|
||||
|
||||
set(OpenBLAS_MAJOR_VERSION 0)
|
||||
set(OpenBLAS_MINOR_VERSION 3)
|
||||
set(OpenBLAS_PATCH_VERSION 31.dev)
|
||||
set(OpenBLAS_PATCH_VERSION 34.dev)
|
||||
|
||||
set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}")
|
||||
|
||||
@@ -58,9 +58,10 @@ else()
|
||||
set(NO_AFFINITY 1)
|
||||
endif()
|
||||
|
||||
option(CPP_THREAD_SAFETY_TEST "Run a massively parallel DGEMM test to confirm thread safety of the library (requires OpenMP and about 1.3GB of RAM)" OFF)
|
||||
option(CPP_THREAD_SAFETY_TEST "Run massively parallel DGEMM tests to confirm thread safety of the library (requires about 1.3GB of RAM)" OFF)
|
||||
option(CPP_THREAD_SAFETY_USE_OPENMP "Use OpenMP to launch the C++ thread safety tests" ON)
|
||||
|
||||
option(CPP_THREAD_SAFETY_GEMV "Run a massively parallel DGEMV test to confirm thread safety of the library (requires OpenMP)" OFF)
|
||||
option(CPP_THREAD_SAFETY_GEMV "Run a massively parallel DGEMV test to confirm thread safety of the library" OFF)
|
||||
option(BUILD_STATIC_LIBS "Build static library" OFF)
|
||||
option(BUILD_SHARED_LIBS "Build shared library" OFF)
|
||||
if(NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
|
||||
@@ -243,6 +244,38 @@ if (${DYNAMIC_ARCH})
|
||||
endforeach()
|
||||
endif ()
|
||||
|
||||
# Work around Apple issue with "argument list too long" when linking.
|
||||
# Seen for DYNAMIC_ARCH when there are a _LOT_ of variants build, previously
|
||||
# mostly with older versions on POWERPC or Intel CPUs, but with newer ARM
|
||||
# CPUs and newer compilers this will also occur on ARM.
|
||||
#
|
||||
# This must happen before the add_library() calls, otherwise this will have
|
||||
# no effect.
|
||||
#
|
||||
# Unfortunately, while this workaround will work for shared libraries (with
|
||||
# either Ninja oder Unix Makefiles), but not for static libraries, as ar
|
||||
# does not accept response files. So for the case where we (also) build
|
||||
# static libraries we need an additional workaround, see below. (The
|
||||
# generation of the response files by CMake must still be enabled, so this
|
||||
# is required regardless.)
|
||||
if(APPLE)
|
||||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS ON)
|
||||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES ON)
|
||||
if(NOT NOFORTRAN)
|
||||
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS ON)
|
||||
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_LIBRARIES ON)
|
||||
# NAG Fortran does not support the GCC-specific -x f95-cpp-input flag
|
||||
# used in the shared library link rule below. Override
|
||||
# CMAKE_Fortran_CREATE_SHARED_LIBRARY early (before targets are defined)
|
||||
# to use the C compiler link rule instead; the shared library contains
|
||||
# only C and assembler objects so this is safe.
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES "NAG")
|
||||
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
set(CMAKE_NINJA_FORCE_RESPONSE_FILE ON)
|
||||
endif()
|
||||
|
||||
# add objects to the openblas lib
|
||||
if(NOT NO_LAPACK)
|
||||
add_library(LAPACK_OVERRIDES OBJECT ${LA_SOURCES})
|
||||
@@ -308,20 +341,22 @@ if (USE_OPENMP)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Fix "Argument list too long" for macOS - mostly seen with older OS versions on POWERPC or Intel CPUs
|
||||
if(APPLE)
|
||||
# Use response files
|
||||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
# Second part of "Argument list too long" fix when static libraries are
|
||||
# built. See above for details.
|
||||
if(APPLE AND BUILD_STATIC_LIBS)
|
||||
# Always build static library first
|
||||
if(BUILD_STATIC_LIBS)
|
||||
set(STATIC_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${OpenBLAS_LIBNAME}.a")
|
||||
set(STATIC_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${OpenBLAS_LIBNAME}.a")
|
||||
# Handle differences in how many response files are generated and/or where
|
||||
# they are stored for Ninja / Unix Makefiles.
|
||||
if("${CMAKE_GENERATOR}" MATCHES "Ninja")
|
||||
set(CREATE_STATIC_LIBRARY_COMMAND
|
||||
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/openblas_static.rsp | xargs -n 1024 ${CMAKE_AR} -ru ${STATIC_PATH} && exit 0' "
|
||||
"sh -c '${CMAKE_AR} -rs ${STATIC_PATH} ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' ")
|
||||
else()
|
||||
add_library(${OpenBLAS_LIBNAME}_static STATIC ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
|
||||
set(STATIC_PATH "lib${OpenBLAS_LIBNAME}.a")
|
||||
set(CREATE_STATIC_LIBRARY_COMMAND
|
||||
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/${OpenBLAS_LIBNAME}_static.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru ${STATIC_PATH} && exit 0' "
|
||||
"sh -c '${CMAKE_AR} -rs ${STATIC_PATH} ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' ")
|
||||
endif()
|
||||
set(CREATE_STATIC_LIBRARY_COMMAND
|
||||
"sh -c 'cat ${CMAKE_BINARY_DIR}/CMakeFiles/${OpenBLAS_LIBNAME}_static.dir/objects*.rsp | xargs -n 1024 ${CMAKE_AR} -ru ${STATIC_PATH} && exit 0' "
|
||||
"sh -c '${CMAKE_AR} -rs ${STATIC_PATH} ${CMAKE_BINARY_DIR}/driver/others/CMakeFiles/driver_others.dir/xerbla.c.o && exit 0' ")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
add_dependencies(${OpenBLAS_LIBNAME}_shared ${OpenBLAS_LIBNAME}_static)
|
||||
set(SHARED_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libopenblas.${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.dylib")
|
||||
@@ -332,12 +367,34 @@ if(APPLE)
|
||||
set(OMP_LIB "")
|
||||
endif()
|
||||
if(NOT NOFORTRAN)
|
||||
set(CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
set(CMAKE_Fortran_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND})
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
||||
"sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '"
|
||||
"sh -c '${CMAKE_Fortran_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} dummy.o -o ${SHARED_PATH} ${OMP_LIB}'")
|
||||
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
|
||||
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
||||
"sh -c 'echo \"\" | ${CMAKE_Fortran_COMPILER} -o dummy.o -c -x f95-cpp-input - '"
|
||||
"sh -c '${CMAKE_Fortran_COMPILER} -fpic -shared -Wl,-all_load -Wl,-force_load,${STATIC_PATH} dummy.o -o ${SHARED_PATH} ${OMP_LIB}'")
|
||||
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "NAG")
|
||||
# NAG does not support -x f95-cpp-input, and macOS needs -dynamiclib
|
||||
# rather than -Wl,-shared. Use the C compiler as the linker driver
|
||||
# and add the NAG Fortran runtime so NAGf90_* symbols resolve.
|
||||
# Locate the NAG Fortran runtime (libf<XY>rts) without hardcoding the
|
||||
# version digits: NAG 7.1 ships libf71rts, 7.2 ships libf72rts, etc.
|
||||
get_filename_component(_NAG_FC_DIR "${CMAKE_Fortran_COMPILER}" DIRECTORY)
|
||||
set(_NAG_RTS_DIR "${_NAG_FC_DIR}/../lib/NAG_Fortran")
|
||||
file(GLOB _NAG_RTS_CANDIDATES
|
||||
"${_NAG_RTS_DIR}/libf*rts.dylib"
|
||||
"${_NAG_RTS_DIR}/libf*rts.a")
|
||||
if(_NAG_RTS_CANDIDATES)
|
||||
list(GET _NAG_RTS_CANDIDATES 0 _NAG_RTS_LIB)
|
||||
get_filename_component(_NAG_RTS_NAME "${_NAG_RTS_LIB}" NAME_WE)
|
||||
string(REGEX REPLACE "^lib" "" _NAG_RTS_LIBNAME "${_NAG_RTS_NAME}")
|
||||
set(_NAG_RTS_FLAGS "-L${_NAG_RTS_DIR} -l${_NAG_RTS_LIBNAME}")
|
||||
else()
|
||||
set(_NAG_RTS_FLAGS "")
|
||||
endif()
|
||||
set(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
||||
"sh -c '${CMAKE_C_COMPILER} -dynamiclib -Wl,-all_load -Wl,-force_load,${STATIC_PATH} -o ${SHARED_PATH} ${OMP_LIB} ${_NAG_RTS_FLAGS}'")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
set(CMAKE_C_CREATE_STATIC_LIBRARY ${CREATE_STATIC_LIBRARY_COMMAND})
|
||||
@@ -676,19 +733,48 @@ if(NOT NO_CBLAS)
|
||||
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set(CBLAS_H ${CMAKE_BINARY_DIR}/generated/cblas.h)
|
||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h CBLAS_H_CONTENTS)
|
||||
string(REPLACE "common" "openblas_config" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS}")
|
||||
string(REPLACE "common" "openblas_config" CBLAS_H_CONTENTS_NEW2 "${CBLAS_H_CONTENTS}")
|
||||
string(REPLACE "OPENBLAS_EXPORT " "" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW2}")
|
||||
|
||||
# Symbol prefix/suffix settings rename exported functions, not C typedefs.
|
||||
# Protect callback type names from the textual function-name rewriting below.
|
||||
string(REPLACE "openblas_dojob_callback" "OPENBLAS_DOJOB_CALLBACK_TYPE"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE "openblas_threads_callback" "OPENBLAS_THREADS_CALLBACK_TYPE"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE "openblas_xerbla_handler" "OPENBLAS_XERBLA_HANDLER_TYPE"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
|
||||
if (NOT ${SYMBOLPREFIX} STREQUAL "")
|
||||
string(REPLACE " cblas" " ${SYMBOLPREFIX}cblas" CBLAS_H_CONTENTS "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE " openblas" " ${SYMBOLPREFIX}openblas" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS}")
|
||||
string (REPLACE " ${SYMBOLPREFIX}openblas_complex" " openblas_complex" CBLAS_H_CONTENTS "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE " goto" " ${SYMBOLPREFIX}goto" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS}")
|
||||
string(REPLACE " cblas" " ${SYMBOLPREFIX}cblas"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE " openblas" " ${SYMBOLPREFIX}openblas"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE " ${SYMBOLPREFIX}openblas_complex" " openblas_complex"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE " goto" " ${SYMBOLPREFIX}goto"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
endif()
|
||||
if (NOT ${SYMBOLSUFFIX} STREQUAL "")
|
||||
string(REGEX REPLACE "(cblas[^ (]*)" "\\1${SYMBOLSUFFIX}" CBLAS_H_CONTENTS "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REGEX REPLACE "(openblas[^ (]*)" "\\1${SYMBOLSUFFIX}" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS}")
|
||||
string(REGEX REPLACE "(openblas_complex[^ ]*)${SYMBOLSUFFIX}" "\\1" CBLAS_H_CONTENTS "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REGEX REPLACE "(goto[^ (]*)" "\\1${SYMBOLSUFFIX}" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS}")
|
||||
string(REGEX REPLACE "(cblas[A-Za-z0-9_]*)" "\\1${SYMBOLSUFFIX}"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REGEX REPLACE "(openblas[A-Za-z0-9_]*)" "\\1${SYMBOLSUFFIX}"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE "openblas_config${SYMBOLSUFFIX}" "openblas_config"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REGEX REPLACE "(openblas_complex[A-Za-z0-9_]*)${SYMBOLSUFFIX}" "\\1"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REGEX REPLACE "(goto[A-Za-z0-9_]*)" "\\1${SYMBOLSUFFIX}"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
endif()
|
||||
|
||||
string(REPLACE "OPENBLAS_DOJOB_CALLBACK_TYPE" "openblas_dojob_callback"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE "OPENBLAS_THREADS_CALLBACK_TYPE" "openblas_threads_callback"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
string(REPLACE "OPENBLAS_XERBLA_HANDLER_TYPE" "openblas_xerbla_handler"
|
||||
CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS_NEW}")
|
||||
|
||||
file(WRITE ${CBLAS_H} "${CBLAS_H_CONTENTS_NEW}")
|
||||
install (FILES ${CBLAS_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
endif()
|
||||
@@ -764,4 +850,3 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PN}ConfigVersion.cmake
|
||||
install(EXPORT "${PN}${SUFFIX64}Targets"
|
||||
NAMESPACE "${PN}${SUFFIX64}::"
|
||||
DESTINATION ${CMAKECONFIG_INSTALL_DIR})
|
||||
|
||||
|
||||
@@ -275,3 +275,16 @@ In chronological order:
|
||||
|
||||
* Fadi Arafeh <fadi.arafeh@arm.com>
|
||||
* [2026-03-05] Accelerate SVE128 SBGEMM/BGEMM
|
||||
|
||||
* Nathan Sircombe <nathan.sircombe@arm.com>
|
||||
* [2026-04-16] Add CPU ID for Neoverse V3
|
||||
hheei <hheei@users.noreply.github.com>
|
||||
|
||||
* Aadityansha Verma <https://github.com/aadityansha06>
|
||||
* [2026-07-14] Add independent transpose support for C in GEADD (sgeadd/dgeadd/cgeadd/zgeadd).
|
||||
|
||||
* Vincent Lovero <https://github.com/vlovero>
|
||||
* [2026-08-11] ARM v9.2 SME GEMM kernels for Apple M
|
||||
|
||||
* Hugo Meiland <hugo@meiland.nl>
|
||||
* [2026-08-09] Add Cortex-A72 DGEMM 6x8 microkernel and blocking
|
||||
|
||||
+247
-1
@@ -1,7 +1,253 @@
|
||||
OpenBLAS ChangeLog
|
||||
====================================================================
|
||||
Version 0.3.34
|
||||
16-Jul-2026
|
||||
|
||||
general:
|
||||
- Fixed potential race conditions between concurrent calls to level3 BLAS
|
||||
functions (inadvertent use of non-unified locks)
|
||||
- Fixed potential race condition in GETRF
|
||||
- Added or improved multithreading thresholds in SPR,SPR2,SYR,SYR2,TBMV,TPMV
|
||||
- Added multithreading thresholds to GETRS, LAED3, LASWP, LAUUM, TRTRS, ZTRTRI
|
||||
- Added a BLAS extension for overriding the default error handler (XERBLA) function
|
||||
- Reimplemented the BLAS extension GEADD to support independent transposition of
|
||||
both matrices (unlike the previous, ATLAS-like implementation)
|
||||
- Guarded against spurious NaN values in the reimplemented ?LAED3
|
||||
- Fixed compilation of the BLAS extension tests with CMake
|
||||
- Fixed spurious and conflicting setting of job numbers in gmake builds
|
||||
- Fixed a potential linking issue with the fortran runtime in the BLAS tests
|
||||
- Fixed potential access to unrelated memory in the C fallback versions of LAPACK
|
||||
functions ILAENV and IPARMQ
|
||||
- Fixed the generated pkgfile to support spaces in path names
|
||||
- Added support for compilation with the experimental, LLVM-based memory-safe C toolchain
|
||||
known as Fil-C
|
||||
- Imported recent updates from Reference-LAPACK to realign with its upcoming 3.13.0 release:
|
||||
- Added non-trivial terminating case to ?LARFT calculation (Reference-LAPACK PR 1163)
|
||||
- Fixed workspace calculation for CUNMLQ with K=0 (Reference-LAPACK PR 1225)
|
||||
- Rearranged computations in C/ZLARTG to avoid large intermediates (PR 1245)
|
||||
- Fixed wrong Y increment used in ?ORDB3/?UNBDB3 (Reference-LAPACK PR 1265)
|
||||
- Fixed wrong name reported in XERBLA call of ZLA_SYRFSX_EXTENDED (PR 1268)
|
||||
- Fixed wrong JOBA type in SGESVJ call of SGEJSV (Reference-LAPACK PR 1269)
|
||||
- Fixed wrong workspace in DGEJSV corrupting memory in DGESVJ (PR 1270)
|
||||
- Fixed wrong or missing EXTERNAL declarations (Reference-LAPACK PR 1271)
|
||||
- Fixed wrong operand number in errors of GGSVD3,UN/ORBDB4,UN/ORCSD (PR 1272)
|
||||
- Fixed sign of error flag in LWORK check of LAQZ0 (Reference-LAPACK PR 1273)
|
||||
- Fixed too small workspace query result from SGGEV3 (Reference-LAPACK PR 1274)
|
||||
- Fixed DLASWLQ not rejecting NB=0 (Reference-LAPACK PR 1275)
|
||||
- Avoid immediate overflows in GEJSV,GESVJ,GESVDX,GEDMD (Reference-LAPACK PR 1283)
|
||||
- Ignore LDU value when U unused in LAPACKE_?GESVD_WORK (Reference-LAPACK PR 1284)
|
||||
- Fixed premature return before fallback code in BDSQR (Reference-LAPACK PR 1285)
|
||||
- Increased tolerance in LASD2 to improve BDSDC stability (Reference-LAPACK PR 1286)
|
||||
- Fixed row-major A dimension for SIDE=R in LAPACKE_?TPRFB_WORK (PR 1287)
|
||||
- Fixed seed advancement in SLARUV/DLARUV (Reference-LAPACK PR 1288)
|
||||
- Fixed workspace queries for TZRZF/UNMRZ in GELSY (Reference-LAPACK PRs 1289/1325)
|
||||
- Avoid immediate overflows in ?LARFGP (Reference-LAPACK PR 1290)
|
||||
- Added handling of degenerate cases in OR/UNCSD2BY1 (Reference-LAPACK PR 1291)
|
||||
- Fixed workspace for tiny inputs in ORM/UNM-L/R-Q and -Q-L/R (PR 1292)
|
||||
- Scaled convergence thresholds in ?BBCSD to improve accuracy (PR 1293)
|
||||
- Fixed integer overflow in the LAPACKE nancheck helpers (Reference-LAPACK PR 1294)
|
||||
- Relaxed eigenvalue consistency checks in testsuite (Reference-LAPACK PR 1297)
|
||||
- Fixed test failures in ?CHKLQ with NB=1 and M=N (Reference-LAPACK PR 1298)
|
||||
- Switched to QR algorithm in ?BDSDC for bidiagonal SVD with vectors (PR 1300)
|
||||
- Replaced HUGE intrinsic in ?TGSJA with parameter for consistency (PR 1305)
|
||||
- Corrected description of QMAX parameter in ?LASQ3 (Reference-LAPACK PR 1307)
|
||||
- Fixed bad scaling in ?LARFF that slowed down DSYEVR/ZHEEVR (PR 1309)
|
||||
- Fixed handling of negative increments in ?LARF/?LARF1F/?LARF1L (PR 1315)
|
||||
- Increased tolerances in ?LAED to match changes in ?LASD (PR 1317)
|
||||
- Fixed LAPACKE_?lacpy_work destroying data in row-major mode (PR 1318)
|
||||
|
||||
arm:
|
||||
- Added a significantly faster SGEMM kernel
|
||||
|
||||
arm64:
|
||||
- Added optimized kernels for OMATCOPY_CT and OMATCOPY_RT on all targets
|
||||
- Fixed SDOT/DDOT on non-SVE-capable cpus not initializing the result correctly
|
||||
- Fixed miscompilation of CGETF2/ZGETF2 by LLVM on Apple M
|
||||
- Fixed SSYRK miscalculation on Apple M systems bigger than the Mac mini
|
||||
- Fixed remaining cases of CMake build failure due to long argument lists on OSX
|
||||
- On OSX, reduced the list of DYNAMIC_ARCH targets to those relevant for this os
|
||||
- Fixed platform detection and cross-builds to iOS on OSX with AppleClang
|
||||
- Fixed gmake builds for SME targets on OSX with AppleClang
|
||||
- Improved the compiler test for SME compatibility in the CMake build files
|
||||
- Fixed runtime detection of SME in DYNAMIC_ARCH builds made with CMake
|
||||
- Restored a fix for building DYNAMIC_ARCH under Windows on Arm that was inadvertently
|
||||
dropped in 0.3.33)
|
||||
- Corrected the selection criteria for the SME-based SGEMM kernel on Apple M
|
||||
- Fixed DYNAMIC_ARCH builds on hosts without SVE capability
|
||||
- Fixed building a shared library with NAG Fortran on OSX
|
||||
- Fixed misdetection of C11 capability (and resulting race conditions during concurrent
|
||||
calls) in Clang builds under OSX
|
||||
- Fixed miscalculation of Apple M cpu time leading to benchmarks 40 times too slow
|
||||
|
||||
loongarch64:
|
||||
- Corrected generation of the LSX/LASX status flags in the configuration files
|
||||
- Fixed potential reads of memory beyond the array bounds in the LA464 SGEMM kernel
|
||||
- Added optimized SDOT, ICAMIN/IZAMIN and ZGEMM kernels for 2K3000
|
||||
|
||||
power:
|
||||
- Fixed an incompatibility in the assembly kernels for SCAL on FreeBSD
|
||||
- Fixed a potentially spurious check for gfortran in gmake builds with LLVM
|
||||
that could make POWER9/10 builds fall back to POWER8 kernels
|
||||
- Improved build flags and cpu register constraints for POWER10
|
||||
- Fixed linking issues on BSD
|
||||
|
||||
riscv64:
|
||||
- Fixed compilation for DYNAMIC_ARCH with BUILD_BFLOAT16 defined
|
||||
- Fixed SGEMM and DGEMM errors on ZVL256 introduced in 0.3.33
|
||||
- Sped up GEMV on C910V and ZVL256B targets
|
||||
- Improved the x280 S/DROTM kernel and enabled it on ZVL128B/ZVL256B
|
||||
- Added optimized STRSM kernels for ZVL128B/ZVL256B
|
||||
- Added optimized D/C/ZTRSM kernels (RN and RT cases) for ZVL128B/ZVL256B
|
||||
- Added a dedicated target for the SiFive U74 with optimized SGEMM and DGEMM kernels
|
||||
- Made L2 cache size available at runtime for scaling GEMM block sizes
|
||||
|
||||
x86_64:
|
||||
- Fixed remaining cases of CMake build failure due to long argument lists on OSX
|
||||
- Improved cpu capability check for recent Zhaoxin cpus
|
||||
- Fixed wrong TRSM results on AMD Barcelona (and Ryzen systems in 32bit builds)
|
||||
- Added autodetection support for the fake Opteron-like CPUID used by QEMU on AMD hardware
|
||||
- Fixed automatic setting of the BINARY=32 option when building with 32bit toolchains
|
||||
- Fixed miscompilation of GEMM,SYR2K and TPMV kernels with gcc15/gcc16 on 32bit FreeBSD
|
||||
|
||||
====================================================================
|
||||
Version 0.3.33
|
||||
23-Apr-2026
|
||||
|
||||
general:
|
||||
- fixed an incorrect cast in the SBGEMM test case that could lead to spurious test failures
|
||||
- fixed an invalid memory access in the converted C version of the CBLAS tests
|
||||
- made the BIGNUMA setting automatic when the number of cores exceeds 256
|
||||
- Imported recent updates from Reference-LAPACK to realign with its upcoming 3.13.0 release:
|
||||
- Implement ?LARF1F and ?ORM2R (Reference-LAPACK PRs 1019,1020,1196,1257)
|
||||
- Change loop order in ?GETC2 to improve performance (Reference-LAPACK PR 1023)
|
||||
- Change WORK array dimension in ?GELQS/?GEQRS (Reference-LAPACK PR 1094)
|
||||
- Add NaN checks for input matrix A in ?GEEV (Reference-LAPACK PR 1136)
|
||||
- Fix support for jobu/v in LAPACKE_?GESVDQ_WORK (Reference-LAPACK PRs 1146,1221)
|
||||
- Fix display of version number in LAPACK testsuite (Reference-LAPACK PR 1149)
|
||||
- Fix DGGES test seed to avoid bad matrix cases (Reference-LAPACK PR 1187)
|
||||
- Fix truncation of large WORK array sizes in ZHE (Reference-LAPACK PR 1195)
|
||||
- Fix overwriting of LDSWORK parameter in ?TRSYL3 (Reference-LAPACK PR 1206)
|
||||
- Fix overwriting of error states in some EIG tests (Reference-LAPACK PR 1207)
|
||||
- Remove unused parameter in DORBDB3/ZUNBDB3 (Reference-LAPACK PR 1209)
|
||||
- Re-enable testing of ?BB and ?GG driver functions (Reference-LAPACK PR 1211)
|
||||
- Fix workspace size calculation in ?TGSEN (Reference-LAPACK PR 774)
|
||||
- Fix typos in the EIG DMD tests and initialized the cutoff variable (PR 1212,1228)
|
||||
- Optimized looping in ?LACPY/?LASCL/?LANTR with fat matrix and UPLO=L (PR 1251)
|
||||
|
||||
arm64:
|
||||
- worked around a serious miscompilation of the DDOT kernel by GCC15, affecting
|
||||
most non-SVE targets, and SVE targets in the case of non-unit array stride)
|
||||
- fixed an accuracy issue in the GEMV kernel for Neoverse V1 and other SVE targets
|
||||
- fixed broken STRMM and SSYMM in DYNAMIC_ARCH builds when running on non-SME hardware
|
||||
- added an optimized SHGEMM kernel for Neoverse N2
|
||||
- fixed DYNAMIC_ARCH builds under Windows on Arm
|
||||
- Added autodetection of Cortex A75/A76 in DYNAMIC_ARCH builds
|
||||
- Added autodetection of Neoverse V3, currently supported through V2 kernels
|
||||
- Re-added support for the "VORTEX" target in DYNAMIC_ARCH builds with DYNAMIC_LIST
|
||||
- Fixed CMake-based builds that use the "Ninja" generator
|
||||
|
||||
loongarch64:
|
||||
- fixed a build failure due to missing support for the new half-precision float type
|
||||
- fixed a long-standing bug in asserting 64bit capability in the c_check helper script
|
||||
|
||||
x86_64:
|
||||
- added a workaround for miscompilation of the AVX512 GEMM kernels by LLVM on Windows
|
||||
- fixed a build failure in the LAED3 code when compiling with MinGW on Windows
|
||||
- fixed CMake-based compilation with the NVIDIA HPC compiler
|
||||
- Fixed CMake-based builds that use the "Ninja" generator
|
||||
|
||||
wasm:
|
||||
- added optimized kernels for STRSM and DTRSM
|
||||
- added a 4x4 WASM SIMD128 GEMM microkernel for SGEMM/DGEMM with matching
|
||||
4-wide packing and TRMM, using relaxed SIMD madd in the inner loop
|
||||
- gated leftover WASM TRSM call counters behind OPENBLAS_WASM_TRSM_PROFILE
|
||||
|
||||
====================================================================
|
||||
Version 0.3.32
|
||||
23-Mar-2026
|
||||
|
||||
general:
|
||||
- Moved the preliminary support for a Web Assembly target to its own WASM
|
||||
architecture and WASM128_GENERIC target
|
||||
- Fixed a potential performance difference between dedicated compilation for
|
||||
a target and its representation in DYNAMIC_ARCH builds by making additional
|
||||
cpu-specific parameters available to the DYNAMIC_ARCH configuration
|
||||
- Fixed the reimplementation of LAPACK ?GESV to conform to the reference (i.e.
|
||||
compute the LU factorization even when NRHS is zero)
|
||||
- Improved the error message that is displayed when the compile-time allocation
|
||||
of memory buffers is exceeded
|
||||
- Fixed a problem with non-serialized accesses to parallelized SYRK by concurrent
|
||||
callers
|
||||
- Fixed an ABI mismatch in the internal version of CDOT/ZDOT used by the C fallback
|
||||
versions of the LAPACK source
|
||||
- Improved the f_check script for detecting the Fortran compiler to handle embedded
|
||||
dashes in path names
|
||||
- Fixed several memory access issues in the utests that were detected by Address
|
||||
Sanitizer
|
||||
- Fixed Makefile errors in cases where only a subset of precision types was selected
|
||||
- Fixed missing function errors in Makefile builds without LAPACK or without threads
|
||||
- Fixed a syntax error in the benchmarks Makefile
|
||||
- Fixed compiler warnings in the CBLAS testsuite
|
||||
- Fixed the OpenMP compiler option used with the Intel Ifx compiler
|
||||
- Updated the README sections on supported cpus and operating systems, and added
|
||||
notes pertaining to JAVA
|
||||
- Updated the documentation page for supported BLAS-like extensions
|
||||
- included fixes from the Reference-LAPACK project:
|
||||
- Improved step length selection in the fallback path of ?LAED4
|
||||
(Reference-LAPACK PR 1191)
|
||||
- Rounding up of LWORK and removal of redundant type conversions in the GVD
|
||||
functions (Reference-LAPACK PR 1202)
|
||||
- internal errors were getting ignored in calculation of selected eigenvalues
|
||||
(Reference-LAPACK PR 1204)
|
||||
|
||||
arm64:
|
||||
- Fixed a potential miscompilation of the SDOT/DDOT/DSDOT kernels
|
||||
- Fixed DYNAMIC_ARCH compilation with CMake and compilers lacking SVE support
|
||||
- Improved the performance of BGEMM and SBGEMM kernels for Neoverse V2
|
||||
- Added optimized SSUM and DSUM kernels for Neoverse N1
|
||||
- Added preliminary support for Neoverse V3 cpus as NEOVERSEV2
|
||||
- Added cpu autodetection of Cortex A725 and X925 cpus
|
||||
- Fixed a CMake build problem with flang on Mac OS
|
||||
- Fixed build problems with gcc versions 12 and earlier that do not support fp16
|
||||
- Fixed compilation of GEMM kernels for VORTEXM4/ARMV9SME without multithreading
|
||||
- Fixed the optimized CDOT/ZDOT kernel to compile with LLVM under Windows on Arm
|
||||
- Renamed the copy of the DllMain function used in static linking on MS Windows to
|
||||
OpenBLASDllMain to avoid symbol name conflicts with other libraries
|
||||
|
||||
ioongarch64:
|
||||
- fixed POTRF returning wrong results on LA464 due to a wrong parameter setting
|
||||
|
||||
power:
|
||||
- Fixed compilation problems caused by missing support for half-precision floats (FP16)
|
||||
- Fixed a potential miscompilation of the POWER10 DGEMV kernel by limiting its optimization
|
||||
level
|
||||
- Fixed a SCAL issue on PPCG4/PPC970 running Linux
|
||||
- Worked around a SCAL issue on PPC970 running FreeBSD by switching to the generic C kernels
|
||||
|
||||
riscv64:
|
||||
- Optimized the CROT/ZROT kernel for vector length 128 in the non-unit stride path
|
||||
- Improved SBGEMM/SHGEMM and related helper functions for type conversion
|
||||
- Fixed probing for BFLOAT16 support in DYNAMIC_ARCH cpu detection at runtime
|
||||
|
||||
x86_64:
|
||||
- Fixed a potential miscompilation (by gcc 15.x) of the AVX512 SGEMM kernel for "small"
|
||||
matrix sizes
|
||||
- Fixed the SROT and DROT kernels for Haswell to have consistent (FMA) rounding
|
||||
in the main loop and tail call
|
||||
- Added automatic detection of Intel Arrow Lake H/U, Panther Lake and Jasper Lake
|
||||
- Added automatic detection of Intel Emerald Rapids and upcoming cpu models
|
||||
- Updated the cache size translation table in the cpu model autodetection code
|
||||
- Improved cpu detection fallback to also include Nehalem as a non-AVX option
|
||||
- Fixed a Makefile build issue with clang and the SkylakeX SGEMM kernel
|
||||
- Renamed the copy of the DllMain function used in static linking on MS Windows to
|
||||
OpenBLASDllMain to avoid symbol name conflicts with other libraries
|
||||
|
||||
wasm:
|
||||
- Added optimized intrinsics kernels for SGEMM and DGEMM as well as DOT, ROT and SUM
|
||||
|
||||
====================================================================
|
||||
Version 0.3.31
|
||||
15-Jan-2025
|
||||
15-Jan-2026
|
||||
|
||||
general:
|
||||
- reverted a matrix partitioning optimization from 0.3.30 that could lead to
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
TOPDIR = .
|
||||
include ./Makefile.system
|
||||
LNCMD = ln -fs
|
||||
OSNAME_DISPLAY ?= $(OSNAME)
|
||||
ifeq ($(FIXED_LIBNAME), 1)
|
||||
LNCMD = true
|
||||
endif
|
||||
@@ -58,7 +59,7 @@ all :: tests
|
||||
@echo
|
||||
@echo " OpenBLAS build complete. ($(LIB_COMPONENTS))"
|
||||
@echo
|
||||
@echo " OS ... $(OSNAME) "
|
||||
@echo " OS ... $(OSNAME_DISPLAY) "
|
||||
@echo " Architecture ... $(ARCH) "
|
||||
ifndef BINARY64
|
||||
@echo " BINARY ... 32bit "
|
||||
|
||||
+7
-9
@@ -34,7 +34,7 @@ endif
|
||||
ifeq ($(C_COMPILER), FUJITSU)
|
||||
ISCLANG=1
|
||||
endif
|
||||
ifneq (1, $(filter 1,$(GCCVERSIONGT4) $(ISCLANG)))
|
||||
ifeq "$(or $(GCCVERSIONGT4),$(ISCLANG))" ""
|
||||
CCOMMON_OPT += -march=armv8-a
|
||||
ifneq ($(F_COMPILER), NAG)
|
||||
FCOMMON_OPT += -march=armv8-a
|
||||
@@ -59,11 +59,11 @@ endif
|
||||
endif
|
||||
|
||||
ifeq ($(CORE), ARMV9SME)
|
||||
CCOMMON_OPT += -march=armv9-a+sve2+sme
|
||||
CCOMMON_OPT += -march=armv9-a+sve2+sme+sme-f64f64
|
||||
FCOMMON_OPT += -march=armv9-a+sve2
|
||||
ifdef OS_WINDOWS
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
CCOMMON_OPT += --aarch64-stack-hazard-size=0
|
||||
CCOMMON_OPT += -mllvm --aarch64-stack-hazard-size=0
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -310,12 +310,10 @@ endif
|
||||
|
||||
ifeq ($(CORE), VORTEXM4)
|
||||
ifneq ($(C_COMPILER), GCC)
|
||||
ifeq ($(APPLECLANG),1)
|
||||
CCOMMON_OPT += -march=armv8.4-a+sme
|
||||
else
|
||||
CCOMMON_OPT += -march=armv8.4-a+sme
|
||||
override LDFLAGS += -lclang_rt_builtins-aarch64
|
||||
endif
|
||||
CCOMMON_OPT += -march=armv8.4-a+sme+sme-f64f64
|
||||
#ifneq ($(APPLECLANG),1)
|
||||
#override LDFLAGS += -lclang_rt_builtins-aarch64
|
||||
#endif
|
||||
else
|
||||
CCOMMON_OPT += -march=armv8.4-a
|
||||
endif
|
||||
|
||||
+49
-39
@@ -32,7 +32,7 @@ PKG_EXTRALIB := $(EXTRALIB)
|
||||
ifeq ($(INTERFACE64),1)
|
||||
SUFFIX64=64
|
||||
endif
|
||||
PKGFILE="$(DESTDIR)$(OPENBLAS_PKGCONFIG_DIR)/$(LIBSONAMEBASE)$(SUFFIX64).pc"
|
||||
PKGFILE := $(DESTDIR)$(OPENBLAS_PKGCONFIG_DIR)/$(LIBSONAMEBASE)$(SUFFIX64).pc
|
||||
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
ifeq ($(C_COMPILER), PGI)
|
||||
@@ -73,7 +73,10 @@ install : lib.grd
|
||||
|
||||
ifneq ($(NO_CBLAS),1)
|
||||
@echo Generating cblas.h in $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)
|
||||
@cp cblas.h cblas.tmp
|
||||
@sed -e 's/openblas_dojob_callback/OPENBLAS_DOJOB_CALLBACK_TYPE/g' \
|
||||
-e 's/openblas_threads_callback/OPENBLAS_THREADS_CALLBACK_TYPE/g' \
|
||||
-e 's/openblas_xerbla_handler/OPENBLAS_XERBLA_HANDLER_TYPE/g' \
|
||||
cblas.h > cblas.tmp
|
||||
ifdef SYMBOLPREFIX
|
||||
@sed 's/cblas[^() ]*/$(SYMBOLPREFIX)&/g' cblas.tmp > cblas.tmp2
|
||||
@sed 's/openblas[^() ]*/$(SYMBOLPREFIX)&/g' cblas.tmp2 > cblas.tmp
|
||||
@@ -88,7 +91,16 @@ ifdef SYMBOLSUFFIX
|
||||
@sed 's/\(openblas_complex_\)\([^ ]*\)$(SYMBOLSUFFIX)/\1\2 /g' cblas.tmp > cblas.tmp2
|
||||
@sed 's/goto[^() ]*/&$(SYMBOLSUFFIX)/g' cblas.tmp2 > cblas.tmp
|
||||
endif
|
||||
@sed 's/common/openblas_config/g' cblas.tmp > "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/cblas.h"
|
||||
|
||||
@sed 's/OPENBLAS_EXPORT //' cblas.tmp > cblas.tmp2
|
||||
@sed 's/common/openblas_config/g' cblas.tmp2 > cblas.tmp
|
||||
|
||||
@sed -e 's/OPENBLAS_DOJOB_CALLBACK_TYPE/openblas_dojob_callback/g' \
|
||||
-e 's/OPENBLAS_THREADS_CALLBACK_TYPE/openblas_threads_callback/g' \
|
||||
-e 's/OPENBLAS_XERBLA_HANDLER_TYPE/openblas_xerbla_handler/g' \
|
||||
-e 's/common/openblas_config/g' \
|
||||
cblas.tmp > "$(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/cblas.h"
|
||||
|
||||
endif
|
||||
|
||||
ifneq ($(OSNAME), AIX)
|
||||
@@ -191,8 +203,6 @@ endif
|
||||
ifeq ($(INTERFACE64),1)
|
||||
SUFFIX64=64
|
||||
endif
|
||||
PKGFILE="$(DESTDIR)$(OPENBLAS_PKGCONFIG_DIR)/$(LIBSONAMEBASE)$(SUFFIX64).pc"
|
||||
|
||||
@echo Generating $(LIBSONAMEBASE)$(SUFFIX64).pc in "$(DESTDIR)$(OPENBLAS_PKGCONFIG_DIR)"
|
||||
@echo 'libdir='$(OPENBLAS_LIBRARY_DIR) > "$(PKGFILE)"
|
||||
@echo 'libprefix='$(LIBNAMEPREFIX) >> "$(PKGFILE)"
|
||||
@@ -271,46 +281,46 @@ endif
|
||||
|
||||
install_tests : lib.grd
|
||||
ifneq ($(ONLY_CBLAS), 1)
|
||||
@install -m 666 utest/openblas_utest $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 utest/openblas_utest_ext $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 utest/openblas_utest$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 utest/openblas_utest_ext$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
|
||||
ifndef NO_FBLAS
|
||||
ifeq ($(BUILD_BFLOAT16),1)
|
||||
@install -m 666 test/test_sbgemm $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/test_sbgemm$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
@install -m 666 test/sblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat2.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/sblat3.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
@install -m 666 test/dblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat2.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/dblat3.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
@install -m 666 test/cblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat2.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat3.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
ifeq ($(ARCH), filter($(ARCH), x86 x86_64 ia64 MIPS))
|
||||
@install -m 666 test/cblat3_3m $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat3_3m$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/cblat3_3m.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
@install -m 666 test/zblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat2.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat3.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
ifeq ($(ARCH), filter($(ARCH), x86 x86_64 ia64 MIPS))
|
||||
@install -m 666 test/zblat3_3m $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat3_3m$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 test/zblat3_3m.dat $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
endif
|
||||
@@ -318,46 +328,46 @@ endif
|
||||
endif
|
||||
ifneq ($(ONLY_CBLAS), 1)
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
@install -m 666 ctest/xscblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xscblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xscblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xscblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xscblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xscblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/sin2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/sin3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
@install -m 666 ctest/xdcblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xdcblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xdcblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xdcblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xdcblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xdcblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/din2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/din3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
@install -m 666 ctest/xccblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xccblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xccblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xccblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xccblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xccblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/cin2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/cin3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
ifeq ($(ARCH), filter($(ARCH), x86 x86_64 ia64 MIPS))
|
||||
@install -m 666 ctest/xccblat3_3m $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xccblat3_3m$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/cin3_3m $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
@install -m 666 ctest/xzcblat1 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xzcblat2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xzcblat3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xzcblat1$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xzcblat2$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xzcblat3$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/zin2 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/zin3 $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
ifeq ($(ARCH), filter($(ARCH), x86 x86_64 ia64 MIPS))
|
||||
@install -m 666 ctest/xzcblat3_3m $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/xzcblat3_3m$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 ctest/zin3_3m $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
ifeq ($(CPP_THREAD_SAFETY_TEST), 1)
|
||||
@install -m 666 cpp_thread_test/dgemm_tester $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 cpp_thread_test/dgemv_tester $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 cpp_thread_test/dgemm_tester$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 cpp_thread_test/dgemm_mixed_tester$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
@install -m 666 cpp_thread_test/dgemv_tester$(EXE) $(DESTDIR)$(OPENBLAS_BINARY_DIR)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
@@ -112,6 +112,11 @@ endif
|
||||
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
CCOMMON_OPT += -fno-integrated-as
|
||||
ifeq ($(OSNAME), FreeBSD)
|
||||
ifeq ($(CORE), $(filter $(CORE),POWER9 POWER10))
|
||||
CCOMMON_OPT += -Wa,-mpwr10
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
# workaround for C->FORTRAN ABI violation in LAPACKE
|
||||
ifeq ($(F_COMPILER), GFORTRAN)
|
||||
|
||||
@@ -75,6 +75,10 @@ ifeq ($(TARGET), RISCV64_GENERIC)
|
||||
TARGET_FLAGS = -march=rv64imafdc -mabi=lp64d
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET), U74)
|
||||
TARGET_FLAGS = -march=rv64imafdc_zba_zbb -mabi=lp64d
|
||||
endif
|
||||
|
||||
all: getarch_2nd
|
||||
./getarch_2nd 0 >> $(TARGET_MAKE)
|
||||
./getarch_2nd 1 >> $(TARGET_CONF)
|
||||
|
||||
@@ -25,3 +25,7 @@ ifeq ($(CORE), RISCV64_GENERIC)
|
||||
CCOMMON_OPT += -march=rv64imafdc -mabi=lp64d
|
||||
FCOMMON_OPT += -march=rv64imafdc -mabi=lp64d
|
||||
endif
|
||||
ifeq ($(CORE), U74)
|
||||
CCOMMON_OPT += -march=rv64imafdc_zba_zbb -mabi=lp64d -mtune=sifive-u74
|
||||
FCOMMON_OPT += -march=rv64imafdc_zba_zbb -mabi=lp64d -mtune=sifive-u74
|
||||
endif
|
||||
|
||||
+11
-11
@@ -3,17 +3,17 @@
|
||||
#
|
||||
|
||||
# This library's version
|
||||
VERSION = 0.3.31.dev
|
||||
VERSION = 0.3.34.dev
|
||||
|
||||
# If you set this prefix, the library name will be lib$(LIBNAMESUFFIX)openblas.a
|
||||
# and lib$(LIBNAMESUFFIX)openblas.so, with a matching soname in the shared library
|
||||
#
|
||||
# If you set this prefix, the library name will be lib$(LIBNAMEPREFIX)openblas.a
|
||||
# and lib$(LIBNAMEPREFIX)openblas.so, with a matching soname in the shared library
|
||||
#
|
||||
# LIBNAMEPREFIX = scipy
|
||||
|
||||
# If you set the suffix, the library name will be libopenblas_$(LIBNAMESUFFIX).a
|
||||
# and libopenblas_$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library
|
||||
# is libopenblas_$(LIBNAMESUFFIX).so.0.
|
||||
# LIBNAMESUFFIX = omp
|
||||
# If you set the suffix, the library name will be libopenblas$(LIBNAMESUFFIX).a
|
||||
# and libopenblas$(LIBNAMESUFFIX).so. Meanwhile, the soname in shared library
|
||||
# is libopenblas$(LIBNAMESUFFIX).so.0.
|
||||
# LIBNAMESUFFIX = _omp
|
||||
|
||||
# You can specify the target architecture, otherwise it's
|
||||
# automatically detected.
|
||||
@@ -290,10 +290,10 @@ COMMON_PROF = -pg
|
||||
# This is mostly intended as a developer feature to spot regressions, but users and
|
||||
# package maintainers can enable this if they have doubts about the thread safety of
|
||||
# the library, given the configuration in this file.
|
||||
# By default, the thread safety tester launches 52 concurrent calculations at the same
|
||||
# time.
|
||||
# By default, the thread safety testers launch many concurrent calculations at
|
||||
# the same time.
|
||||
#
|
||||
# Please note that the test uses ~1300 MiB of RAM for the DGEMM test.
|
||||
# Please note that the tests use ~1300 MiB of RAM for the DGEMM test.
|
||||
#
|
||||
# The test requires CBLAS to be built, a C++11 capable compiler and the presence of
|
||||
# an OpenMP implementation. If you are cross-compiling this test will probably not
|
||||
|
||||
+41
-3
@@ -194,7 +194,7 @@ ifeq ($(TARGET_CORE), EXCAVATOR)
|
||||
GETARCH_FLAGS := -DFORCE_BARCELONA
|
||||
endif
|
||||
ifeq ($(TARGET_CORE), ZEN)
|
||||
GETARCH_FLAGS := -DFORCE_BARCELONA
|
||||
GETARCH_FLAGS := -DFORCE_NEHALEM
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -247,6 +247,11 @@ NO_PARALLEL_MAKE=0
|
||||
endif
|
||||
GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
|
||||
|
||||
ifndef MAKE_NB_JOBS
|
||||
ifneq (,$(patsubst -j%,%,$(filter -j%,$(MAKEFLAGS))))
|
||||
MAKE_NB_JOBS=-1
|
||||
endif
|
||||
endif
|
||||
ifdef MAKE_NB_JOBS
|
||||
GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
|
||||
endif
|
||||
@@ -280,7 +285,7 @@ GEMM_GEMV_FORWARD = 1
|
||||
SBGEMM_GEMV_FORWARD = 1
|
||||
BGEMM_GEMV_FORWARD = 1
|
||||
endif
|
||||
ifeq ($(ARCH), riscv)
|
||||
ifeq ($(ARCH), riscv64)
|
||||
GEMM_GEMV_FORWARD = 1
|
||||
endif
|
||||
ifeq ($(ARCH), power)
|
||||
@@ -417,6 +422,9 @@ endif
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
CLANGVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
|
||||
CLANGVERSIONGTEQ12 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 12)
|
||||
ifeq ($(F_COMPILER), GFORTRAN)
|
||||
GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
@@ -469,7 +477,7 @@ EXTRALIB += -lm
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), $(filter $(OSNAME),FreeBSD OpenBSD NetBSD DragonFly))
|
||||
ifeq ($(ARCH), $(filter $(ARCH),arm arm64))
|
||||
ifeq ($(ARCH), $(filter $(ARCH),arm arm64 power))
|
||||
EXTRALIB += -lm
|
||||
endif
|
||||
endif
|
||||
@@ -592,11 +600,13 @@ ifeq ($(F_COMPILER), GFORTRAN)
|
||||
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
|
||||
CCOMMON_OPT += -fvisibility=hidden
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION
|
||||
CCOMMON_OPT += -fvisibility=hidden
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
endif
|
||||
@@ -615,11 +625,13 @@ ifeq ($(F_COMPILER), GFORTRAN)
|
||||
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
|
||||
CCOMMON_OPT += -fvisibility=hidden
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
ifeq ($(C_COMPILER), CLANG)
|
||||
EXPRECISION = 1
|
||||
CCOMMON_OPT += -DEXPRECISION
|
||||
CCOMMON_OPT += -fvisibility=hidden
|
||||
FCOMMON_OPT += -m128bit-long-double
|
||||
endif
|
||||
endif
|
||||
@@ -733,6 +745,20 @@ DYNAMIC_CORE += THUNDERX2T99
|
||||
DYNAMIC_CORE += TSV110
|
||||
DYNAMIC_CORE += EMAG8180
|
||||
DYNAMIC_CORE += THUNDERX3T110
|
||||
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
DYNAMIC_CORE = ARMV8
|
||||
DYNAMIC_CORE += NEOVERSEN1
|
||||
ifneq ($(NO_SME), 1)
|
||||
DYNAMIC_CORE += ARMV9SME
|
||||
ifeq ($(OSNAME), Darwin)
|
||||
ifneq ($(C_COMPILER), GCC)
|
||||
DYNAMIC_CORE += VORTEXM4
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef DYNAMIC_LIST
|
||||
override DYNAMIC_CORE = ARMV8 $(DYNAMIC_LIST)
|
||||
XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_ARMV8
|
||||
@@ -1626,7 +1652,11 @@ ifneq ($(C_COMPILER), SUN)
|
||||
CCOMMON_OPT += -UASMNAME -UASMFNAME -UNAME -UCNAME -UCHAR_NAME -UCHAR_CNAME
|
||||
endif
|
||||
endif
|
||||
ifeq ( ,$(findstring pizfix,$(CEXTRALIB)))
|
||||
CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
|
||||
else
|
||||
CCOMMON_OPT += -DASMNAME=$(FU)pizlonated_$(*F) -DASMFNAME=$(FU)pizlonated_$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
|
||||
endif
|
||||
|
||||
ifeq ($(CORE), PPC440)
|
||||
CCOMMON_OPT += -DALLOC_QALLOC
|
||||
@@ -1796,6 +1826,14 @@ ifndef LIBSUFFIX
|
||||
LIBSUFFIX = a
|
||||
endif
|
||||
|
||||
ifndef EXE
|
||||
ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT))
|
||||
EXE = .exe
|
||||
else
|
||||
EXE =
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(DYNAMIC_ARCH), 1)
|
||||
ifndef SMP
|
||||
LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
CCOMMON_OPT += -msimd128
|
||||
CCOMMON_OPT += -msimd128 -mrelaxed-simd
|
||||
|
||||
@@ -2,15 +2,10 @@
|
||||
|
||||
[](https://gitter.im/xianyi/OpenBLAS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
Cirrus CI: [](https://cirrus-ci.com/github/xianyi/OpenBLAS)
|
||||
GitHub Actions: [](https://github.com/OpenMathLib/OpenBLAS/actions/workflows/dynamic_arch.yml?query=branch%3Adevelop)
|
||||
|
||||
Azure Pipelines: [](https://dev.azure.com/xianyi/OpenBLAS/_build/latest?definitionId=1&branchName=develop)
|
||||
|
||||
|
||||
[](https://dev.azure.com/xianyi/OpenBLAS/_build/latest?definitionId=1&branchName=develop)
|
||||
|
||||
OSUOSL POWERCI [](http://powerci.osuosl.org/job/OpenBLAS_gh/job/develop/)
|
||||
|
||||
OSUOSL IBMZ-CI [](http://ibmz-ci.osuosl.org/job/OpenBLAS-Z/job/develop/)
|
||||
## Introduction
|
||||
|
||||
OpenBLAS is an optimized BLAS (Basic Linear Algebra Subprograms) library based on GotoBLAS2 1.13 BSD version.
|
||||
@@ -148,11 +143,12 @@ Please read `GotoBLAS_01Readme.txt` for older CPU models already supported by th
|
||||
- **Intel Haswell**: Optimized Level-3 and Level-2 BLAS with AVX2 and FMA on x86-64.
|
||||
- **Intel Skylake-X**: Optimized Level-3 and Level-2 BLAS with AVX512 and FMA on x86-64.
|
||||
- **Intel Cooper Lake**: as Skylake-X with improved BFLOAT16 support.
|
||||
- **Intel Sapphire Rapids**: as Cooper Lake with improved BFLOAT16 SBGEMM kernel.
|
||||
- **AMD Bobcat**: Used GotoBLAS2 Barcelona codes.
|
||||
- **AMD Bulldozer**: x86-64 ?GEMM FMA4 kernels. (Thanks to Werner Saar)
|
||||
- **AMD PILEDRIVER**: Uses Bulldozer codes with some optimizations.
|
||||
- **AMD STEAMROLLER**: Uses Bulldozer codes with some optimizations.
|
||||
- **AMD ZEN**: Uses Haswell codes with some optimizations for Zen 2/3 (use SkylakeX for Zen4)
|
||||
- **AMD ZEN**: Uses Haswell codes with some optimizations for Zen 2/3, SkylakeX for Zen4, Cooperlake for Zen5
|
||||
|
||||
#### MIPS32
|
||||
|
||||
@@ -175,7 +171,7 @@ Please read `GotoBLAS_01Readme.txt` for older CPU models already supported by th
|
||||
- **Cortex-A53**: same as ARMV8 (different cpu specifications)
|
||||
- **Cortex-A55**: same as ARMV8 (different cpu specifications)
|
||||
- **Cortex A57**: Optimized Level-3 and Level-2 functions
|
||||
- **Cortex A72**: same as A57 ( different cpu specifications)
|
||||
- **Cortex A72**: same as A57 (different cpu specifications)
|
||||
- **Cortex A73**: same as A57 (different cpu specifications)
|
||||
- **Cortex A76**: same as A57 (different cpu specifications)
|
||||
- **Falkor**: same as A57 (different cpu specifications)
|
||||
@@ -186,9 +182,15 @@ Please read `GotoBLAS_01Readme.txt` for older CPU models already supported by th
|
||||
- **EMAG 8180**: preliminary support based on A57
|
||||
- **Neoverse N1**: (AWS Graviton2) preliminary support
|
||||
- **Neoverse V1**: (AWS Graviton3) optimized Level-3 BLAS
|
||||
- **Neoverse N2**: preliminary support
|
||||
- **Neoverse V2**: preliminary support
|
||||
- **Neoverse V3**: preliminary support
|
||||
- **Neoverse V3AE**: preliminary support
|
||||
- **Apple Vortex**: preliminary support based on ThunderX2/3
|
||||
- **Apple VortexM4**: preliminary support based on ThunderX2/3, SME kernels for SGEMM,SSYMM,STRMM,SSYRK,SSYR2K
|
||||
- **A64FX**: preliminary support, optimized Level-3 BLAS
|
||||
- **ARMV8SVE**: any ARMV8 cpu with SVE extensions
|
||||
- **ARMV9SME**: any ARMV9 cpu with SVE and SME extensions
|
||||
|
||||
#### PPC/PPC64
|
||||
|
||||
@@ -219,6 +221,8 @@ Please read `GotoBLAS_01Readme.txt` for older CPU models already supported by th
|
||||
make HOSTCC=gcc TARGET=x280 NUM_THREADS=8 CC=riscv64-unknown-linux-gnu-clang FC=riscv64-unknown-linux-gnu-gfortran
|
||||
```
|
||||
|
||||
(For RVV 1.0 target selection and compiler requirements, see the [RISC-V section in docs/install.md](docs/install.md#risc-v).)
|
||||
|
||||
- **ZVL???B**: Level-3 BLAS and Level-1,2 including vectorised kernels targeting generic RISCV cores with vector support with registers of at least the corresponding width; ZVL128B and ZVL256B are available.
|
||||
e.g.:
|
||||
```sh
|
||||
@@ -249,6 +253,12 @@ e.g.:
|
||||
```
|
||||
The old-style TARGET=LOONGSON3R5 is still supported
|
||||
|
||||
#### WASM
|
||||
Not a cpu target in the strict sense, but portable WebAssembly for browser-based applications and the like. See emscripten.org for the compiler and related information
|
||||
|
||||
- **WASM128_GENERIC**: Optimized SGEMM,DGEMM, DAXPY, SSUM/DSUM, SDOT/DDOT and SROT/DROT
|
||||
|
||||
|
||||
### Support for multiple targets in a single library
|
||||
|
||||
OpenBLAS can be built for multiple targets with runtime detection of the target cpu by specifying `DYNAMIC_ARCH=1` in Makefile.rule, on the gmake command line or as `-DDYNAMIC_ARCH=TRUE` in cmake.
|
||||
@@ -277,17 +287,17 @@ Please note that it is not possible to combine support for different architectur
|
||||
### Supported OS
|
||||
|
||||
- **GNU/Linux**
|
||||
- **MinGW or Visual Studio (CMake)/Windows**: Please read <https://github.com/OpenMathLib/OpenBLAS/docs/nstall.md#visual-studio-native-windows-abi>.
|
||||
- **MinGW or Visual Studio (CMake)/Windows**: Please read <https://github.com/OpenMathLib/OpenBLAS/blob/develop/docs/install.md#visual-studio--native-windows-abi>.
|
||||
- **Darwin/macOS/OSX/iOS**: Already supported on PPC and x86 by the original GotoBLAS, now also on ARM64 but we are not OSX/iOS experts.
|
||||
- **FreeBSD**: Supported by the community. We don't actively test the library on this OS.
|
||||
- **FreeBSD**: Supported by the community. Basic test coverage is provided by GitHub Actions.
|
||||
- **OpenBSD**: Supported by the community. We don't actively test the library on this OS.
|
||||
- **NetBSD**: Supported by the community. We don't actively test the library on this OS.
|
||||
- **DragonFly BSD**: Supported by the community. We don't actively test the library on this OS.
|
||||
- **Android**: Supported by the community. Please read <https://github.com/OpenMathLib/OpenBLAS/docs/install.md#android>.
|
||||
- **Android**: Supported by the community. Please read <https://github.com/OpenMathLib/OpenBLAS/blob/develop/docs/install.md#android>.
|
||||
- **AIX**: Supported on PPC up to POWER10 but testing is increasingly problematic due to lack of publicly available systems
|
||||
- **Haiku**: Supported by the community. We don't actively test the library on this OS.
|
||||
- **SunOS**: Supported by the community. We don't actively test the library on this OS.
|
||||
- **Cortex-M**: Supported by the community. Please read <https://github.com/OpenMathLib/OpenBLAS/docs/install.md#cortex-m>.
|
||||
- **Cortex-M**: Supported by the community. Please read <https://github.com/OpenMathLib/OpenBLAS/blob/develop/docs/install.md#cortex-m>.
|
||||
|
||||
## Usage
|
||||
|
||||
|
||||
@@ -128,6 +128,7 @@ RISCV64_ZVL128B
|
||||
C910V
|
||||
x280
|
||||
RISCV64_ZVL256B
|
||||
U74 (e.g. SiFive U74 / StarFive JH7110 / VisionFive 2)
|
||||
|
||||
11.LOONGARCH64:
|
||||
// LOONGSONGENERIC/LOONGSON2K1000/LOONGSON3R5 are legacy names,
|
||||
|
||||
+34
-19
@@ -4,6 +4,15 @@ trigger:
|
||||
branches:
|
||||
include:
|
||||
- develop
|
||||
paths:
|
||||
exclude:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
pr:
|
||||
paths:
|
||||
exclude:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
resources:
|
||||
containers:
|
||||
- container: oneapi-hpckit
|
||||
@@ -156,7 +165,7 @@ jobs:
|
||||
|
||||
- job: OSX_OpenMP
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
steps:
|
||||
- script: |
|
||||
brew update
|
||||
@@ -166,7 +175,7 @@ jobs:
|
||||
|
||||
- job: OSX_GCC_Nothreads
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
steps:
|
||||
- script: |
|
||||
brew update
|
||||
@@ -181,6 +190,7 @@ jobs:
|
||||
make CC=gcc-15 FC=gfortran-15
|
||||
|
||||
- job: OSX_LLVM_flangnew
|
||||
timeoutInMinutes: 100
|
||||
pool:
|
||||
vmImage: 'macOS-latest'
|
||||
variables:
|
||||
@@ -194,6 +204,7 @@ jobs:
|
||||
make TARGET=NEHALEM CC=/usr/local/opt/llvm/bin/clang FC=/usr/local/opt/flang/bin/flang NO_SHARED=1
|
||||
|
||||
- job: OSX_OpenMP_Clang
|
||||
timeoutInMinutes: 100
|
||||
pool:
|
||||
vmImage: 'macOS-latest'
|
||||
variables:
|
||||
@@ -207,6 +218,7 @@ jobs:
|
||||
make TARGET=CORE2 USE_OPENMP=1 DYNAMIC_ARCH=1 DYNAMIC_LIST='NEHALEM HASWELL SKYLAKEX' CC=/usr/local/opt/llvm/bin/clang NOFORTRAN=1
|
||||
|
||||
- job: OSX_OpenMP_Clang_cmake
|
||||
timeoutInMinutes: 100
|
||||
pool:
|
||||
vmImage: 'macOS-latest'
|
||||
variables:
|
||||
@@ -214,25 +226,28 @@ jobs:
|
||||
LIBRARY_PATH: /usr/local/opt/llvm/lib
|
||||
steps:
|
||||
- script: |
|
||||
set -euo pipefail
|
||||
brew update
|
||||
brew install llvm libomp
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DTARGET=CORE2 -DUSE_OPENMP=1 -DINTERFACE64=1 -DDYNAMIC_ARCH=1 -DDYNAMIC_LIST='NEHALEM HASWELL SKYLAKEX' -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang -DNOFORTRAN=1 -DNO_AVX512=1 ..
|
||||
make
|
||||
cmake -DTARGET=CORE2 -DUSE_OPENMP=1 -DINTERFACE64=1 -DDYNAMIC_ARCH=1 -DDYNAMIC_LIST='NEHALEM;HASWELL;SKYLAKEX' -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang -DNOFORTRAN=1 -DNO_AVX512=1 ..
|
||||
cmake --build . --parallel "$(sysctl -n hw.logicalcpu)"
|
||||
ctest
|
||||
|
||||
- job: OSX_dynarch_cmake
|
||||
timeoutInMinutes: 100
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
variables:
|
||||
LD_LIBRARY_PATH: /usr/local/opt/llvm/lib
|
||||
LIBRARY_PATH: /usr/local/opt/llvm/lib
|
||||
steps:
|
||||
- script: |
|
||||
set -euo pipefail
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DTARGET=CORE2 -DDYNAMIC_ARCH=1 -DDYNAMIC_LIST='NEHALEM HASWELL SKYLAKEX' -DCMAKE_C_COMPILER=gcc-13 -DCMAKE_Fortran_COMPILER=gfortran-13 -DBUILD_SHARED_LIBS=ON ..
|
||||
cmake -DTARGET=CORE2 -DDYNAMIC_ARCH=1 -DDYNAMIC_LIST='NEHALEM;HASWELL;SKYLAKEX' -DCMAKE_C_COMPILER=gcc-13 -DCMAKE_Fortran_COMPILER=gfortran-13 -DBUILD_SHARED_LIBS=ON ..
|
||||
cmake --build .
|
||||
ctest
|
||||
|
||||
@@ -272,7 +287,7 @@ jobs:
|
||||
|
||||
- job: OSX_NDK_ARMV7
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
steps:
|
||||
- script: |
|
||||
brew update
|
||||
@@ -282,19 +297,19 @@ jobs:
|
||||
|
||||
- job: OSX_IOS_ARMV8
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
variables:
|
||||
CC: /Applications/Xcode_16.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
CFLAGS: -O2 -Wno-macro-redefined -isysroot /Applications/Xcode_16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.2.sdk -arch arm64 -miphoneos-version-min=10.0
|
||||
CC: /Applications/Xcode_16.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
CFLAGS: -O2 -Wno-macro-redefined -isysroot /Applications/Xcode_16.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.5.sdk -arch arm64 -miphoneos-version-min=10.0
|
||||
steps:
|
||||
- script: |
|
||||
ls /Applications/Xcode_16.2.app/Contents/Developer/Platforms/
|
||||
ls /Applications/Xcode_16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
|
||||
ls /Applications/Xcode_16.4.app/Contents/Developer/Platforms/
|
||||
ls /Applications/Xcode_16.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
|
||||
make TARGET=ARMV8 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
|
||||
|
||||
- job: OSX_IOS_ARMV7
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
variables:
|
||||
CC: /Applications/Xcode_16.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
CFLAGS: -O2 -mno-thumb -Wno-macro-redefined -isysroot /Applications/Xcode_16.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.2.sdk -arch armv7 -miphoneos-version-min=5.1
|
||||
@@ -304,15 +319,15 @@ jobs:
|
||||
|
||||
- job: OSX_xbuild_DYNAMIC_ARM64
|
||||
pool:
|
||||
vmImage: 'macOS-14'
|
||||
vmImage: 'macOS-15'
|
||||
variables:
|
||||
CC: /Applications/Xcode_16.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
CFLAGS: -O2 -Wno-macro-redefined -isysroot /Applications/Xcode_16.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -arch arm64
|
||||
CC: /Applications/Xcode_16.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
||||
CFLAGS: -O2 -Wno-macro-redefined -isysroot /Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk -arch arm64
|
||||
steps:
|
||||
- script: |
|
||||
ls /Applications/Xcode_16.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
|
||||
/Applications/Xcode_12.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 --print-supported-cpus
|
||||
/Applications/Xcode_16.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --version
|
||||
ls /Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
|
||||
/Applications/Xcode_16.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 --print-supported-cpus
|
||||
/Applications/Xcode_16.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --version
|
||||
make TARGET=ARMV8 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
|
||||
|
||||
- job: ALPINE_MUSL
|
||||
|
||||
+35
-1
@@ -95,10 +95,15 @@ else
|
||||
GOTO_HFLOAT_TARGETS=
|
||||
endif
|
||||
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
SMALLSCALING=smallscaling
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME), WINNT)
|
||||
|
||||
goto :: slinpack.goto dlinpack.goto clinpack.goto zlinpack.goto \
|
||||
scholesky.goto dcholesky.goto ccholesky.goto zcholesky.goto \
|
||||
cblas_sgemm.goto cblas_dgemm.goto cblas_cgemm.goto cblas_zgemm.goto \
|
||||
sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
|
||||
strmm.goto dtrmm.goto ctrmm.goto ztrmm.goto \
|
||||
strsm.goto dtrsm.goto ctrsm.goto ztrsm.goto \
|
||||
@@ -268,6 +273,7 @@ mkl :: slinpack.mkl dlinpack.mkl clinpack.mkl zlinpack.mkl \
|
||||
else
|
||||
|
||||
goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
|
||||
cblas_sgemm.goto cblas_dgemm.goto cblas_cgemm.goto cblas_zgemm.goto \
|
||||
strmm.goto dtrmm.goto ctrmm.goto ztrmm.goto \
|
||||
strsm.goto dtrsm.goto ctrsm.goto ztrsm.goto \
|
||||
sspr.goto dspr.goto \
|
||||
@@ -301,7 +307,7 @@ goto :: sgemm.goto dgemm.goto cgemm.goto zgemm.goto \
|
||||
stpsv.goto dtpsv.goto ctpsv.goto ztpsv.goto \
|
||||
strsv.goto dtrsv.goto ctrsv.goto ztrsv.goto \
|
||||
ssymm.goto dsymm.goto csymm.goto zsymm.goto \
|
||||
smallscaling \
|
||||
$(SMALLSCALING) \
|
||||
isamax.goto idamax.goto icamax.goto izamax.goto \
|
||||
ismax.goto idmax.goto \
|
||||
isamin.goto idamin.goto icamin.goto izamin.goto \
|
||||
@@ -681,6 +687,18 @@ endif
|
||||
sgemm.goto : sgemm.$(SUFFIX) ../$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
|
||||
|
||||
cblas_sgemm.goto : cblas_sgemm.$(SUFFIX) ../$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
|
||||
|
||||
cblas_dgemm.goto : cblas_dgemm.$(SUFFIX) ../$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
|
||||
|
||||
cblas_cgemm.goto : cblas_cgemm.$(SUFFIX) ../$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
|
||||
|
||||
cblas_zgemm.goto : cblas_zgemm.$(SUFFIX) ../$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB) -lm
|
||||
|
||||
sgemm.acml : sgemm.$(SUFFIX)
|
||||
-$(CC) $(CFLAGS) -o $(@F) $^ $(LIBACML) $(CEXTRALIB) $(EXTRALIB) $(FEXTRALIB)
|
||||
|
||||
@@ -3027,6 +3045,18 @@ cgemm.$(SUFFIX) : gemm.c
|
||||
zgemm.$(SUFFIX) : gemm.c
|
||||
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
|
||||
|
||||
cblas_sgemm.$(SUFFIX) : cblasgemm.c
|
||||
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
|
||||
|
||||
cblas_dgemm.$(SUFFIX) : cblasgemm.c
|
||||
$(CC) $(CFLAGS) -c -UCOMPLEX -DDOUBLE -o $(@F) $^
|
||||
|
||||
cblas_cgemm.$(SUFFIX) : cblasgemm.c
|
||||
$(CC) $(CFLAGS) -c -DCOMPLEX -UDOUBLE -o $(@F) $^
|
||||
|
||||
cblas_zgemm.$(SUFFIX) : cblasgemm.c
|
||||
$(CC) $(CFLAGS) -c -DCOMPLEX -DDOUBLE -o $(@F) $^
|
||||
|
||||
ssymm.$(SUFFIX) : symm.c
|
||||
$(CC) $(CFLAGS) -c -UCOMPLEX -UDOUBLE -o $(@F) $^
|
||||
|
||||
@@ -3533,7 +3563,11 @@ zomatcopy.$(SUFFIX) : omatcopy.c
|
||||
|
||||
|
||||
smallscaling: smallscaling.c ../$(LIBNAME)
|
||||
ifeq ($(C_COMPILER), GCC)
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(EXTRALIB) -fopenmp -lm -lpthread
|
||||
else
|
||||
$(CC) $(CFLAGS) -o $(@F) $^ $(EXTRALIB) -quak -openmp -lm -lpthread
|
||||
endif
|
||||
|
||||
clean ::
|
||||
@rm -f *.goto *.mkl *.acml *.atlas *.veclib *.essl smallscaling
|
||||
|
||||
+1
-3
@@ -95,7 +95,6 @@ static void *aligned_alloc_cacheline(size_t n)
|
||||
#if defined(__WIN32__) || defined(__WIN64__) || !defined(_POSIX_TIMERS)
|
||||
struct timeval start, stop;
|
||||
#elif defined(__APPLE__)
|
||||
mach_timebase_info_data_t info;
|
||||
uint64_t start = 0, stop = 0;
|
||||
#else
|
||||
struct timespec start = { 0, 0 }, stop = { 0, 0 };
|
||||
@@ -106,8 +105,7 @@ double getsec()
|
||||
#if defined(__WIN32__) || defined(__WIN64__) || !defined(_POSIX_TIMERS)
|
||||
return (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_usec - start.tv_usec)) * 1.e-6;
|
||||
#elif defined(__APPLE__)
|
||||
mach_timebase_info(&info);
|
||||
return (double)(((stop - start) * info.numer)/info.denom) * 1.e-9;
|
||||
return (double)(stop - start) * 1.e-9;
|
||||
#else
|
||||
return (double)(stop.tv_sec - start.tv_sec) + (double)((stop.tv_nsec - start.tv_nsec)) * 1.e-9;
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,233 @@
|
||||
/***************************************************************************
|
||||
Copyright (c) 2014, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "bench.h"
|
||||
#include "cblas.h"
|
||||
#undef GEMM
|
||||
|
||||
#ifndef COMPLEX
|
||||
|
||||
#ifdef DOUBLE
|
||||
#define GEMM cblas_dgemm
|
||||
#elif defined(BFLOAT16) && defined(BGEMM)
|
||||
#define GEMM cblas_bgemm
|
||||
#elif defined(BFLOAT16)
|
||||
#define GEMM cblas_sbgemm
|
||||
#undef IFLOAT
|
||||
#define IFLOAT bfloat16
|
||||
#elif defined(HFLOAT16)
|
||||
#define GEMM cblas_shgemm
|
||||
#undef IFLOAT
|
||||
#define IFLOAT hfloat16
|
||||
#else
|
||||
#define GEMM cblas_sgemm
|
||||
#undef IFLOAT
|
||||
#define IFLOAT float
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef DOUBLE
|
||||
#define GEMM cblas_zgemm
|
||||
#else
|
||||
#define GEMM cblas_cgemm
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
|
||||
IFLOAT *a, *b;
|
||||
//IFLOAT *aa, *bb;
|
||||
FLOAT *c;
|
||||
//FLOAT *cc;
|
||||
#ifdef BGEMM
|
||||
blasint one=1;
|
||||
blasint two=2;
|
||||
float alpha_in[] = {1.0, 0.0};
|
||||
float beta_in[] = {0.0, 0.0};
|
||||
FLOAT alpha[2], beta[2];
|
||||
sbstobf16_(&two, alpha_in, &one, alpha, &one);
|
||||
sbstobf16_(&two, beta_in, &one, beta, &one);
|
||||
#else
|
||||
#ifdef COMPLEX
|
||||
FLOAT alpha[] = {1.0, 0.0};
|
||||
FLOAT beta [] = {0.0, 0.0};
|
||||
#else
|
||||
FLOAT alpha = 1.0;
|
||||
FLOAT beta = 0.0;
|
||||
#endif
|
||||
#endif
|
||||
CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
char transac, transbc;
|
||||
blasint m, n, k, i, j, lda, ldb, ldc;
|
||||
int loops = 1;
|
||||
int has_param_m = 0;
|
||||
int has_param_n = 0;
|
||||
int has_param_k = 0;
|
||||
int has_param_lda = 0;
|
||||
int has_param_ldb = 0;
|
||||
char *p;
|
||||
//blasint sme=0;
|
||||
int from = 1;
|
||||
int to = 200;
|
||||
int step = 1;
|
||||
|
||||
double time1, timeg;
|
||||
|
||||
argc--;argv++;
|
||||
|
||||
if (argc > 0) { from = atol(*argv); argc--; argv++; }
|
||||
if (argc > 0) { to = MAX(atol(*argv), from); argc--; argv++; }
|
||||
if (argc > 0) { step = atol(*argv); argc--; argv++; }
|
||||
|
||||
if ((p = getenv("OPENBLAS_TRANS"))) {
|
||||
transa=(*p=='N') ? CblasNoTrans : CblasTrans;
|
||||
transb=(*p=='N') ? CblasNoTrans : CblasTrans;
|
||||
}
|
||||
if ((p = getenv("OPENBLAS_TRANSA"))) {
|
||||
transa=(*p=='N') ? CblasNoTrans : CblasTrans;
|
||||
}
|
||||
if ((p = getenv("OPENBLAS_TRANSB"))) {
|
||||
transb=(*p=='N') ? CblasNoTrans : CblasTrans;
|
||||
}
|
||||
|
||||
transac=(transa==CblasNoTrans) ? 'N' : 'T';
|
||||
transbc=(transb==CblasNoTrans) ? 'N' : 'T';
|
||||
fprintf(stderr, "From : %3d To : %3d Step=%d : Transa=%c : Transb=%c\n", from, to, step, transac, transbc);
|
||||
|
||||
p = getenv("OPENBLAS_LOOPS");
|
||||
if ( p != NULL ) {
|
||||
loops = atoi(p);
|
||||
}
|
||||
|
||||
if ((p = getenv("OPENBLAS_PARAM_M"))) {
|
||||
m = atoi(p);
|
||||
has_param_m=1;
|
||||
} else {
|
||||
m = to;
|
||||
}
|
||||
if ((p = getenv("OPENBLAS_PARAM_N"))) {
|
||||
n = atoi(p);
|
||||
has_param_n=1;
|
||||
} else {
|
||||
n = to;
|
||||
}
|
||||
if ((p = getenv("OPENBLAS_PARAM_K"))) {
|
||||
k = atoi(p);
|
||||
has_param_k=1;
|
||||
} else {
|
||||
k = to;
|
||||
}
|
||||
if ((p = getenv("OPENBLAS_PARAM_LDA"))) {
|
||||
lda = atoi(p);
|
||||
has_param_lda=1;
|
||||
}
|
||||
if ((p = getenv("OPENBLAS_PARAM_LDB"))) {
|
||||
ldb = atoi(p);
|
||||
has_param_ldb=1;
|
||||
}
|
||||
|
||||
if (( a = (IFLOAT *)malloc(sizeof(IFLOAT) * m * k * COMPSIZE)) == NULL) {
|
||||
fprintf(stderr,"Out of Memory!!\n");exit(1);
|
||||
}
|
||||
if (( b = (IFLOAT *)malloc(sizeof(IFLOAT) * k * n * COMPSIZE)) == NULL) {
|
||||
fprintf(stderr,"Out of Memory!!\n");exit(1);
|
||||
}
|
||||
if (( c = (FLOAT *)malloc(sizeof(FLOAT) * m * n * COMPSIZE)) == NULL) {
|
||||
fprintf(stderr,"Out of Memory!!\n");exit(1);
|
||||
}
|
||||
//if (( aa = (IFLOAT *)malloc(sizeof(IFLOAT) * m * k * COMPSIZE)) == NULL) {
|
||||
// fprintf(stderr,"Out of Memory!!\n");exit(1);
|
||||
//}
|
||||
//if (( bb = (IFLOAT *)malloc(sizeof(IFLOAT) * k * n * COMPSIZE)) == NULL) {
|
||||
// fprintf(stderr,"Out of Memory!!\n");exit(1);
|
||||
//}
|
||||
//if (( cc = (FLOAT *)malloc(sizeof(FLOAT) * m * n * COMPSIZE)) == NULL) {
|
||||
// fprintf(stderr,"Out of Memory!!\n");exit(1);
|
||||
//}
|
||||
|
||||
#ifdef __linux
|
||||
srandom(getpid());
|
||||
#endif
|
||||
|
||||
for (i = 0; i < m * k * COMPSIZE; i++) {
|
||||
a[i] = ((IFLOAT) rand() / (IFLOAT) RAND_MAX) - 0.5;
|
||||
// aa[i]=a[i];
|
||||
}
|
||||
for (i = 0; i < k * n * COMPSIZE; i++) {
|
||||
b[i] = ((IFLOAT) rand() / (IFLOAT) RAND_MAX) - 0.5;
|
||||
// bb[i]=b[i];
|
||||
}
|
||||
for (i = 0; i < m * n * COMPSIZE; i++) {
|
||||
c[i] = ((FLOAT) rand() / (FLOAT) RAND_MAX) - 0.5;
|
||||
// cc[i]=c[i];
|
||||
}
|
||||
|
||||
fprintf(stderr, " SIZE Flops Time\n");
|
||||
|
||||
for (i = from; i <= to; i += step) {
|
||||
|
||||
timeg=0;
|
||||
|
||||
if (!has_param_m) { m = i; }
|
||||
if (!has_param_n) { n = i; }
|
||||
if (!has_param_k) { k = i; }
|
||||
|
||||
if (!has_param_lda) {
|
||||
if (transa == CblasNoTrans) { lda = k; }
|
||||
else { lda = m; }
|
||||
}
|
||||
if (!has_param_ldb) {
|
||||
if (transb == CblasNoTrans) { ldb = n; }
|
||||
else { ldb = k; }
|
||||
}
|
||||
ldc = n;
|
||||
|
||||
fprintf(stderr, " M=%4d, N=%4d, K=%4d : ", (int)m, (int)n, (int)k);
|
||||
begin();
|
||||
|
||||
for (j=0; j<loops; j++) {
|
||||
GEMM (CblasRowMajor,transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
|
||||
}
|
||||
|
||||
// for (ii = 0; ii < m * n * COMPSIZE; ii++) if (fabsf(c[ii]-cc[ii])>1.5e-5){fprintf(stderr,"mismatch %d %f != %f: %g\n",ii,c[ii],cc[ii],fabsf(c[ii]-cc[ii]));}
|
||||
end();
|
||||
time1 = getsec();
|
||||
|
||||
timeg = time1/loops;
|
||||
fprintf(stderr,
|
||||
" %10.2f MFlops %10.6f sec\n",
|
||||
COMPSIZE * COMPSIZE * 2. * (double)k * (double)m * (double)n / timeg * 1.e-6, time1);
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// void main(int argc, char *argv[]) __attribute__((weak, alias("MAIN__")));
|
||||
+3
-1
@@ -1,3 +1,4 @@
|
||||
//#pragma clang optimize off
|
||||
/***************************************************************************
|
||||
Copyright (c) 2014, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
@@ -45,6 +46,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define IFLOAT hfloat16
|
||||
#else
|
||||
#define GEMM BLASFUNC(sgemm)
|
||||
#undef IFLOAT
|
||||
#define IFLOAT float
|
||||
#endif
|
||||
|
||||
@@ -186,7 +188,7 @@ int main(int argc, char *argv[]){
|
||||
|
||||
timeg = time1/loops;
|
||||
fprintf(stderr,
|
||||
" %10.2f MFlops %10.6f sec\n",
|
||||
" %10.2lf MFlops %10.6f sec\n",
|
||||
COMPSIZE * COMPSIZE * 2. * (double)k * (double)m * (double)n / timeg * 1.e-6, time1);
|
||||
|
||||
}
|
||||
|
||||
@@ -236,7 +236,7 @@ def test_gesdd(benchmark, mn, variant):
|
||||
|
||||
assert info == 0
|
||||
|
||||
atol = {'s': 1e-5, 'd': 1e-13}
|
||||
atol = {'s': 5e-5, 'd': 1e-13}
|
||||
np.testing.assert_allclose(u @ np.diag(s) @ vt, a, atol=atol[variant])
|
||||
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ config="$2"
|
||||
compiler_name="$3"
|
||||
shift 3
|
||||
flags="$*"
|
||||
is_ios=false
|
||||
darwin_os=""
|
||||
|
||||
# First, we need to know the target OS and compiler name
|
||||
{
|
||||
@@ -70,7 +70,7 @@ case "$data" in *OS_FREEBSD*) os=FreeBSD ;; esac
|
||||
case "$data" in *OS_NETBSD*) os=NetBSD ;; esac
|
||||
case "$data" in *OS_OPENBSD*) os=OpenBSD ;; esac
|
||||
case "$data" in *OS_DRAGONFLY*) os=DragonFly ;; esac
|
||||
case "$data" in *OS_DARWIN*) os=Darwin ;; esac
|
||||
case "$data" in *OS_DARWIN*) os=Darwin; darwin_os=macOS ;; esac
|
||||
case "$data" in *OS_SUNOS*) os=SunOS ;; esac
|
||||
case "$data" in *OS_AIX*) os=AIX ;; esac
|
||||
case "$data" in *OS_OSF*) os=osf ;; esac
|
||||
@@ -79,7 +79,7 @@ case "$data" in *OS_CYGWIN_NT*) os=CYGWIN_NT ;; esac
|
||||
case "$data" in *OS_INTERIX*) os=Interix ;; esac
|
||||
case "$data" in *OS_ANDROID*) os=Android ;; esac
|
||||
case "$data" in *OS_HAIKU*) os=Haiku ;; esac
|
||||
case "$data" in *OS_IOS*) is_ios=true ;; esac
|
||||
case "$data" in *OS_IOS*) darwin_os=iOS ;; esac
|
||||
|
||||
case "$data" in
|
||||
*ARCH_X86_64*) architecture=x86_64 ;;
|
||||
@@ -131,7 +131,7 @@ case "$architecture" in
|
||||
defined=1
|
||||
;;
|
||||
arm|arm64) defined=1 ;;
|
||||
zarch|e2k|alpha|ia64|riscv64|loonarch64|wasm)
|
||||
zarch|e2k|alpha|ia64|riscv64|loongarch64|wasm)
|
||||
defined=1
|
||||
BINARY=64
|
||||
;;
|
||||
@@ -342,8 +342,8 @@ no_sme=0
|
||||
is_appleclang=0
|
||||
if [ "$architecture" = "arm64" ]; then
|
||||
if [ "$compiler" = "CLANG" ]; then
|
||||
data=`$compiler_name --version`
|
||||
case "$data" in Apple*)
|
||||
vdata=`$compiler_name --version`
|
||||
case "$vdata" in Apple*)
|
||||
is_appleclang=1
|
||||
esac
|
||||
fi
|
||||
@@ -404,7 +404,7 @@ fi
|
||||
data=`$compiler_name $flags -S ctest1.c && grep globl ctest1.s | head -n 1 && rm -f ctest1.s`
|
||||
|
||||
need_fu=''
|
||||
if echo "$data" | grep 'globl[[:space:]][_\.]'; then
|
||||
if echo "$data" | grep -q 'globl[[:space:]][_\.]'; then
|
||||
need_fu="${data##*globl[[:space:]]}"
|
||||
need_fu="${need_fu%%[!_\.]*}"
|
||||
fi
|
||||
@@ -421,7 +421,7 @@ fi
|
||||
[ "$os" = "Android" ] && [ "$hostos" = "Linux" ] && [ -n "$TERMUX_APP_PID" ] \
|
||||
&& cross=0
|
||||
|
||||
[ "$is_ios" = true ] && cross=1
|
||||
[ "$darwin_os" = iOS ] && cross=1
|
||||
|
||||
[ "$USE_OPENMP" != 1 ] && openmp=''
|
||||
|
||||
@@ -489,11 +489,11 @@ done
|
||||
:> "$makefile" || exit 1
|
||||
:> "$config" || exit 1
|
||||
|
||||
|
||||
# print $data, "\n";
|
||||
|
||||
{
|
||||
printf "OSNAME=%s\n" "$os"
|
||||
[ -n "$darwin_os" ] && printf "OSNAME_DISPLAY=%s\n" "$darwin_os"
|
||||
printf "ARCH=%s\n" "$architecture"
|
||||
printf "C_COMPILER=%s\n" "$compiler"
|
||||
[ $binformat != 'bin32' ] && printf "BINARY32=\n"
|
||||
|
||||
+10
-1
@@ -56,6 +56,7 @@ if ($@){
|
||||
}
|
||||
|
||||
$compiler = "";
|
||||
$darwin_os = "";
|
||||
$compiler = LSB if ($data =~ /COMPILER_LSB/);
|
||||
$compiler = CLANG if ($data =~ /COMPILER_CLANG/);
|
||||
$compiler = PGI if ($data =~ /COMPILER_PGI/);
|
||||
@@ -73,7 +74,13 @@ $os = FreeBSD if ($data =~ /OS_FREEBSD/);
|
||||
$os = NetBSD if ($data =~ /OS_NETBSD/);
|
||||
$os = OpenBSD if ($data =~ /OS_OPENBSD/);
|
||||
$os = DragonFly if ($data =~ /OS_DRAGONFLY/);
|
||||
$os = Darwin if ($data =~ /OS_DARWIN/);
|
||||
if ($data =~ /OS_DARWIN/) {
|
||||
$os = Darwin;
|
||||
$darwin_os = "macOS";
|
||||
}
|
||||
if ($data =~ /OS_IOS/) {
|
||||
$darwin_os = "iOS";
|
||||
}
|
||||
$os = SunOS if ($data =~ /OS_SUNOS/);
|
||||
$os = AIX if ($data =~ /OS_AIX/);
|
||||
$os = osf if ($data =~ /OS_OSF/);
|
||||
@@ -391,6 +398,7 @@ if ($architecture ne $hostarch) {
|
||||
|
||||
$cross = 1 if ($os ne $hostos);
|
||||
$cross = 0 if (($os eq "Android") && ($hostos eq "Linux") && ($ENV{TERMUX_APP_PID} != ""));
|
||||
$cross = 1 if $darwin_os eq "iOS";
|
||||
|
||||
$openmp = "" if $ENV{USE_OPENMP} != 1;
|
||||
|
||||
@@ -454,6 +462,7 @@ open(CONFFILE, "> $config" ) || die "Can't create $config";
|
||||
# print $data, "\n";
|
||||
|
||||
print MAKEFILE "OSNAME=$os\n";
|
||||
print MAKEFILE "OSNAME_DISPLAY=$darwin_os\n" if $darwin_os ne "";
|
||||
print MAKEFILE "ARCH=$architecture\n";
|
||||
print MAKEFILE "C_COMPILER=$compiler\n";
|
||||
print MAKEFILE "BINARY32=\n" if $binformat ne bin32;
|
||||
|
||||
@@ -38,36 +38,71 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/*Set the number of threads on runtime.*/
|
||||
void openblas_set_num_threads(int num_threads);
|
||||
void goto_set_num_threads(int num_threads);
|
||||
int openblas_set_num_threads_local(int num_threads);
|
||||
OPENBLAS_EXPORT void openblas_set_num_threads(int num_threads);
|
||||
OPENBLAS_EXPORT void goto_set_num_threads(int num_threads);
|
||||
OPENBLAS_EXPORT int openblas_set_num_threads_local(int num_threads);
|
||||
|
||||
/*Get the number of threads on runtime.*/
|
||||
int openblas_get_num_threads(void);
|
||||
OPENBLAS_EXPORT int openblas_get_num_threads(void);
|
||||
|
||||
/*Get the number of physical processors (cores).*/
|
||||
int openblas_get_num_procs(void);
|
||||
OPENBLAS_EXPORT int openblas_get_num_procs(void);
|
||||
|
||||
/*Get the build configure on runtime.*/
|
||||
char* openblas_get_config(void);
|
||||
OPENBLAS_EXPORT char* openblas_get_config(void);
|
||||
|
||||
/*Get the CPU corename on runtime.*/
|
||||
char* openblas_get_corename(void);
|
||||
OPENBLAS_EXPORT char* openblas_get_corename(void);
|
||||
|
||||
/*Set the threading backend to a custom callback.*/
|
||||
typedef void (*openblas_dojob_callback)(int thread_num, void *jobdata, int dojob_data);
|
||||
typedef void (*openblas_threads_callback)(int sync, openblas_dojob_callback dojob, int numjobs, size_t jobdata_elsize, void *jobdata, int dojob_data);
|
||||
void openblas_set_threads_callback_function(openblas_threads_callback callback);
|
||||
OPENBLAS_EXPORT void openblas_set_threads_callback_function(openblas_threads_callback callback);
|
||||
|
||||
/* Replace the XERBLA handler for this OpenBLAS instance and return the
|
||||
* previous handler. Passing NULL restores the default. Callbacks may run
|
||||
* concurrently and must be thread-safe. The name and info pointers are valid
|
||||
* only during the callback; name spans name_length bytes and need not be
|
||||
* NUL-terminated. Replacement is thread-safe but does not wait for in-flight
|
||||
* calls, so the previous handler must remain loaded until they complete. */
|
||||
#ifndef OPENBLAS_XERBLA_HANDLER_DEFINED
|
||||
#define OPENBLAS_XERBLA_HANDLER_DEFINED
|
||||
typedef void (*openblas_xerbla_handler)(const char *name,
|
||||
const blasint *info,
|
||||
size_t name_length);
|
||||
#endif
|
||||
OPENBLAS_EXPORT openblas_xerbla_handler openblas_set_xerbla(openblas_xerbla_handler handler);
|
||||
|
||||
/* Cooperative cancellation of in-flight operations.
|
||||
*
|
||||
* Every thread owns a pointer-sized generation slot;
|
||||
* openblas_cancel_token() returns its (stable) address for the calling
|
||||
* thread. Supported compute drivers (currently the level-3 GEMM drivers)
|
||||
* advance the slot to a fresh even generation at operation entry on the
|
||||
* issuing thread and poll it during the computation. To cancel the
|
||||
* operation in flight on a thread, load that thread's slot value, verify
|
||||
* the operation you mean to cancel is still the current one, and call
|
||||
* openblas_cancel(token, loaded_value): the cancel bit (bit 0) is set iff
|
||||
* the slot still holds the loaded value, so stale requests cannot affect
|
||||
* later operations. A cancelled operation leaves its output in an
|
||||
* unspecified, partially-updated state; the caller must discard the
|
||||
* result. The library itself stays consistent and can service further
|
||||
* calls. openblas_cancel_token() may return NULL if per-thread state
|
||||
* cannot be allocated; cancellation is then unavailable on that thread
|
||||
* (openblas_cancel(NULL, ...) is a harmless no-op). These symbols are
|
||||
* exported without any symbol prefix/suffix decoration. */
|
||||
size_t *openblas_cancel_token(void);
|
||||
OPENBLAS_EXPORT void openblas_cancel(size_t *token, size_t loaded_token);
|
||||
|
||||
#ifdef OPENBLAS_OS_LINUX
|
||||
/* Sets thread affinity for OpenBLAS threads. `thread_idx` is in [0, openblas_get_num_threads()-1]. */
|
||||
int openblas_setaffinity(int thread_idx, size_t cpusetsize, cpu_set_t* cpu_set);
|
||||
OPENBLAS_EXPORT int openblas_setaffinity(int thread_idx, size_t cpusetsize, cpu_set_t* cpu_set);
|
||||
/* Queries thread affinity for OpenBLAS threads. `thread_idx` is in [0, openblas_get_num_threads()-1]. */
|
||||
int openblas_getaffinity(int thread_idx, size_t cpusetsize, cpu_set_t* cpu_set);
|
||||
OPENBLAS_EXPORT int openblas_getaffinity(int thread_idx, size_t cpusetsize, cpu_set_t* cpu_set);
|
||||
#endif
|
||||
|
||||
/* Get the parallelization type which is used by OpenBLAS */
|
||||
int openblas_get_parallel(void);
|
||||
OPENBLAS_EXPORT int openblas_get_parallel(void);
|
||||
/* OpenBLAS is compiled for sequential use */
|
||||
#define OPENBLAS_SEQUENTIAL 0
|
||||
/* OpenBLAS is compiled using normal threading model */
|
||||
@@ -94,400 +129,400 @@ typedef enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132} CBLAS_DIAG;
|
||||
typedef enum CBLAS_SIDE {CblasLeft=141, CblasRight=142} CBLAS_SIDE;
|
||||
typedef CBLAS_ORDER CBLAS_LAYOUT;
|
||||
|
||||
float cblas_sdsdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
double cblas_dsdot (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
float cblas_sdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
double cblas_ddot(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT float cblas_sdsdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT double cblas_dsdot (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT float cblas_sdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT double cblas_ddot(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
openblas_complex_float cblas_cdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
openblas_complex_float cblas_cdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
openblas_complex_double cblas_zdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
openblas_complex_double cblas_zdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT openblas_complex_float cblas_cdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT openblas_complex_float cblas_cdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT openblas_complex_double cblas_zdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT openblas_complex_double cblas_zdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_cdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
void cblas_cdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
void cblas_zdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
void cblas_zdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
OPENBLAS_EXPORT void cblas_cdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
OPENBLAS_EXPORT void cblas_cdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
OPENBLAS_EXPORT void cblas_zdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
OPENBLAS_EXPORT void cblas_zdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret);
|
||||
|
||||
float cblas_sasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
float cblas_scasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dzasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_sasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_dasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_scasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_dzasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
float cblas_ssum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dsum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
float cblas_scsum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dzsum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_ssum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_dsum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_scsum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_dzsum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
float cblas_snrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX);
|
||||
double cblas_dnrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX);
|
||||
float cblas_scnrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX);
|
||||
double cblas_dznrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT float cblas_snrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT double cblas_dnrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT float cblas_scnrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT double cblas_dznrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
CBLAS_INDEX cblas_isamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_idamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_icamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_izamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_isamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_idamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_icamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_izamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
CBLAS_INDEX cblas_isamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_idamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_icamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_izamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_isamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_idamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_icamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_izamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
float cblas_samax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_damax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
float cblas_scamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dzamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_samax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_damax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_scamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_dzamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
float cblas_samin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_damin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
float cblas_scamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
double cblas_dzamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_samin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_damin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT float cblas_scamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT double cblas_dzamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
CBLAS_INDEX cblas_ismax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_idmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_icmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_izmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_ismax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_idmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_icmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_izmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
CBLAS_INDEX cblas_ismin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_idmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_icmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
CBLAS_INDEX cblas_izmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_ismin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_idmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_icmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
OPENBLAS_EXPORT CBLAS_INDEX cblas_izmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);
|
||||
|
||||
void cblas_saxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_daxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_caxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zaxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_saxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_daxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_caxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_zaxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_caxpyc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zaxpyc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_caxpyc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_zaxpyc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_scopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_dcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_ccopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_scopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_dcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_ccopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_zcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_sswap(OPENBLAS_CONST blasint n, float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_dswap(OPENBLAS_CONST blasint n, double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_cswap(OPENBLAS_CONST blasint n, void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zswap(OPENBLAS_CONST blasint n, void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_sswap(OPENBLAS_CONST blasint n, float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_dswap(OPENBLAS_CONST blasint n, double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_cswap(OPENBLAS_CONST blasint n, void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_zswap(OPENBLAS_CONST blasint n, void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_srot(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s);
|
||||
void cblas_drot(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s);
|
||||
void cblas_csrot(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s);
|
||||
void cblas_zdrot(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s);
|
||||
OPENBLAS_EXPORT void cblas_srot(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s);
|
||||
OPENBLAS_EXPORT void cblas_drot(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s);
|
||||
OPENBLAS_EXPORT void cblas_csrot(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s);
|
||||
OPENBLAS_EXPORT void cblas_zdrot(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s);
|
||||
|
||||
void cblas_srotg(float *a, float *b, float *c, float *s);
|
||||
void cblas_drotg(double *a, double *b, double *c, double *s);
|
||||
void cblas_crotg(void *a, void *b, float *c, void *s);
|
||||
void cblas_zrotg(void *a, void *b, double *c, void *s);
|
||||
OPENBLAS_EXPORT void cblas_srotg(float *a, float *b, float *c, float *s);
|
||||
OPENBLAS_EXPORT void cblas_drotg(double *a, double *b, double *c, double *s);
|
||||
OPENBLAS_EXPORT void cblas_crotg(void *a, void *b, float *c, void *s);
|
||||
OPENBLAS_EXPORT void cblas_zrotg(void *a, void *b, double *c, void *s);
|
||||
|
||||
|
||||
void cblas_srotm(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float *P);
|
||||
void cblas_drotm(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double *P);
|
||||
OPENBLAS_EXPORT void cblas_srotm(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float *P);
|
||||
OPENBLAS_EXPORT void cblas_drotm(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double *P);
|
||||
|
||||
void cblas_srotmg(float *d1, float *d2, float *b1, OPENBLAS_CONST float b2, float *P);
|
||||
void cblas_drotmg(double *d1, double *d2, double *b1, OPENBLAS_CONST double b2, double *P);
|
||||
OPENBLAS_EXPORT void cblas_srotmg(float *d1, float *d2, float *b1, OPENBLAS_CONST float b2, float *P);
|
||||
OPENBLAS_EXPORT void cblas_drotmg(double *d1, double *d2, double *b1, OPENBLAS_CONST double b2, double *P);
|
||||
|
||||
void cblas_sscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_cscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_zscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_csscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_zdscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_sscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, float *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_dscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, double *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_cscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_zscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_csscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_zdscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_sgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_EXPORT void cblas_sgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_dgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_EXPORT void cblas_dgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double beta, double *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_cgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_EXPORT void cblas_cgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_zgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_EXPORT void cblas_zgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_sger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_dger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_sger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_dger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_cgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_cgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_zgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_zgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
|
||||
void cblas_strsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_strsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_dtrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_ctrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_ztrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_strmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_strmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_dtrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_ctrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
OPENBLAS_EXPORT void cblas_ztrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_ssyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_dsyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_ssyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_dsyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_cher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A, OPENBLAS_CONST blasint lda);
|
||||
OPENBLAS_EXPORT void cblas_zher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A, OPENBLAS_CONST blasint lda);
|
||||
|
||||
void cblas_ssyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo,OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X,
|
||||
OPENBLAS_EXPORT void cblas_ssyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo,OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X,
|
||||
OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_dsyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X,
|
||||
OPENBLAS_EXPORT void cblas_dsyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X,
|
||||
OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_cher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX,
|
||||
OPENBLAS_EXPORT void cblas_cher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX,
|
||||
OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
void cblas_zher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX,
|
||||
OPENBLAS_EXPORT void cblas_zher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX,
|
||||
OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda);
|
||||
|
||||
void cblas_sgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_sgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_dgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_cgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_cgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_zgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_ssbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_EXPORT void cblas_ssbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dsbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_EXPORT void cblas_dsbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
|
||||
void cblas_stbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_stbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_dtbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ctbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ztbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_stbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_stbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_dtbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ctbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ztbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_stpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_stpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_dtpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ctpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ztpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_stpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_stpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_dtpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_dtpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ctpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ctpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX);
|
||||
void cblas_ztpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_EXPORT void cblas_ztpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX);
|
||||
|
||||
void cblas_ssymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_EXPORT void cblas_ssymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dsymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_EXPORT void cblas_dsymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_chemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A,
|
||||
OPENBLAS_EXPORT void cblas_chemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zhemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A,
|
||||
OPENBLAS_EXPORT void cblas_zhemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A,
|
||||
OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
|
||||
void cblas_sspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *Ap,
|
||||
OPENBLAS_EXPORT void cblas_sspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *Ap,
|
||||
OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_dspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *Ap,
|
||||
OPENBLAS_EXPORT void cblas_dspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *Ap,
|
||||
OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_sspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *Ap);
|
||||
void cblas_dspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *Ap);
|
||||
OPENBLAS_EXPORT void cblas_sspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *Ap);
|
||||
OPENBLAS_EXPORT void cblas_dspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *Ap);
|
||||
|
||||
void cblas_chpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A);
|
||||
void cblas_zhpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST void *X,OPENBLAS_CONST blasint incX, void *A);
|
||||
OPENBLAS_EXPORT void cblas_chpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A);
|
||||
OPENBLAS_EXPORT void cblas_zhpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST void *X,OPENBLAS_CONST blasint incX, void *A);
|
||||
|
||||
void cblas_sspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A);
|
||||
void cblas_dspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A);
|
||||
void cblas_chpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *Ap);
|
||||
void cblas_zhpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *Ap);
|
||||
OPENBLAS_EXPORT void cblas_sspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A);
|
||||
OPENBLAS_EXPORT void cblas_dspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A);
|
||||
OPENBLAS_EXPORT void cblas_chpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *Ap);
|
||||
OPENBLAS_EXPORT void cblas_zhpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *Ap);
|
||||
|
||||
void cblas_chbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_chbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zhbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_zhbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_chpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_chpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *Ap, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
void cblas_zhpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_zhpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *Ap, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY);
|
||||
|
||||
void cblas_sgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_sgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_dgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_cgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_cgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_cgemm3m(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_cgemm3m(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_zgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zgemm3m(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_zgemm3m(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_sgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_sgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_dgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_cgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_cgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_zgemmt(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_ssymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_ssymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_dsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_csymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_csymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_zsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_ssyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_ssyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_dsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_csyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_csyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_zsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_ssyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_ssyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_dsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_dsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_csyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_csyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_EXPORT void cblas_zsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans,
|
||||
OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_strmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_strmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_dtrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_dtrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ctrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_ctrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ztrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_ztrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb);
|
||||
|
||||
void cblas_strsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_strsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_dtrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_dtrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ctrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_ctrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb);
|
||||
void cblas_ztrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_EXPORT void cblas_ztrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA,
|
||||
OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb);
|
||||
|
||||
void cblas_chemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_chemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zhemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_EXPORT void cblas_zhemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_cherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_cherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_zherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST double alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_cher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_cher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_zher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_zher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, void *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
void cblas_xerbla(blasint p, OPENBLAS_CONST char *rout, OPENBLAS_CONST char *form, ...);
|
||||
OPENBLAS_EXPORT void cblas_xerbla(blasint p, OPENBLAS_CONST char *rout, OPENBLAS_CONST char *form, ...);
|
||||
|
||||
/*** BLAS extensions ***/
|
||||
|
||||
void cblas_saxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_saxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_daxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST double beta, double *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_daxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST double beta, double *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_caxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_caxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_zaxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_zaxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_somatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, OPENBLAS_CONST float *a,
|
||||
OPENBLAS_EXPORT void cblas_somatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, OPENBLAS_CONST float *a,
|
||||
OPENBLAS_CONST blasint clda, float *b, OPENBLAS_CONST blasint cldb);
|
||||
void cblas_domatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, OPENBLAS_CONST double *a,
|
||||
OPENBLAS_EXPORT void cblas_domatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, OPENBLAS_CONST double *a,
|
||||
OPENBLAS_CONST blasint clda, double *b, OPENBLAS_CONST blasint cldb);
|
||||
void cblas_comatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float* calpha, OPENBLAS_CONST float* a,
|
||||
OPENBLAS_EXPORT void cblas_comatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float* calpha, OPENBLAS_CONST float* a,
|
||||
OPENBLAS_CONST blasint clda, float*b, OPENBLAS_CONST blasint cldb);
|
||||
void cblas_zomatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double* calpha, OPENBLAS_CONST double* a,
|
||||
OPENBLAS_EXPORT void cblas_zomatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double* calpha, OPENBLAS_CONST double* a,
|
||||
OPENBLAS_CONST blasint clda, double *b, OPENBLAS_CONST blasint cldb);
|
||||
|
||||
void cblas_simatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, float *a,
|
||||
OPENBLAS_EXPORT void cblas_simatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, float *a,
|
||||
OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb);
|
||||
void cblas_dimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, double *a,
|
||||
OPENBLAS_EXPORT void cblas_dimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, double *a,
|
||||
OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb);
|
||||
void cblas_cimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float* calpha, float* a,
|
||||
OPENBLAS_EXPORT void cblas_cimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float* calpha, float* a,
|
||||
OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb);
|
||||
void cblas_zimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double* calpha, double* a,
|
||||
OPENBLAS_EXPORT void cblas_zimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double* calpha, double* a,
|
||||
OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb);
|
||||
|
||||
void cblas_sgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST float cbeta,
|
||||
float *c, OPENBLAS_CONST blasint cldc);
|
||||
void cblas_dgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST double cbeta,
|
||||
OPENBLAS_EXPORT void cblas_sgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_A,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_C,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint clda,OPENBLAS_CONST float cbeta, float *c,
|
||||
OPENBLAS_CONST blasint cldc);
|
||||
OPENBLAS_EXPORT void cblas_dgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_A,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_C,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST double cbeta,
|
||||
double *c, OPENBLAS_CONST blasint cldc);
|
||||
void cblas_cgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float *calpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST float *cbeta,
|
||||
OPENBLAS_EXPORT void cblas_cgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_A,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_C,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float *calpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST float *cbeta,
|
||||
float *c, OPENBLAS_CONST blasint cldc);
|
||||
void cblas_zgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double *calpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST double *cbeta,
|
||||
OPENBLAS_EXPORT void cblas_zgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_A,OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS_C,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double *calpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST double *cbeta,
|
||||
double *c, OPENBLAS_CONST blasint cldc);
|
||||
|
||||
void cblas_sgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_EXPORT void cblas_sgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_CONST float * alpha_array, OPENBLAS_CONST float ** A_array, OPENBLAS_CONST blasint * lda_array, OPENBLAS_CONST float ** B_array, OPENBLAS_CONST blasint * ldb_array, OPENBLAS_CONST float * beta_array, float ** C_array, OPENBLAS_CONST blasint * ldc_array, OPENBLAS_CONST blasint group_count, OPENBLAS_CONST blasint * group_size);
|
||||
|
||||
void cblas_dgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_EXPORT void cblas_dgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_CONST double * alpha_array, OPENBLAS_CONST double ** A_array, OPENBLAS_CONST blasint * lda_array, OPENBLAS_CONST double ** B_array, OPENBLAS_CONST blasint * ldb_array, OPENBLAS_CONST double * beta_array, double ** C_array, OPENBLAS_CONST blasint * ldc_array, OPENBLAS_CONST blasint group_count, OPENBLAS_CONST blasint * group_size);
|
||||
|
||||
void cblas_cgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_EXPORT void cblas_cgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_CONST void * alpha_array, OPENBLAS_CONST void ** A_array, OPENBLAS_CONST blasint * lda_array, OPENBLAS_CONST void ** B_array, OPENBLAS_CONST blasint * ldb_array, OPENBLAS_CONST void * beta_array, void ** C_array, OPENBLAS_CONST blasint * ldc_array, OPENBLAS_CONST blasint group_count, OPENBLAS_CONST blasint * group_size);
|
||||
|
||||
void cblas_zgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_EXPORT void cblas_zgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_CONST void * alpha_array, OPENBLAS_CONST void ** A_array, OPENBLAS_CONST blasint * lda_array, OPENBLAS_CONST void ** B_array, OPENBLAS_CONST blasint * ldb_array, OPENBLAS_CONST void * beta_array, void ** C_array, OPENBLAS_CONST blasint * ldc_array, OPENBLAS_CONST blasint group_count, OPENBLAS_CONST blasint * group_size);
|
||||
|
||||
void cblas_sgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST float * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST float beta, float * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
OPENBLAS_EXPORT void cblas_sgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST float * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST float beta, float * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
|
||||
void cblas_dgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST double * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST double beta, double * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
OPENBLAS_EXPORT void cblas_dgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST double * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST double beta, double * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
|
||||
void cblas_cgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void * alpha, OPENBLAS_CONST void * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST void * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST void * beta, void * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
OPENBLAS_EXPORT void cblas_cgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void * alpha, OPENBLAS_CONST void * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST void * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST void * beta, void * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
|
||||
void cblas_zgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void * alpha, OPENBLAS_CONST void * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST void * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST void * beta, void * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
OPENBLAS_EXPORT void cblas_zgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void * alpha, OPENBLAS_CONST void * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST void * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST void * beta, void * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
|
||||
/*** BFLOAT16 and INT8 extensions ***/
|
||||
/* convert float array to BFLOAT16 array by rounding */
|
||||
void cblas_sbstobf16(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *in, OPENBLAS_CONST blasint incin, bfloat16 *out, OPENBLAS_CONST blasint incout);
|
||||
OPENBLAS_EXPORT void cblas_sbstobf16(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *in, OPENBLAS_CONST blasint incin, bfloat16 *out, OPENBLAS_CONST blasint incout);
|
||||
/* convert double array to BFLOAT16 array by rounding */
|
||||
void cblas_sbdtobf16(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *in, OPENBLAS_CONST blasint incin, bfloat16 *out, OPENBLAS_CONST blasint incout);
|
||||
OPENBLAS_EXPORT void cblas_sbdtobf16(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *in, OPENBLAS_CONST blasint incin, bfloat16 *out, OPENBLAS_CONST blasint incout);
|
||||
/* convert BFLOAT16 array to float array */
|
||||
void cblas_sbf16tos(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *in, OPENBLAS_CONST blasint incin, float *out, OPENBLAS_CONST blasint incout);
|
||||
OPENBLAS_EXPORT void cblas_sbf16tos(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *in, OPENBLAS_CONST blasint incin, float *out, OPENBLAS_CONST blasint incout);
|
||||
/* convert BFLOAT16 array to double array */
|
||||
void cblas_dbf16tod(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *in, OPENBLAS_CONST blasint incin, double *out, OPENBLAS_CONST blasint incout);
|
||||
void cblas_bgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 alpha, OPENBLAS_CONST bfloat16 *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST bfloat16 beta, bfloat16 *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_dbf16tod(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *in, OPENBLAS_CONST blasint incin, double *out, OPENBLAS_CONST blasint incout);
|
||||
OPENBLAS_EXPORT void cblas_bgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 alpha, OPENBLAS_CONST bfloat16 *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST bfloat16 beta, bfloat16 *y, OPENBLAS_CONST blasint incy);
|
||||
/* dot production of BFLOAT16 input arrays, and output as float */
|
||||
float cblas_sbdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST bfloat16 *y, OPENBLAS_CONST blasint incy);
|
||||
void cblas_sbgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT float cblas_sbdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST bfloat16 *y, OPENBLAS_CONST blasint incy);
|
||||
OPENBLAS_EXPORT void cblas_sbgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy);
|
||||
|
||||
void cblas_bgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_bgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST bfloat16 alpha, OPENBLAS_CONST bfloat16 *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST bfloat16 beta, bfloat16 *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_sbgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_sbgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
void cblas_sbgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_EXPORT void cblas_sbgemm_batch(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransA_array, OPENBLAS_CONST enum CBLAS_TRANSPOSE * TransB_array, OPENBLAS_CONST blasint * M_array, OPENBLAS_CONST blasint * N_array, OPENBLAS_CONST blasint * K_array,
|
||||
OPENBLAS_CONST float * alpha_array, OPENBLAS_CONST bfloat16 ** A_array, OPENBLAS_CONST blasint * lda_array, OPENBLAS_CONST bfloat16 ** B_array, OPENBLAS_CONST blasint * ldb_array, OPENBLAS_CONST float * beta_array, float ** C_array, OPENBLAS_CONST blasint * ldc_array, OPENBLAS_CONST blasint group_count, OPENBLAS_CONST blasint * group_size);
|
||||
|
||||
void cblas_sbgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST bfloat16 * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST float beta, float * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
OPENBLAS_EXPORT void cblas_sbgemm_batch_strided(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 * A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST blasint stridea, OPENBLAS_CONST bfloat16 * B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST blasint strideb, OPENBLAS_CONST float beta, float * C, OPENBLAS_CONST blasint ldc, OPENBLAS_CONST blasint stridec, OPENBLAS_CONST blasint group_size);
|
||||
/*** FLOAT16 extensions ***/
|
||||
void cblas_shgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_EXPORT void cblas_shgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K,
|
||||
OPENBLAS_CONST float alpha, OPENBLAS_CONST hfloat16 *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST hfloat16 *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
+19
-2
@@ -48,10 +48,27 @@ if (DYNAMIC_ARCH)
|
||||
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 11) # SVE ACLE supported in LLVM >= 11
|
||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} NEOVERSEV1 NEOVERSEN2 ARMV8SVE A64FX)
|
||||
endif ()
|
||||
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 19 OR (${CMAKE_C_COMPILER_ID} MATCHES AppleClang AND ${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 17) ) # SME ACLE supported in LLVM >= 19 and AppleClang >= 17
|
||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} ARMV9SME VORTEXM4)
|
||||
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 17) # SME ACLE supported in LLVM >= 17
|
||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} ARMV9SME)
|
||||
endif()
|
||||
|
||||
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 19 OR (${CMAKE_C_COMPILER_ID} MATCHES AppleClang AND ${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 17) ) # SME w/out SVE supported in LLVM >= 19 and AppleClang >= 17
|
||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} VORTEXM4)
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR ${CMAKE_SYSTEM_NAME} STREQUAL "iOS")
|
||||
set(DYNAMIC_CORE ARMV8 NEOVERSEN1)
|
||||
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 19 OR (${CMAKE_C_COMPILER_ID} MATCHES AppleClang AND ${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 17) ) # SME ACLE supported in LLVM >= 19 and AppleClang >= 17
|
||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} VORTEXM4)
|
||||
endif()
|
||||
if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL 14) # SME ACLE supported in GCC >= 14
|
||||
set(DYNAMIC_CORE ${DYNAMIC_CORE} ARMV9SME)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (DYNAMIC_LIST)
|
||||
set(DYNAMIC_CORE ARMV8 ${DYNAMIC_LIST})
|
||||
endif ()
|
||||
|
||||
+10
-6
@@ -113,6 +113,7 @@ if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI")
|
||||
endif ()
|
||||
|
||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "NVHPC")
|
||||
set (GCC_VERSION 100)
|
||||
if (POWER)
|
||||
set(CCOMMON_OPT "${CCOMMON_OPT} -tp pwr8")
|
||||
elseif (X86_64)
|
||||
@@ -312,13 +313,13 @@ endif ()
|
||||
if (${CORE} STREQUAL ARMV9SME)
|
||||
if (NOT DYNAMIC_ARCH)
|
||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "NVHPC" AND NOT NO_SVE)
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -tp=host")
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -tp=host")
|
||||
else ()
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv9-a+sme")
|
||||
if (${OSNAME} STREQUAL Windows AND ${CMAKE_C_COMPILER_ID} MATCHES "Clang" )
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} --aarch64-stack-hazard-size=0")
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv9-a+sme+sme-f64f64")
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -mllvm --aarch64-stack-hazard-size=0")
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
@@ -328,7 +329,7 @@ if (${CORE} STREQUAL VORTEXM4)
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -tp=host")
|
||||
else ()
|
||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang")
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.4-a+sme -mcpu=apple-m4")
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.4-a+sme+sme-f64f64 -mcpu=apple-m4")
|
||||
else ()
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.4-a -mcpu=apple-m4")
|
||||
endif ()
|
||||
@@ -427,6 +428,9 @@ endif()
|
||||
if (${CORE} STREQUAL RISCV64_GENERIC)
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=rv64imafdc -mabi=lp64d")
|
||||
endif()
|
||||
if (${CORE} STREQUAL U74)
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=rv64imafdc_zba_zbb -mabi=lp64d -mtune=sifive-u74")
|
||||
endif()
|
||||
if (${CORE} STREQUAL x280)
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -march=rv64imafdcv_zba_zbb_zfh_zvl512b -mabi=lp64d")
|
||||
endif()
|
||||
|
||||
+22
-20
@@ -70,8 +70,8 @@ set(SLASRC
|
||||
slaqgb.f slaqge.f slaqp2.f slaqps.f slaqp2rk.f slaqp3rk.f slaqsb.f slaqsp.f slaqsy.f
|
||||
slaqr0.f slaqr1.f slaqr2.f slaqr3.f slaqr4.f slaqr5.f
|
||||
slaqtr.f slar1v.f slar2v.f ilaslr.f ilaslc.f
|
||||
slarf.f slarfb.f slarfb_gett.f slarfg.f slarfgp.f slarft.f slarfx.f slarfy.f slargv.f
|
||||
slarrv.f slartv.f
|
||||
slarf.f slarfb.f slarfb_gett.f slarfg.f slarfgp.f slarft.f slarft_lvl2.f slarfx.f
|
||||
slarfy.f slargv.f slarf1f.f slarf1l.f slarrv.f slartv.f
|
||||
slarz.f slarzb.f slarzt.f slasy2.f
|
||||
slasyf.f slasyf_rook.f slasyf_rk.f slasyf_aa.f
|
||||
slatbs.f slatdf.f slatps.f slatrd.f slatrs.f slatrz.f
|
||||
@@ -124,7 +124,7 @@ set(SLASRC
|
||||
ssbev_2stage.f ssbevx_2stage.f ssbevd_2stage.f ssygv_2stage.f
|
||||
sgesvdq.f slaorhr_col_getrfnp.f
|
||||
slaorhr_col_getrfnp2.f sorgtsqr.f sorgtsqr_row.f sorhr_col.f
|
||||
slatrs3.f strsyl3.f sgelst.f sgedmd.f90 sgedmdq.f90)
|
||||
slatrs3.f strsyl3.f sgelst.f sgedmd.f90 sgedmdq.f90 sgecxx.f)
|
||||
|
||||
set(SXLASRC sgesvxx.f sgerfsx.f sla_gerfsx_extended.f sla_geamv.f
|
||||
sla_gercond.f sla_gerpvgrw.f ssysvxx.f ssyrfsx.f
|
||||
@@ -177,7 +177,8 @@ set(CLASRC
|
||||
claqr0.f claqr1.f claqr2.f claqr3.f claqr4.f claqr5.f
|
||||
claqz0.f claqz1.f claqz2.f claqz3.f
|
||||
claqsp.f claqsy.f clar1v.f clar2v.f ilaclr.f ilaclc.f
|
||||
clarf.f clarfb.f clarfb_gett.f clarfg.f clarfgp.f clarft.f
|
||||
clarf.f clarfb.f clarfb_gett.f clarfg.f clarfgp.f clarft.f clarft_lvl2.f
|
||||
clarf1f.f clarf1l.f
|
||||
clarfx.f clarfy.f clargv.f clarnv.f clarrv.f clartg.f90 clartv.f
|
||||
clarz.f clarzb.f clarzt.f clascl.f claset.f clasr.f classq.f90
|
||||
clasyf.f clasyf_rook.f clasyf_rk.f clasyf_aa.f
|
||||
@@ -223,7 +224,7 @@ set(CLASRC
|
||||
chbev_2stage.f chbevx_2stage.f chbevd_2stage.f chegv_2stage.f
|
||||
cgesvdq.f claunhr_col_getrfnp.f claunhr_col_getrfnp2.f
|
||||
cungtsqr.f cungtsqr_row.f cunhr_col.f
|
||||
clatrs3.f ctrsyl3.f cgelst.f cgedmd.f90 cgedmdq.f90)
|
||||
clatrs3.f ctrsyl3.f cgelst.f cgedmd.f90 cgedmdq.f90 cgecxx.f)
|
||||
|
||||
set(CXLASRC cgesvxx.f cgerfsx.f cla_gerfsx_extended.f cla_geamv.f
|
||||
cla_gercond_c.f cla_gercond_x.f cla_gerpvgrw.f
|
||||
@@ -261,8 +262,8 @@ set(DLASRC
|
||||
dlaqgb.f dlaqge.f dlaqp2.f dlaqp2rk.f dlaqp3rk.f dlaqps.f dlaqsb.f dlaqsp.f dlaqsy.f
|
||||
dlaqr0.f dlaqr1.f dlaqr2.f dlaqr3.f dlaqr4.f dlaqr5.f
|
||||
dlaqtr.f dlar1v.f dlar2v.f iladlr.f iladlc.f
|
||||
dlarf.f dlarfb.f dlarfb_gett.f dlarfg.f dlarfgp.f dlarft.f dlarfx.f dlarfy.f
|
||||
dlargv.f dlarrv.f dlartv.f
|
||||
dlarf.f dlarfb.f dlarfb_gett.f dlarfg.f dlarfgp.f dlarft.f dlarft_lvl2.f
|
||||
dlarfx.f dlarfy.f dlarf1f.f dlarf1l.f dlargv.f dlarrv.f dlartv.f
|
||||
dlarz.f dlarzb.f dlarzt.f dlasy2.f
|
||||
dlasyf.f dlasyf_rook.f dlasyf_rk.f dlasyf_aa.f
|
||||
dlatbs.f dlatdf.f dlatps.f dlatrd.f dlatrs.f dlatrz.f
|
||||
@@ -316,7 +317,7 @@ set(DLASRC
|
||||
dsbev_2stage.f dsbevx_2stage.f dsbevd_2stage.f dsygv_2stage.f
|
||||
dcombssq.f dgesvdq.f dlaorhr_col_getrfnp.f
|
||||
dlaorhr_col_getrfnp2.f dorgtsqr.f dorgtsqr_row.f dorhr_col.f
|
||||
dlatrs3.f dtrsyl3.f dgelst.f dgedmd.f90 dgedmdq.f90)
|
||||
dlatrs3.f dtrsyl3.f dgelst.f dgedmd.f90 dgedmdq.f90 dgecxx.f)
|
||||
|
||||
set(DXLASRC dgesvxx.f dgerfsx.f dla_gerfsx_extended.f dla_geamv.f
|
||||
dla_gercond.f dla_gerpvgrw.f dsysvxx.f dsyrfsx.f
|
||||
@@ -371,7 +372,7 @@ set(ZLASRC
|
||||
zlaqr0.f zlaqr1.f zlaqr2.f zlaqr3.f zlaqr4.f zlaqr5.f
|
||||
zlaqsp.f zlaqsy.f zlar1v.f zlar2v.f ilazlr.f ilazlc.f
|
||||
zlarcm.f zlarf.f zlarfb.f zlarfb_gett.f
|
||||
zlarfg.f zlarfgp.f zlarft.f
|
||||
zlarfg.f zlarfgp.f zlarft.f zlarft_lvl2.f zlarf1f.f zlarf1l.f
|
||||
zlarfx.f zlarfy.f zlargv.f zlarnv.f zlarrv.f zlartg.f90 zlartv.f
|
||||
zlarz.f zlarzb.f zlarzt.f zlascl.f zlaset.f zlasr.f
|
||||
zlassq.f90 zlasyf.f zlasyf_rook.f zlasyf_rk.f zlasyf_aa.f
|
||||
@@ -419,7 +420,7 @@ set(ZLASRC
|
||||
zhbev_2stage.f zhbevx_2stage.f zhbevd_2stage.f zhegv_2stage.f
|
||||
zgesvdq.f zlaunhr_col_getrfnp.f zlaunhr_col_getrfnp2.f
|
||||
zungtsqr.f zungtsqr_row.f zunhr_col.f
|
||||
zlatrs3.f ztrsyl3.f zgelst.f zgedmd.f90 zgedmdq.f90)
|
||||
zlatrs3.f ztrsyl3.f zgelst.f zgedmd.f90 zgedmdq.f90 zgecxx.f)
|
||||
|
||||
set(ZXLASRC zgesvxx.f zgerfsx.f zla_gerfsx_extended.f zla_geamv.f
|
||||
zla_gercond_c.f zla_gercond_x.f zla_gerpvgrw.f zsysvxx.f zsyrfsx.f
|
||||
@@ -574,8 +575,8 @@ set(SLASRC
|
||||
slaqgb.c slaqge.c slaqp2.c slaqp2rk.c slaqp3rk.c slaqps.c slaqsb.c slaqsp.c slaqsy.c
|
||||
slaqr0.c slaqr1.c slaqr2.c slaqr3.c slaqr4.c slaqr5.c
|
||||
slaqtr.c slar1v.c slar2v.c ilaslr.c ilaslc.c
|
||||
slarf.c slarfb.c slarfb_gett.c slarfg.c slarfgp.c slarft.c slarfx.c slarfy.c slargv.c
|
||||
slarrv.c slartv.c
|
||||
slarf.c slarfb.c slarfb_gett.c slarfg.c slarfgp.c slarft.c slarft_lvl2.c slarfx.c
|
||||
slarfy.c slargv.c slarf1f.c slarf1l.c slarrv.c slartv.c
|
||||
slarz.c slarzb.c slarzt.c slasy2.c
|
||||
slasyf.c slasyf_rook.c slasyf_rk.c slasyf_aa.c
|
||||
slatbs.c slatdf.c slatps.c slatrd.c slatrs.c slatrz.c
|
||||
@@ -628,7 +629,7 @@ set(SLASRC
|
||||
ssbev_2stage.c ssbevx_2stage.c ssbevd_2stage.c ssygv_2stage.c
|
||||
sgesvdq.c slaorhr_col_getrfnp.c
|
||||
slaorhr_col_getrfnp2.c sorgtsqr.c sorgtsqr_row.c sorhr_col.c
|
||||
slatrs3.c strsyl3.c sgelst.c sgedmd.c sgedmdq.c)
|
||||
slatrs3.c strsyl3.c sgelst.c sgedmd.c sgedmdq.c sgecxx.c)
|
||||
|
||||
set(SXLASRC sgesvxx.c sgerfsx.c sla_gerfsx_extended.c sla_geamv.c
|
||||
sla_gercond.c sla_gerpvgrw.c ssysvxx.c ssyrfsx.c
|
||||
@@ -681,6 +682,7 @@ set(CLASRC
|
||||
claqr0.c claqr1.c claqr2.c claqr3.c claqr4.c claqr5.c
|
||||
claqsp.c claqsy.c clar1v.c clar2v.c ilaclr.c ilaclc.c
|
||||
clarf.c clarfb.c clarfb_gett.c clarfg.c clarfgp.c clarft.c
|
||||
clarft_lvl2.c clarf1f.c clarf1l.c
|
||||
clarfx.c clarfy.c clargv.c clarnv.c clarrv.c clartg.c clartv.c
|
||||
clarz.c clarzb.c clarzt.c clascl.c claset.c clasr.c classq.c
|
||||
clasyf.c clasyf_rook.c clasyf_rk.c clasyf_aa.c
|
||||
@@ -726,7 +728,7 @@ set(CLASRC
|
||||
chbev_2stage.c chbevx_2stage.c chbevd_2stage.c chegv_2stage.c
|
||||
cgesvdq.c claunhr_col_getrfnp.c claunhr_col_getrfnp2.c
|
||||
cungtsqr.c cungtsqr_row.c cunhr_col.c
|
||||
clatrs3.c ctrsyl3.c cgelst.c cgedmd.c cgedmdq.c)
|
||||
clatrs3.c ctrsyl3.c cgelst.c cgedmd.c cgedmdq.c cgecxx.c)
|
||||
|
||||
set(CXLASRC cgesvxx.c cgerfsx.c cla_gerfsx_extended.c cla_geamv.c
|
||||
cla_gercond_c.c cla_gercond_x.c cla_gerpvgrw.c
|
||||
@@ -763,8 +765,8 @@ set(DLASRC
|
||||
dlaqgb.c dlaqge.c dlaqp2.c dlaqp2rk.c dlaqp3rk.c dlaqps.c dlaqsb.c dlaqsp.c dlaqsy.c
|
||||
dlaqr0.c dlaqr1.c dlaqr2.c dlaqr3.c dlaqr4.c dlaqr5.c
|
||||
dlaqtr.c dlar1v.c dlar2v.c iladlr.c iladlc.c
|
||||
dlarf.c dlarfb.c dlarfb_gett.c dlarfg.c dlarfgp.c dlarft.c dlarfx.c dlarfy.c
|
||||
dlargv.c dlarrv.c dlartv.c
|
||||
dlarf.c dlarfb.c dlarfb_gett.c dlarfg.c dlarfgp.c dlarft.c dlarft_lvl2.c
|
||||
dlarfx.c dlarfy.c dlarf1f.c dlarf1l.c dlargv.c dlarrv.c dlartv.c
|
||||
dlarz.c dlarzb.c dlarzt.c dlasy2.c
|
||||
dlasyf.c dlasyf_rook.c dlasyf_rk.c dlasyf_aa.c
|
||||
dlatbs.c dlatdf.c dlatps.c dlatrd.c dlatrs.c dlatrz.c
|
||||
@@ -818,7 +820,7 @@ set(DLASRC
|
||||
dsbev_2stage.c dsbevx_2stage.c dsbevd_2stage.c dsygv_2stage.c
|
||||
dcombssq.c dgesvdq.c dlaorhr_col_getrfnp.c
|
||||
dlaorhr_col_getrfnp2.c dorgtsqr.c dorgtsqr_row.c dorhr_col.c
|
||||
dlatrs3.c dtrsyl3.c dgelst.c dgedmd.c dgedmdq.c)
|
||||
dlatrs3.c dtrsyl3.c dgelst.c dgedmd.c dgedmdq.c dgecxx.c)
|
||||
|
||||
set(DXLASRC dgesvxx.c dgerfsx.c dla_gerfsx_extended.c dla_geamv.c
|
||||
dla_gercond.c dla_gerpvgrw.c dsysvxx.c dsyrfsx.c
|
||||
@@ -871,8 +873,8 @@ set(ZLASRC
|
||||
zlaqhb.c zlaqhe.c zlaqhp.c zlaqp2.c zlaqp2rk.c zlaqp3rk.c zlaqps.c zlaqsb.c
|
||||
zlaqr0.c zlaqr1.c zlaqr2.c zlaqr3.c zlaqr4.c zlaqr5.c
|
||||
zlaqsp.c zlaqsy.c zlar1v.c zlar2v.c ilazlr.c ilazlc.c
|
||||
zlarcm.c zlarf.c zlarfb.c zlarfb_gett.c
|
||||
zlarfg.c zlarfgp.c zlarft.c
|
||||
zlarcm.c zlarf.c zlarfb.c zlarfb_gett.c zlarf1f.c zlarf1l.c
|
||||
zlarfg.c zlarfgp.c zlarft.c zlarft_lvl2.c
|
||||
zlarfx.c zlarfy.c zlargv.c zlarnv.c zlarrv.c zlartg.c zlartv.c
|
||||
zlarz.c zlarzb.c zlarzt.c zlascl.c zlaset.c zlasr.c
|
||||
zlassq.c zlasyf.c zlasyf_rook.c zlasyf_rk.c zlasyf_aa.c
|
||||
@@ -920,7 +922,7 @@ set(ZLASRC
|
||||
zhbev_2stage.c zhbevx_2stage.c zhbevd_2stage.c zhegv_2stage.c
|
||||
zgesvdq.c zlaunhr_col_getrfnp.c zlaunhr_col_getrfnp2.c
|
||||
zungtsqr.c zungtsqr_row.c zunhr_col.c zlatrs3.c ztrsyl3.c zgelst.c
|
||||
zgedmd.c zgedmdq.c)
|
||||
zgedmd.c zgedmdq.c zgecxx.c)
|
||||
|
||||
set(ZXLASRC zgesvxx.c zgerfsx.c zla_gerfsx_extended.c zla_geamv.c
|
||||
zla_gercond_c.c zla_gercond_x.c zla_gerpvgrw.c zsysvxx.c zsyrfsx.c
|
||||
|
||||
+9
-1
@@ -30,6 +30,8 @@ set(CSRC
|
||||
lapacke_cgebrd_work.c
|
||||
lapacke_cgecon.c
|
||||
lapacke_cgecon_work.c
|
||||
lapacke_cgecxx.c
|
||||
lapacke_cgecxx_work.c
|
||||
lapacke_cgeequ.c
|
||||
lapacke_cgeequ_work.c
|
||||
lapacke_cgeequb.c
|
||||
@@ -659,6 +661,8 @@ set(DSRC
|
||||
lapacke_dgebrd_work.c
|
||||
lapacke_dgecon.c
|
||||
lapacke_dgecon_work.c
|
||||
lapacke_dgecxx.c
|
||||
lapacke_dgecxx_work.c
|
||||
lapacke_dgeequ.c
|
||||
lapacke_dgeequ_work.c
|
||||
lapacke_dgeequb.c
|
||||
@@ -1241,6 +1245,8 @@ set(SSRC
|
||||
lapacke_sgebrd_work.c
|
||||
lapacke_sgecon.c
|
||||
lapacke_sgecon_work.c
|
||||
lapacke_sgecxx.c
|
||||
lapacke_sgecxx_work.c
|
||||
lapacke_sgeequ.c
|
||||
lapacke_sgeequ_work.c
|
||||
lapacke_sgeequb.c
|
||||
@@ -1817,6 +1823,8 @@ set(ZSRC
|
||||
lapacke_zgebrd_work.c
|
||||
lapacke_zgecon.c
|
||||
lapacke_zgecon_work.c
|
||||
lapacke_zgecxx.c
|
||||
lapacke_zgecxx_work.c
|
||||
lapacke_zgeequ.c
|
||||
lapacke_zgeequ_work.c
|
||||
lapacke_zgeequb.c
|
||||
@@ -2542,4 +2550,4 @@ endforeach ()
|
||||
|
||||
set(lapacke_include_dir "${NETLIB_LAPACK_DIR}/LAPACKE/include")
|
||||
include_directories(${lapacke_include_dir})
|
||||
set_source_files_properties(${LAPACKE_SOURCES} PROPERTIES COMPILE_FLAGS "${LAPACK_CFLAGS}")
|
||||
set_source_files_properties(${LAPACKE_SOURCES} PROPERTIES COMPILE_FLAGS "${LAPACK_CFLAGS} -fvisibility=default")
|
||||
|
||||
+10
-1
@@ -1313,7 +1313,7 @@ endif ()
|
||||
set(ZGEMM_UNROLL_M 2)
|
||||
set(ZGEMM_UNROLL_N 4)
|
||||
set(SYMV_P 16)
|
||||
elseif ("${TCORE}" STREQUAL "ARMV8SVE" OR "${TCORE}" STREQUAL "CORTEXA510" OR "${TCORE}" STREQUAL "CORTEXX2" OR "${TCORE}" STREQUAL "ARMV9")
|
||||
elseif ("${TCORE}" STREQUAL "ARMV8SVE" OR "${TCORE}" STREQUAL "CORTEXA510" OR "${TCORE}" STREQUAL "CORTEXX2" OR "${TCORE}" STREQUAL "ARMV9SME")
|
||||
file(APPEND ${TARGET_CONF_TEMP}
|
||||
"#define L1_DATA_SIZE\t32768\n"
|
||||
"#define L1_DATA_LINESIZE\t64\n"
|
||||
@@ -1504,6 +1504,15 @@ endif ()
|
||||
"#define DTB_DEFAULT_ENTRIES 128\n"
|
||||
"#define DTB_SIZE 4096\n"
|
||||
"#define L2_ASSOCIATIVE 4\n")
|
||||
elseif ("${TCORE}" STREQUAL "U74")
|
||||
file(APPEND ${TARGET_CONF_TEMP}
|
||||
"#define L1_DATA_SIZE 32768\n"
|
||||
"#define L1_DATA_LINESIZE 64\n"
|
||||
"#define L2_SIZE 2097152\n"
|
||||
"#define L2_LINESIZE 64 \n"
|
||||
"#define DTB_DEFAULT_ENTRIES 128\n"
|
||||
"#define DTB_SIZE 4096\n"
|
||||
"#define L2_ASSOCIATIVE 16\n")
|
||||
elseif ("${TCORE}" STREQUAL "WASM128_GENERIC")
|
||||
file(APPEND ${TARGET_CONF_TEMP}
|
||||
"#define L1_DATA_SIZE 32768\n"
|
||||
|
||||
+17
-11
@@ -68,10 +68,10 @@ endif ()
|
||||
if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32)
|
||||
message(STATUS "Compiling a ${BINARY}-bit binary.")
|
||||
set(NO_AVX 1)
|
||||
if (${TARGET} STREQUAL "HASWELL" OR ${TARGET} STREQUAL "SANDYBRIDGE" OR ${TARGET} STREQUAL "SKYLAKEX" OR ${TARGET} STREQUAL "COOPERLAKE" OR ${TARGET} STREQUAL "SAPPHIRERAPIDS")
|
||||
if (${TARGET} STREQUAL "HASWELL" OR ${TARGET} STREQUAL "ZEN" OR ${TARGET} STREQUAL "SANDYBRIDGE" OR ${TARGET} STREQUAL "SKYLAKEX" OR ${TARGET} STREQUAL "COOPERLAKE" OR ${TARGET} STREQUAL "SAPPHIRERAPIDS")
|
||||
set(TARGET "NEHALEM")
|
||||
endif ()
|
||||
if (${TARGET} STREQUAL "BULLDOZER" OR ${TARGET} STREQUAL "PILEDRIVER" OR ${TARGET} STREQUAL "ZEN")
|
||||
if (${TARGET} STREQUAL "BULLDOZER" OR ${TARGET} STREQUAL "PILEDRIVER")
|
||||
set(TARGET "BARCELONA")
|
||||
endif ()
|
||||
if (${TARGET} STREQUAL "ARMV8" OR ${TARGET} STREQUAL "CORTEXA57" OR ${TARGET} STREQUAL "CORTEXA53" OR ${TARGET} STREQUAL "CORTEXA55")
|
||||
@@ -147,6 +147,9 @@ if (POWER)
|
||||
set(HAVE_GAS 0)
|
||||
elseif (CMAKE_ASM_COMPILER_ID STREQUAL "Clang")
|
||||
set(CCOMMON_OPT "${CCOMMON_OPT} -fno-integrated-as")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||
set(CCOMMON_OPT "${CCOMMON_OPT} -Wa,-mpwr10")
|
||||
endif ()
|
||||
set(HAVE_GAS 0)
|
||||
endif ()
|
||||
set(GETARCH_FLAGS "${GETARCH_FLAGS} -DHAVE_GAS=${HAVE_GAS}")
|
||||
@@ -366,24 +369,22 @@ if (${TARGET} STREQUAL NEOVERSEV1)
|
||||
endif()
|
||||
endif()
|
||||
if (${TARGET} STREQUAL ARMV9SME)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv9-a+sme -O3")
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv9-a+sme+sme-f64f64 -O3")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} --aarch64-stack-hazard-size=0")
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mllvm --aarch64-stack-hazard-size=0")
|
||||
endif()
|
||||
endif()
|
||||
if (${TARGET} STREQUAL VORTEXM4)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv8.4-a+sme -O3")
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv8.4-a+sme+sme-f64f64 -O3")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} --aarch64-stack-hazard-size=0")
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -mllvm --aarch64-stack-hazard-size=0")
|
||||
endif()
|
||||
endif()
|
||||
if (${TARGET} STREQUAL A64FX)
|
||||
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -Msve-intrinsics -march=armv8.2-a+sve -mtune=a64fx")
|
||||
else ()
|
||||
set (GCC_VERSION 0.0)
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
|
||||
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
|
||||
if (CMAKE_C_COMPILER_VERSION VERSION_GREATER 10.4 OR CMAKE_C_COMPILER_VERSION VERSION_EQUAL 10.4)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv8.2-a+sve -mtune=a64fx")
|
||||
else ()
|
||||
message(FATAL_ERROR "Compiler $${CMAKE_C_COMPILER} {GCC_VERSION} does not support A64FX.")
|
||||
@@ -409,6 +410,9 @@ if (${TARGET} STREQUAL NEOVERSEV1)
|
||||
if (${TARGET} STREQUAL RISCV64_GENERIC)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=rv64imafdc -mabi=lp64d")
|
||||
endif()
|
||||
if (${TARGET} STREQUAL U74)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=rv64imafdc_zba_zbb -mabi=lp64d -mtune=sifive-u74")
|
||||
endif()
|
||||
if (${TARGET} STREQUAL x280)
|
||||
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=rv64imafdcv_zba_zbb_zfh_zvl512b -mabi=lp64d")
|
||||
endif()
|
||||
@@ -648,8 +652,8 @@ endif()
|
||||
|
||||
set(LIBPREFIX "lib${LIBNAMEPREFIX}openblas")
|
||||
|
||||
if (DEFINED LIBNAMESUFFIX)
|
||||
set(LIBPREFIX "${LIBNAMEPREFIX}_${LIBNAMESUFFIX}")
|
||||
if (DEFINED LIBNAMESUFFIX AND NOT "${LIBNAMESUFFIX}" STREQUAL "")
|
||||
set(LIBPREFIX "lib${LIBNAMEPREFIX}openblas${LIBNAMESUFFIX}")
|
||||
endif ()
|
||||
|
||||
if (NOT DEFINED SYMBOLPREFIX)
|
||||
@@ -742,6 +746,7 @@ if (BUILD_HFLOAT16)
|
||||
endif()
|
||||
if(NOT MSVC)
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CCOMMON_OPT}")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
|
||||
endif()
|
||||
# TODO: not sure what PFLAGS is -hpa
|
||||
set(PFLAGS "${PFLAGS} ${CCOMMON_OPT} -I${TOPDIR} -DPROFILE ${COMMON_PROF}")
|
||||
@@ -804,6 +809,7 @@ if (${CMAKE_C_COMPILER_ID} MATCHES "IntelLLVM" AND ${CMAKE_SYSTEM_NAME} STREQUAL
|
||||
set(LAPACK_CFLAGS "${LAPACK_CFLAGS} -DNOCHANGE")
|
||||
endif ()
|
||||
|
||||
string(REPLACE "-fvisibility=hidden" "" LAPACK_CFLAGS ${LAPACK_CFLAGS})
|
||||
|
||||
if (NOT DEFINED SUFFIX)
|
||||
set(SUFFIX o)
|
||||
|
||||
@@ -28,7 +28,7 @@ if(MINGW)
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine
|
||||
OUTPUT_VARIABLE OPENBLAS_MINGW_TARGET_MACHINE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(OPENBLAS_MINGW_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
||||
if(OPENBLAS_MINGW_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64|aarch64")
|
||||
set(MINGW64 1)
|
||||
endif()
|
||||
endif()
|
||||
@@ -157,12 +157,12 @@ endif()
|
||||
endif()
|
||||
|
||||
if (NOT NO_SME)
|
||||
file(WRITE ${PROJECT_BINARY_DIR}/sme.c ".text \n.global sme_test\n\nsme_test:\nsmstart\nsmstop\nret\n")
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} -march=armv9-a+sve2+sme -c -v -o ${PROJECT_BINARY_DIR}/sme.o ${PROJECT_BINARY_DIR}/sme.c OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE NO_SME)
|
||||
file(WRITE ${PROJECT_BINARY_DIR}/sme.S ".text \n.global sme_test\n\nsme_test:\nsmstart\nsmstop\nret\n")
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} -march=armv9-a+sve2+sme -c -v -o ${PROJECT_BINARY_DIR}/sme.o ${PROJECT_BINARY_DIR}/sme.S OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE NO_SME)
|
||||
if (NO_SME EQUAL 1)
|
||||
set (CCOMMON_OPT "${CCOMMON_OPT} -DNO_SME")
|
||||
endif()
|
||||
file(REMOVE "${PROJECT_BINARY_DIR}/sme.c" "${PROJECT_BINARY_DIR}/sme.o")
|
||||
file(REMOVE "${PROJECT_BINARY_DIR}/sme.S" "${PROJECT_BINARY_DIR}/sme.o")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -57,6 +57,7 @@ extern "C" {
|
||||
#define __USE_SVID
|
||||
#endif
|
||||
|
||||
#include "exports.h"
|
||||
#ifdef BUILD_KERNEL
|
||||
#include "config_kernel.h"
|
||||
#else
|
||||
@@ -79,6 +80,22 @@ extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
#if defined(HAVE_C11) && !defined(__cplusplus)
|
||||
#if defined(C_GCC) && ( __GNUC__ < 7)
|
||||
// workaround for GCC bug 65467
|
||||
#ifndef _Atomic
|
||||
#define _Atomic volatile
|
||||
#endif
|
||||
#endif
|
||||
#include <stdatomic.h>
|
||||
#else
|
||||
#ifndef _Atomic
|
||||
#define _Atomic volatile
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(NOINCLUDE) && !defined(ASSEMBLER)
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -193,8 +210,10 @@ extern "C" {
|
||||
|
||||
#ifdef NEEDBUNDERSCORE
|
||||
#define BLASFUNC(FUNC) FUNC##_
|
||||
#define OPENBLAS_API(FUNC) OPENBLAS_EXPORT FUNC##_
|
||||
#else
|
||||
#define BLASFUNC(FUNC) FUNC
|
||||
#define OPENBLAS_API(FUNC) OPENBLAS_EXPORT FUNC
|
||||
#endif
|
||||
|
||||
#undef USE_PTHREAD_LOCK
|
||||
@@ -430,6 +449,12 @@ please https://github.com/xianyi/OpenBLAS/issues/246
|
||||
#include "common_quad.h"
|
||||
#endif
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
#if defined(HAVE_C11) && !defined(__cplusplus)
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef ARCH_ALPHA
|
||||
#include "common_alpha.h"
|
||||
#endif
|
||||
@@ -557,6 +582,27 @@ static __inline void blas_lock(volatile BLASULONG *address){
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_C11) && !defined(__cplusplus)
|
||||
static __inline void blas_lock(volatile BLASULONG *address) {
|
||||
BLASULONG expected = 0;
|
||||
while (!atomic_compare_exchange_strong((volatile _Atomic BLASULONG *)address,
|
||||
&expected, (BLASULONG)1)) {
|
||||
expected = 0;
|
||||
YIELDING;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static __inline void blas_unlock(volatile BLASULONG *address){
|
||||
#if defined(HAVE_C11) && !defined(__cplusplus)
|
||||
atomic_store((volatile _Atomic BLASULONG *)address, (BLASULONG)0);
|
||||
#else
|
||||
MB;
|
||||
*address = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifndef RPCC_DEFINED
|
||||
#error "rpcc() implementation is missing for your platform"
|
||||
#endif
|
||||
@@ -718,7 +764,18 @@ int get_num_proc (int);
|
||||
int get_node_equal (void);
|
||||
#endif
|
||||
|
||||
void goto_set_num_threads(int);
|
||||
OPENBLAS_EXPORT void goto_set_num_threads(int);
|
||||
|
||||
/* Cooperative cancellation of in-flight operations
|
||||
* (implemented in driver/others/openblas_cancel.c). These symbols are
|
||||
* exported without SYMBOLPREFIX/SYMBOLSUFFIX decoration. */
|
||||
size_t *openblas_cancel_token(void);
|
||||
OPENBLAS_EXPORT void openblas_cancel(size_t *token, size_t loaded_token);
|
||||
|
||||
/* Internal helpers for the instrumented compute drivers. */
|
||||
size_t openblas_cancel_begin(void);
|
||||
size_t *openblas_cancel_self(void);
|
||||
int openblas_cancel_poll(size_t *slot, size_t gen);
|
||||
|
||||
void gotoblas_affinity_init(void);
|
||||
void gotoblas_affinity_quit(void);
|
||||
@@ -740,19 +797,6 @@ __declspec(dllimport) int __cdecl omp_in_parallel(void);
|
||||
__declspec(dllimport) int __cdecl omp_get_num_procs(void);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_C11
|
||||
#if defined(C_GCC) && ( __GNUC__ < 7)
|
||||
// workaround for GCC bug 65467
|
||||
#ifndef _Atomic
|
||||
#define _Atomic volatile
|
||||
#endif
|
||||
#endif
|
||||
#include <stdatomic.h>
|
||||
#else
|
||||
#ifndef _Atomic
|
||||
#define _Atomic volatile
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#else
|
||||
#ifdef __ELF__
|
||||
@@ -761,10 +805,6 @@ int omp_get_num_procs(void) __attribute__ ((weak));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static __inline void blas_unlock(volatile BLASULONG *address){
|
||||
MB;
|
||||
*address = 0;
|
||||
}
|
||||
|
||||
#ifdef OS_WINDOWSSTORE
|
||||
static __inline int readenv_atoi(char *env) {
|
||||
@@ -854,6 +894,26 @@ typedef struct {
|
||||
#endif
|
||||
|
||||
#include "common_interface.h"
|
||||
|
||||
/* Internal declaration of the public C XERBLA callback API. Keep this out of
|
||||
* common_interface.h, whose contents are copied verbatim into f77blas.h and
|
||||
* are not adjusted for SYMBOLPREFIX/SYMBOLSUFFIX by the CMake build. */
|
||||
#ifndef ASSEMBLER
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#ifndef OPENBLAS_XERBLA_HANDLER_DEFINED
|
||||
#define OPENBLAS_XERBLA_HANDLER_DEFINED
|
||||
typedef void (*openblas_xerbla_handler)(const char *name,
|
||||
const blasint *info,
|
||||
size_t name_length);
|
||||
#endif
|
||||
OPENBLAS_EXPORT openblas_xerbla_handler openblas_set_xerbla(openblas_xerbla_handler handler);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef SANITY_CHECK
|
||||
#include "common_reference.h"
|
||||
#endif
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#define WMB asm("wmb")
|
||||
#define RMB asm("mb")
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(unsigned long *address){
|
||||
#ifndef __DECC
|
||||
unsigned long tmp1, tmp2;
|
||||
@@ -78,6 +79,7 @@ static __inline void blas_lock(unsigned long *address){
|
||||
#endif
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static __inline unsigned int rpcc(void){
|
||||
|
||||
@@ -143,6 +145,16 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
.ent REALNAME; \
|
||||
REALNAME:
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.arch ev6; \
|
||||
.set noat; \
|
||||
.set noreorder; \
|
||||
.text; \
|
||||
.align 5; \
|
||||
.globl REALNAME; \
|
||||
.ent REALNAME; \
|
||||
REALNAME:
|
||||
|
||||
#ifdef PROFILE
|
||||
#define PROFCODE \
|
||||
ldgp $gp, 0($27); \
|
||||
|
||||
@@ -53,6 +53,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#if defined(ARMV6) || defined(ARMV7) || defined(ARMV8)
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
int register ret;
|
||||
@@ -75,6 +76,7 @@ static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static inline int blas_quickdivide(blasint x, blasint y){
|
||||
return x / y;
|
||||
|
||||
@@ -68,6 +68,7 @@ static __inline int WhereAmI(void){
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
BLASULONG ret;
|
||||
@@ -101,6 +102,7 @@ static __inline void blas_lock(volatile BLASULONG *address){
|
||||
}
|
||||
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
#if !defined(OS_DARWIN) && !defined (OS_ANDROID)
|
||||
static __inline BLASULONG rpcc(void){
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
#endif
|
||||
|
||||
#define CGEMM_BETA cgemm_beta
|
||||
#define SME_CGEMM_KERNEL sme_cgemm_kernel
|
||||
|
||||
#define CGEMM_KERNEL_N cgemm_kernel_n
|
||||
#define CGEMM_KERNEL_L cgemm_kernel_l
|
||||
@@ -326,6 +327,7 @@
|
||||
#define CTRSM_ILTNCOPY gotoblas -> ctrsm_iltncopy
|
||||
|
||||
#define CGEMM_BETA gotoblas -> cgemm_beta
|
||||
#define SME_CGEMM_KERNEL gotoblas -> sme_cgemm_kernel
|
||||
#define CGEMM_KERNEL_N gotoblas -> cgemm_kernel_n
|
||||
#define CGEMM_KERNEL_L gotoblas -> cgemm_kernel_l
|
||||
#define CGEMM_KERNEL_R gotoblas -> cgemm_kernel_r
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
#define DGEMM_BETA dgemm_beta
|
||||
|
||||
#define DGEMM_KERNEL dgemm_kernel
|
||||
#define SME_DGEMM_KERNEL sme_dgemm_kernel
|
||||
|
||||
#define DTRMM_KERNEL_LN dtrmm_kernel_LN
|
||||
#define DTRMM_KERNEL_LT dtrmm_kernel_LT
|
||||
@@ -246,6 +247,7 @@
|
||||
|
||||
#define DGEMM_BETA gotoblas -> dgemm_beta
|
||||
#define DGEMM_KERNEL gotoblas -> dgemm_kernel
|
||||
#define SME_DGEMM_KERNEL gotoblas -> sme_dgemm_kernel
|
||||
|
||||
#define DTRMM_KERNEL_LN gotoblas -> dtrmm_kernel_LN
|
||||
#define DTRMM_KERNEL_LT gotoblas -> dtrmm_kernel_LT
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
#define RPCC64BIT
|
||||
|
||||
#ifndef __ECC
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile unsigned long *address){
|
||||
|
||||
unsigned long ret;
|
||||
@@ -70,6 +71,7 @@ static __inline void blas_lock(volatile unsigned long *address){
|
||||
} while (ret);
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static __inline unsigned long rpcc(void) {
|
||||
unsigned long clocks;
|
||||
@@ -98,11 +100,13 @@ static __inline void ldmxcsr(unsigned long fp) {
|
||||
|
||||
#else
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile unsigned long *address){
|
||||
while (*address || _InterlockedCompareExchange((volatile int *) address,1,0))
|
||||
;
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static __inline unsigned int rpcc(void) {
|
||||
return __getReg(_IA64_REG_AR_ITC);
|
||||
@@ -367,6 +371,13 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
.proc REALNAME; \
|
||||
REALNAME:
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.explicit; \
|
||||
.text; \
|
||||
.align 128; \
|
||||
.global REALNAME; \
|
||||
.proc REALNAME; \
|
||||
REALNAME:
|
||||
|
||||
#ifdef PROFILE
|
||||
#define PROFCODE \
|
||||
|
||||
+456
-456
File diff suppressed because it is too large
Load Diff
+29
-4
@@ -135,6 +135,31 @@ void ssyr2k_direct_alpha_betaLT(BLASLONG N, BLASLONG K,
|
||||
float beta,
|
||||
float * R, BLASLONG strideR);
|
||||
|
||||
void sme_sgemm_kernel(char*, char*, BLASLONG M, BLASLONG N, BLASLONG K,
|
||||
float * alpha,
|
||||
float * A, BLASLONG ldA,
|
||||
float * B, BLASLONG ldB,
|
||||
float * beta,
|
||||
float * C, BLASLONG ldC);
|
||||
void sme_dgemm_kernel(const char*, const char*, const BLASLONG M, const BLASLONG N, const BLASLONG K,
|
||||
const double * alpha,
|
||||
const double * A, const BLASLONG ldA,
|
||||
const double * B, const BLASLONG ldB,
|
||||
const double * beta,
|
||||
double * C, const BLASLONG ldC);
|
||||
void sme_cgemm_kernel(const char*, const char*, const BLASLONG M, const BLASLONG N, const BLASLONG K,
|
||||
const float alpha_r, const float alpha_i,
|
||||
const float * A, const BLASLONG ldA,
|
||||
const float * B, const BLASLONG ldB,
|
||||
const float beta_r, const float beta_i,
|
||||
float * C, const BLASLONG ldC);
|
||||
void sme_zgemm_kernel(const char*, const char*, const BLASLONG M, const BLASLONG N, const BLASLONG K,
|
||||
const double alpha_r, const double alpha_i,
|
||||
const double * A, const BLASLONG ldA,
|
||||
const double * B, const BLASLONG ldB,
|
||||
const double beta_r, const double beta_i,
|
||||
double * C, const BLASLONG ldC);
|
||||
|
||||
int sgemm_direct_performant(BLASLONG M, BLASLONG N, BLASLONG K);
|
||||
|
||||
int shgemm_beta(BLASLONG, BLASLONG, BLASLONG, float,
|
||||
@@ -2050,10 +2075,10 @@ int zimatcopy_k_rnc(BLASLONG, BLASLONG, double, double, double *, BLASLONG);
|
||||
int zimatcopy_k_ctc(BLASLONG, BLASLONG, double, double, double *, BLASLONG);
|
||||
int zimatcopy_k_rtc(BLASLONG, BLASLONG, double, double, double *, BLASLONG);
|
||||
|
||||
int sgeadd_k(BLASLONG, BLASLONG, float, float*, BLASLONG, float, float *, BLASLONG);
|
||||
int dgeadd_k(BLASLONG, BLASLONG, double, double*, BLASLONG, double, double *, BLASLONG);
|
||||
int cgeadd_k(BLASLONG, BLASLONG, float, float, float*, BLASLONG, float, float, float *, BLASLONG);
|
||||
int zgeadd_k(BLASLONG, BLASLONG, double,double, double*, BLASLONG, double, double, double *, BLASLONG);
|
||||
int sgeadd_k(BLASLONG, BLASLONG, float, float*, BLASLONG, float, float *, BLASLONG,BLASLONG,BLASLONG);
|
||||
int dgeadd_k(BLASLONG, BLASLONG, double, double*, BLASLONG, double, double *, BLASLONG,BLASLONG,BLASLONG);
|
||||
int cgeadd_k(BLASLONG, BLASLONG, float, float, float*, BLASLONG, float, float, float *, BLASLONG,BLASLONG,BLASLONG);
|
||||
int zgeadd_k(BLASLONG, BLASLONG, double,double, double*, BLASLONG, double, double, double *, BLASLONG,BLASLONG,BLASLONG);
|
||||
|
||||
int sgemm_batch_thread(blas_arg_t * queue, BLASLONG nums);
|
||||
int dgemm_batch_thread(blas_arg_t * queue, BLASLONG nums);
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ extern long int syscall (long int __sysno, ...);
|
||||
static inline int my_mbind(void *addr, unsigned long len, int mode,
|
||||
unsigned long *nodemask, unsigned long maxnode,
|
||||
unsigned flags) {
|
||||
#if defined (__LSB_VERSION__) || defined(ARCH_ZARCH)
|
||||
#if defined (__LSB_VERSION__) || defined(ARCH_ZARCH) || defined(__PIZLONATOR_WAS_HERE__)
|
||||
// So far, LSB (Linux Standard Base) don't support syscall().
|
||||
// https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3482
|
||||
return 0;
|
||||
|
||||
+13
-1
@@ -266,13 +266,25 @@ static inline int get_cpu_model(char *model_name) {
|
||||
|
||||
#if defined(ASSEMBLER) && !defined(NEEDPARAM)
|
||||
|
||||
#define PROLOGUE \
|
||||
#define PROLOGUE_EXPORT \
|
||||
.text ;\
|
||||
.align 5 ;\
|
||||
.globl REALNAME ;\
|
||||
.type REALNAME, @function ;\
|
||||
REALNAME: ;\
|
||||
|
||||
#ifdef __ELF__
|
||||
#define PROLOGUE \
|
||||
.text ;\
|
||||
.align 5 ;\
|
||||
.globl REALNAME ;\
|
||||
.hidden REALNAME ;\
|
||||
.type REALNAME, @function ;\
|
||||
REALNAME: ;\
|
||||
#else
|
||||
#define PROLOGUE PROLOGUE_EXPORT
|
||||
#endif
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
|
||||
+8
-1
@@ -2712,7 +2712,7 @@
|
||||
#ifndef ASSEMBLER
|
||||
#if !defined(DYNAMIC_ARCH) \
|
||||
&& (defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_IA64) || defined(ARCH_MIPS64) || defined(ARCH_ARM64) \
|
||||
|| defined(ARCH_LOONGARCH64) || defined(ARCH_E2K) || defined(ARCH_ALPHA))
|
||||
|| defined(ARCH_LOONGARCH64) || defined(ARCH_E2K) || defined(ARCH_ALPHA) || defined(ARCH_RISCV64))
|
||||
extern BLASLONG gemm_offset_a;
|
||||
extern BLASLONG gemm_offset_b;
|
||||
extern BLASLONG bgemm_p;
|
||||
@@ -2763,6 +2763,13 @@ typedef struct {
|
||||
void * routine;
|
||||
int routine_mode;
|
||||
|
||||
/* Generation slot of the thread that issued this operation and the
|
||||
generation it runs as (see driver/others/openblas_cancel.c), or
|
||||
NULL/0. Consulted only by the level-3 thread drivers; must be set
|
||||
explicitly wherever it is to be observed. */
|
||||
size_t * cancel_slot;
|
||||
size_t cancel_gen;
|
||||
|
||||
} blas_arg_t;
|
||||
#endif
|
||||
|
||||
|
||||
+11
-1
@@ -73,11 +73,21 @@ static inline int blas_quickdivide(blasint x, blasint y){
|
||||
|
||||
#if defined(ASSEMBLER) && !defined(NEEDPARAM)
|
||||
|
||||
#define PROLOGUE \
|
||||
#define PROLOGUE_EXPORT \
|
||||
.arm ;\
|
||||
.global REALNAME ;\
|
||||
REALNAME:
|
||||
|
||||
#ifdef __ELF__
|
||||
#define PROLOGUE \
|
||||
.arm ;\
|
||||
.global REALNAME ;\
|
||||
.hidden REALNAME ;\
|
||||
REALNAME:
|
||||
#else
|
||||
#define PROLOGUE PROLOGUE_EXPORT
|
||||
#endif
|
||||
|
||||
#define EPILOGUE
|
||||
|
||||
#define PROFCODE
|
||||
|
||||
+17
-1
@@ -205,7 +205,7 @@ static inline int blas_quickdivide(blasint x, blasint y){
|
||||
#define ASSEMBLER_ARCH mips64
|
||||
#endif
|
||||
|
||||
#define PROLOGUE \
|
||||
#define PROLOGUE_EXPORT \
|
||||
.text ;\
|
||||
.set ASSEMBLER_ARCH ;\
|
||||
.align 5 ;\
|
||||
@@ -216,6 +216,22 @@ REALNAME: ;\
|
||||
.set noreorder ;\
|
||||
.set nomacro
|
||||
|
||||
#ifdef __ELF__
|
||||
#define PROLOGUE \
|
||||
.text ;\
|
||||
.set ASSEMBLER_ARCH ;\
|
||||
.align 5 ;\
|
||||
.globl REALNAME ;\
|
||||
.hidden REALNAME ;\
|
||||
.ent REALNAME ;\
|
||||
.type REALNAME, @function ;\
|
||||
REALNAME: ;\
|
||||
.set noreorder ;\
|
||||
.set nomacro
|
||||
#else
|
||||
#define PROLOGUE PROLOGUE_EXPORT
|
||||
#endif
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
|
||||
+18
-4
@@ -47,6 +47,9 @@
|
||||
typedef struct {
|
||||
int dtb_entries;
|
||||
int switch_ratio;
|
||||
int divide_rate;
|
||||
int divide_limit;
|
||||
int preferred_size;
|
||||
int offsetA, offsetB, align;
|
||||
#if BUILD_HFLOAT16 == 1
|
||||
int shgemm_p, shgemm_q, shgemm_r;
|
||||
@@ -273,6 +276,7 @@ int (*shgemv_t) (BLASLONG, BLASLONG, float, hfloat16 *, BLASLONG, hfloat16 *, BL
|
||||
void (*ssyr2k_direct_alpha_betaUT) (BLASLONG, BLASLONG, float, float *, BLASLONG, float *, BLASLONG, float, float *, BLASLONG);
|
||||
void (*ssyr2k_direct_alpha_betaLN) (BLASLONG, BLASLONG, float, float *, BLASLONG, float *, BLASLONG, float, float *, BLASLONG);
|
||||
void (*ssyr2k_direct_alpha_betaLT) (BLASLONG, BLASLONG, float, float *, BLASLONG, float *, BLASLONG, float, float *, BLASLONG);
|
||||
void (*sme_sgemm_kernel) (char*, char*, BLASLONG, BLASLONG, BLASLONG, float*, float *, BLASLONG , float *, BLASLONG ,float*, float *, BLASLONG);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -398,6 +402,9 @@ int (*shgemv_t) (BLASLONG, BLASLONG, float, hfloat16 *, BLASLONG, hfloat16 *, BL
|
||||
int (*dsymv_U) (BLASLONG, BLASLONG, double, double *, BLASLONG, double *, BLASLONG, double *, BLASLONG, double *);
|
||||
#endif
|
||||
#if (BUILD_DOUBLE==1) || (BUILD_COMPLEX16==1)
|
||||
#ifdef ARCH_ARM64
|
||||
void (*sme_dgemm_kernel) (const char*, const char*, const BLASLONG, const BLASLONG, const BLASLONG, const double*, const double *, const BLASLONG , const double *, const BLASLONG ,const double*, double *, const BLASLONG);
|
||||
#endif
|
||||
int (*dgemm_kernel )(BLASLONG, BLASLONG, BLASLONG, double, double *, double *, double *, BLASLONG);
|
||||
int (*dgemm_beta )(BLASLONG, BLASLONG, BLASLONG, double, double *, BLASLONG, double *, BLASLONG, double *, BLASLONG);
|
||||
|
||||
@@ -613,6 +620,9 @@ int (*shgemv_t) (BLASLONG, BLASLONG, float, hfloat16 *, BLASLONG, hfloat16 *, BL
|
||||
int (*chemv_M) (BLASLONG, BLASLONG, float, float, float *, BLASLONG, float *, BLASLONG, float *, BLASLONG, float *);
|
||||
int (*chemv_V) (BLASLONG, BLASLONG, float, float, float *, BLASLONG, float *, BLASLONG, float *, BLASLONG, float *);
|
||||
|
||||
#ifdef ARCH_ARM64
|
||||
void (*sme_cgemm_kernel) (const char*, const char*, const BLASLONG, const BLASLONG, const BLASLONG, const float, const float, const float *, const BLASLONG , const float *, const BLASLONG, const float, const float, float *, const BLASLONG);
|
||||
#endif
|
||||
int (*cgemm_kernel_n )(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
|
||||
int (*cgemm_kernel_l )(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
|
||||
int (*cgemm_kernel_r )(BLASLONG, BLASLONG, BLASLONG, float, float, float *, float *, float *, BLASLONG);
|
||||
@@ -823,6 +833,10 @@ int (*shgemv_t) (BLASLONG, BLASLONG, float, hfloat16 *, BLASLONG, hfloat16 *, BL
|
||||
int (*zhemv_M) (BLASLONG, BLASLONG, double, double, double *, BLASLONG, double *, BLASLONG, double *, BLASLONG, double *);
|
||||
int (*zhemv_V) (BLASLONG, BLASLONG, double, double, double *, BLASLONG, double *, BLASLONG, double *, BLASLONG, double *);
|
||||
|
||||
#ifdef ARCH_ARM64
|
||||
void (*sme_zgemm_kernel) (const char*, const char*, const BLASLONG, const BLASLONG, const BLASLONG, const double, const double, const double *, const BLASLONG , const double *, const BLASLONG, const double, const double, double *, const BLASLONG);
|
||||
#endif
|
||||
|
||||
int (*zgemm_kernel_n )(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
|
||||
int (*zgemm_kernel_l )(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
|
||||
int (*zgemm_kernel_r )(BLASLONG, BLASLONG, BLASLONG, double, double, double *, double *, double *, BLASLONG);
|
||||
@@ -1253,16 +1267,16 @@ int (*shgemv_t) (BLASLONG, BLASLONG, float, hfloat16 *, BLASLONG, hfloat16 *, BL
|
||||
#endif
|
||||
|
||||
#if (BUILD_SINGLE==1)
|
||||
int (*sgeadd_k) (BLASLONG, BLASLONG, float, float *, BLASLONG, float, float *, BLASLONG);
|
||||
int (*sgeadd_k) (BLASLONG, BLASLONG, float, float *, BLASLONG, float, float *, BLASLONG, BLASLONG, BLASLONG);
|
||||
#endif
|
||||
#if (BUILD_DOUBLE==1)
|
||||
int (*dgeadd_k) (BLASLONG, BLASLONG, double, double *, BLASLONG, double, double *, BLASLONG);
|
||||
int (*dgeadd_k) (BLASLONG, BLASLONG, double, double *, BLASLONG, double, double *, BLASLONG, BLASLONG, BLASLONG);
|
||||
#endif
|
||||
#if (BUILD_COMPLEX==1)
|
||||
int (*cgeadd_k) (BLASLONG, BLASLONG, float, float, float *, BLASLONG, float, float, float *, BLASLONG);
|
||||
int (*cgeadd_k) (BLASLONG, BLASLONG, float, float, float *, BLASLONG, float, float, float *, BLASLONG, BLASLONG, BLASLONG);
|
||||
#endif
|
||||
#if (BUILD_COMPLEX16==1)
|
||||
int (*zgeadd_k) (BLASLONG, BLASLONG, double, double, double *, BLASLONG, double, double, double *, BLASLONG);
|
||||
int (*zgeadd_k) (BLASLONG, BLASLONG, double, double, double *, BLASLONG, double, double, double *, BLASLONG, BLASLONG, BLASLONG);
|
||||
#endif
|
||||
} gotoblas_t;
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
|
||||
void *qalloc(int flags, size_t bytes);
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static inline void blas_lock(volatile unsigned long *address){
|
||||
|
||||
long int ret, val = 1;
|
||||
@@ -123,6 +124,7 @@ static inline void blas_lock(volatile unsigned long *address){
|
||||
} while (ret);
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static inline unsigned long rpcc(void){
|
||||
unsigned long ret;
|
||||
@@ -532,6 +534,13 @@ static inline int blas_quickdivide(blasint x, blasint y){
|
||||
#if defined(OS_LINUX) || defined(OS_FREEBSD)
|
||||
#ifndef __64BIT__
|
||||
#define PROLOGUE \
|
||||
.section .text;\
|
||||
.align 6;\
|
||||
.globl REALNAME;\
|
||||
.hidden REALNAME ;\
|
||||
.type REALNAME, @function;\
|
||||
REALNAME:
|
||||
#define PROLOGUE_EXPORT \
|
||||
.section .text;\
|
||||
.align 6;\
|
||||
.globl REALNAME;\
|
||||
@@ -541,6 +550,13 @@ REALNAME:
|
||||
#else
|
||||
#if _CALL_ELF == 2
|
||||
#define PROLOGUE \
|
||||
.section .text;\
|
||||
.align 6;\
|
||||
.globl REALNAME;\
|
||||
.hidden REALNAME ;\
|
||||
.type REALNAME, @function;\
|
||||
REALNAME:
|
||||
#define PROLOGUE_EXPORT \
|
||||
.section .text;\
|
||||
.align 6;\
|
||||
.globl REALNAME;\
|
||||
@@ -549,6 +565,21 @@ REALNAME:
|
||||
#define EPILOGUE .size REALNAME, .-REALNAME
|
||||
#else
|
||||
#define PROLOGUE \
|
||||
.section .text;\
|
||||
.align 5;\
|
||||
.globl REALNAME;\
|
||||
.hidden REALNAME ;\
|
||||
.section ".opd","aw";\
|
||||
.align 3;\
|
||||
REALNAME:;\
|
||||
.quad .REALNAME, .TOC.@tocbase, 0;\
|
||||
.previous;\
|
||||
.size REALNAME, 24;\
|
||||
.type .REALNAME, @function;\
|
||||
.globl .REALNAME;\
|
||||
.hidden .REALNAME ;\
|
||||
.REALNAME:
|
||||
#define PROLOGUE_EXPORT \
|
||||
.section .text;\
|
||||
.align 5;\
|
||||
.globl REALNAME;\
|
||||
@@ -637,6 +668,17 @@ REALNAME:;\
|
||||
.csect .text[PR],5;\
|
||||
.REALNAME:
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.machine "any";\
|
||||
.toc;\
|
||||
.globl .REALNAME;\
|
||||
.globl REALNAME;\
|
||||
.csect REALNAME[DS],3;\
|
||||
REALNAME:;\
|
||||
.long .REALNAME, TOC[tc0], 0;\
|
||||
.csect .text[PR],5;\
|
||||
.REALNAME:
|
||||
|
||||
#define EPILOGUE \
|
||||
_section_.text:;\
|
||||
.csect .data[RW],4;\
|
||||
@@ -655,6 +697,17 @@ REALNAME:;\
|
||||
.csect .text[PR], 5;\
|
||||
.REALNAME:
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.machine "any";\
|
||||
.toc;\
|
||||
.globl .REALNAME;\
|
||||
.globl REALNAME;\
|
||||
.csect REALNAME[DS],3;\
|
||||
REALNAME:;\
|
||||
.llong .REALNAME, TOC[tc0], 0;\
|
||||
.csect .text[PR], 5;\
|
||||
.REALNAME:
|
||||
|
||||
#define EPILOGUE \
|
||||
_section_.text:;\
|
||||
.csect .data[RW],4;\
|
||||
@@ -674,6 +727,16 @@ _section_.text:;\
|
||||
.text
|
||||
.align 4
|
||||
.globl REALNAME
|
||||
REALNAME:
|
||||
.endmacro
|
||||
|
||||
.macro PROLOGUE_EXPORT
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
||||
.machine ppc
|
||||
.text
|
||||
.align 4
|
||||
.globl REALNAME
|
||||
REALNAME:
|
||||
.endmacro
|
||||
#else
|
||||
@@ -684,6 +747,16 @@ REALNAME:
|
||||
.text
|
||||
.align 4
|
||||
.globl REALNAME
|
||||
REALNAME:
|
||||
.endmacro
|
||||
|
||||
.macro PROLOGUE_EXPORT
|
||||
.section __TEXT,__text,regular,pure_instructions
|
||||
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
|
||||
.machine ppc64
|
||||
.text
|
||||
.align 4
|
||||
.globl REALNAME
|
||||
REALNAME:
|
||||
.endmacro
|
||||
#endif
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
#define SGEMM_ITCOPY sgemm_itcopy
|
||||
#endif
|
||||
|
||||
#define SME_SGEMM_KERNEL sme_sgemm_kernel
|
||||
#define STRMM_OUNUCOPY strmm_ounucopy
|
||||
#define STRMM_OUNNCOPY strmm_ounncopy
|
||||
#define STRMM_OUTUCOPY strmm_outucopy
|
||||
@@ -248,6 +249,7 @@
|
||||
#define SSYR2K_DIRECT_ALPHA_BETA_UT gotoblas -> ssyr2k_direct_alpha_betaUT
|
||||
#define SSYR2K_DIRECT_ALPHA_BETA_LN gotoblas -> ssyr2k_direct_alpha_betaLN
|
||||
#define SSYR2K_DIRECT_ALPHA_BETA_LT gotoblas -> ssyr2k_direct_alpha_betaLT
|
||||
#define SME_SGEMM_KERNEL gotoblas -> sme_sgemm_kernel
|
||||
#endif
|
||||
|
||||
#define SGEMM_ONCOPY gotoblas -> sgemm_oncopy
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile unsigned long *address){
|
||||
|
||||
long int ret = 1;
|
||||
@@ -60,6 +61,7 @@ static __inline void blas_lock(volatile unsigned long *address){
|
||||
} while (ret);
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static __inline unsigned long rpcc(void){
|
||||
unsigned long clocks;
|
||||
@@ -209,6 +211,14 @@ static __inline int blas_quickdivide(blasint x, blasint y){
|
||||
.proc 07; \
|
||||
REALNAME:;
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.section ".text"; \
|
||||
.align 32; \
|
||||
.global REALNAME;\
|
||||
.type REALNAME, #function; \
|
||||
.proc 07; \
|
||||
REALNAME:;
|
||||
|
||||
#if defined(__linux__) && defined(__ELF__)
|
||||
#define GNUSTACK .section .note.GNU-stack,"",@progbits
|
||||
#else
|
||||
|
||||
+23
-1
@@ -51,7 +51,7 @@ extern void goto_set_num_threads(int nthreads);
|
||||
#undef TIMING_DEBUG
|
||||
|
||||
/* Global Parameter */
|
||||
extern int blas_cpu_number;
|
||||
extern _Atomic int blas_cpu_number;
|
||||
extern int blas_num_threads;
|
||||
extern int blas_omp_linked;
|
||||
|
||||
@@ -106,7 +106,15 @@ typedef struct blas_queue {
|
||||
blas_arg_t *args;
|
||||
void *range_m;
|
||||
void *range_n;
|
||||
|
||||
/*
|
||||
* sa and sb are caller-owned inputs. worker_sb reports the sb workspace
|
||||
* used by the threading backend for the most recent invocation.
|
||||
* Keeping these roles separate prevents a reused queue from treating a
|
||||
* released workspace as input to its next invocation.
|
||||
*/
|
||||
void *sa, *sb;
|
||||
void *worker_sb;
|
||||
|
||||
struct blas_queue *next;
|
||||
|
||||
@@ -138,10 +146,20 @@ typedef struct blas_queue {
|
||||
extern int blas_server_avail;
|
||||
extern int blas_omp_number_max;
|
||||
extern int blas_omp_threads_local;
|
||||
extern int blas_is_num_threads_set_explicitly;
|
||||
|
||||
static __inline int num_cpu_avail(int level) {
|
||||
|
||||
#ifdef USE_OPENMP
|
||||
/* If the user explicitly called openblas_set_num_threads(),
|
||||
respect that setting instead of overriding it with
|
||||
`omp_get_max_threads()` below (which is to get a default
|
||||
in case the user hasn't made an explicit choice). */
|
||||
if (blas_is_num_threads_set_explicitly) {
|
||||
if (omp_in_parallel()) return 1;
|
||||
return blas_cpu_number;
|
||||
}
|
||||
|
||||
int openmp_nthreads;
|
||||
openmp_nthreads=omp_get_max_threads();
|
||||
if (omp_in_parallel()) openmp_nthreads = blas_omp_threads_local;
|
||||
@@ -174,6 +192,7 @@ static __inline void blas_queue_init(blas_queue_t *queue){
|
||||
|
||||
queue -> sa = NULL;
|
||||
queue -> sb = NULL;
|
||||
queue -> worker_sb = NULL;
|
||||
queue-> next = NULL;
|
||||
}
|
||||
|
||||
@@ -191,6 +210,9 @@ int exec_blas(BLASLONG num_cpu, blas_param_t *param, void *buffer);
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
|
||||
void blas_level3_thread_enter(void);
|
||||
void blas_level3_thread_leave(void);
|
||||
|
||||
int blas_level1_thread(int mode, BLASLONG m, BLASLONG n, BLASLONG k, void *alpha,
|
||||
void *a, BLASLONG lda,
|
||||
void *b, BLASLONG ldb,
|
||||
|
||||
+26
-2
@@ -54,6 +54,7 @@
|
||||
#define __volatile__
|
||||
#endif
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
int ret;
|
||||
@@ -83,6 +84,7 @@ static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static __inline unsigned long long rpcc(void){
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
@@ -298,6 +300,7 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
|
||||
#ifdef OS_DARWIN
|
||||
#define PROLOGUE .text;.align 5; .globl REALNAME; REALNAME:
|
||||
#define PROLOGUE_EXPORT PROLOGUE
|
||||
#define EPILOGUE .subsections_via_symbols
|
||||
#define PROFCODE
|
||||
#endif
|
||||
@@ -318,13 +321,25 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
#endif
|
||||
|
||||
#if defined(OS_WINNT) || defined(OS_CYGWIN_NT) || defined(OS_INTERIX)
|
||||
#define PROLOGUE \
|
||||
#define PROLOGUE_EXPORT \
|
||||
.text; \
|
||||
.align 16; \
|
||||
.globl REALNAME ;\
|
||||
.def REALNAME;.scl 2;.type 32;.endef; \
|
||||
REALNAME:
|
||||
|
||||
#ifdef __ELF__
|
||||
#define PROLOGUE \
|
||||
.text; \
|
||||
.align 16; \
|
||||
.globl REALNAME ;\
|
||||
.hidden REALNAME ;\
|
||||
.def REALNAME;.scl 2;.type 32;.endef; \
|
||||
REALNAME:
|
||||
#else
|
||||
#define PROLOGUE PROLOGUE_EXPORT
|
||||
#endif
|
||||
|
||||
#define PROFCODE
|
||||
|
||||
#ifdef __clang__
|
||||
@@ -339,7 +354,16 @@ REALNAME:
|
||||
.text; \
|
||||
.align 16; \
|
||||
.globl REALNAME ;\
|
||||
.type REALNAME, @function; \
|
||||
.hidden REALNAME ;\
|
||||
.type REALNAME, @function; \
|
||||
REALNAME: \
|
||||
_CET_ENDBR
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.text; \
|
||||
.align 16; \
|
||||
.globl REALNAME ;\
|
||||
.type REALNAME, @function; \
|
||||
REALNAME: \
|
||||
_CET_ENDBR
|
||||
|
||||
|
||||
+30
-3
@@ -70,6 +70,7 @@
|
||||
#define RMB
|
||||
#endif
|
||||
|
||||
#ifndef BLAS_LOCK_DEFINED
|
||||
static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
|
||||
@@ -83,11 +84,15 @@ static __inline void blas_lock(volatile BLASULONG *address){
|
||||
while (*address) {YIELDING;}
|
||||
|
||||
#ifndef C_MSVC
|
||||
#ifdef __PIZLONATOR_WAS_HERE__
|
||||
ret=__atomic_exchange_n(address, 1, __ATOMIC_SEQ_CST);
|
||||
#else
|
||||
__asm__ __volatile__(
|
||||
"xchgl %0, %1\n"
|
||||
: "=r"(ret), "=m"(*address)
|
||||
: "0"(1), "m"(*address)
|
||||
: "memory");
|
||||
#endif
|
||||
#else
|
||||
ret=InterlockedExchange64((volatile LONG64 *)(address), 1);
|
||||
#endif
|
||||
@@ -95,6 +100,7 @@ static __inline void blas_lock(volatile BLASULONG *address){
|
||||
|
||||
}
|
||||
#define BLAS_LOCK_DEFINED
|
||||
#endif
|
||||
|
||||
static __inline BLASULONG rpcc(void){
|
||||
#ifdef C_MSVC
|
||||
@@ -237,7 +243,7 @@ static __inline unsigned int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
|
||||
y = blas_quick_divide_table[y];
|
||||
|
||||
__asm__ __volatile__ ("mull %0" :"=d" (result), "+a"(x) : "0" (y));
|
||||
__asm__ __volatile__ ("mull %0" :"=d" (result), "+a"(x) : "0" (y) : "cc");
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
@@ -401,6 +407,7 @@ static __inline unsigned int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
|
||||
#ifdef OS_DARWIN
|
||||
#define PROLOGUE .text;.align 5; .globl REALNAME; REALNAME:
|
||||
#define PROLOGUE_EXPORT .text;.align 5; .globl REALNAME; REALNAME:
|
||||
#define EPILOGUE .subsections_via_symbols
|
||||
#define PROFCODE
|
||||
#endif
|
||||
@@ -437,12 +444,23 @@ static __inline unsigned int blas_quickdivide(unsigned int x, unsigned int y){
|
||||
#endif
|
||||
|
||||
#if defined(OS_WINDOWS) && !defined(C_PGI)
|
||||
#define PROLOGUE \
|
||||
#define PROLOGUE_EXPORT \
|
||||
.text; \
|
||||
.align 16; \
|
||||
.globl REALNAME ;\
|
||||
.def REALNAME;.scl 2;.type 32;.endef; \
|
||||
REALNAME:
|
||||
#ifdef __ELF__
|
||||
#define PROLOGUE \
|
||||
.text; \
|
||||
.align 16; \
|
||||
.globl REALNAME ;\
|
||||
.hidden REALNAME ; \
|
||||
.def REALNAME;.scl 2;.type 32;.endef; \
|
||||
REALNAME:
|
||||
#else
|
||||
#define PROLOGUE PROLOGUE_EXPORT
|
||||
#endif
|
||||
|
||||
#define PROFCODE
|
||||
|
||||
@@ -454,7 +472,16 @@ REALNAME:
|
||||
.text; \
|
||||
.align 512; \
|
||||
.globl REALNAME ;\
|
||||
.type REALNAME, @function; \
|
||||
.hidden REALNAME ;\
|
||||
.type REALNAME, @function; \
|
||||
REALNAME: \
|
||||
_CET_ENDBR
|
||||
|
||||
#define PROLOGUE_EXPORT \
|
||||
.text; \
|
||||
.align 512; \
|
||||
.globl REALNAME ;\
|
||||
.type REALNAME, @function; \
|
||||
REALNAME: \
|
||||
_CET_ENDBR
|
||||
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
#endif
|
||||
|
||||
#define ZGEMM_BETA zgemm_beta
|
||||
#define SME_ZGEMM_KERNEL sme_zgemm_kernel
|
||||
|
||||
#define ZGEMM_KERNEL_N zgemm_kernel_n
|
||||
#define ZGEMM_KERNEL_L zgemm_kernel_l
|
||||
@@ -326,6 +327,7 @@
|
||||
#define ZTRSM_ILTNCOPY gotoblas -> ztrsm_iltncopy
|
||||
|
||||
#define ZGEMM_BETA gotoblas -> zgemm_beta
|
||||
#define SME_ZGEMM_KERNEL gotoblas -> sme_zgemm_kernel
|
||||
#define ZGEMM_KERNEL_N gotoblas -> zgemm_kernel_n
|
||||
#define ZGEMM_KERNEL_L gotoblas -> zgemm_kernel_l
|
||||
#define ZGEMM_KERNEL_R gotoblas -> zgemm_kernel_r
|
||||
|
||||
@@ -5,19 +5,46 @@ enable_language(CXX)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DADD${BU} -DCBLAS")
|
||||
|
||||
if (USE_OPENMP)
|
||||
set(CPP_THREAD_SAFETY_LIBS ${OpenBLAS_LIBNAME})
|
||||
find_package(Threads REQUIRED)
|
||||
list(APPEND CPP_THREAD_SAFETY_LIBS Threads::Threads)
|
||||
add_definitions(-DOPENBLAS_USE_GENERATED_CBLAS_H)
|
||||
|
||||
if ((CPP_THREAD_SAFETY_TEST OR CPP_THREAD_SAFETY_GEMV) AND CPP_THREAD_SAFETY_USE_OPENMP)
|
||||
find_package(OpenMP REQUIRED COMPONENTS CXX)
|
||||
list(APPEND CPP_THREAD_SAFETY_LIBS OpenMP::OpenMP_CXX)
|
||||
add_definitions(-DCPP_THREAD_SAFETY_USE_OPENMP)
|
||||
endif()
|
||||
|
||||
set(CPP_THREAD_SAFETY_DGEMM_ARGS "" CACHE STRING "Arguments passed to the DGEMM thread safety test")
|
||||
set(CPP_THREAD_SAFETY_DGEMM_MIXED_ARGS "" CACHE STRING "Arguments passed to the mixed DGEMM thread safety test")
|
||||
set(CPP_THREAD_SAFETY_DGEMV_ARGS "" CACHE STRING "Arguments passed to the DGEMV thread safety test")
|
||||
set(CPP_THREAD_SAFETY_SHUTDOWN_ARGS "" CACHE STRING "Arguments passed to the DGEMM shutdown safety test")
|
||||
|
||||
if (CPP_THREAD_SAFETY_TEST)
|
||||
message(STATUS building thread safety test)
|
||||
add_executable(dgemm_thread_safety dgemm_thread_safety.cpp)
|
||||
target_link_libraries(dgemm_thread_safety ${OpenBLAS_LIBNAME})
|
||||
add_test( dgemm_thread_safety ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety)
|
||||
message(STATUS "building thread safety test")
|
||||
add_executable(dgemm_thread_safety dgemm_thread_safety.cpp)
|
||||
target_link_libraries(dgemm_thread_safety ${CPP_THREAD_SAFETY_LIBS})
|
||||
add_test(NAME dgemm_thread_safety COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety ${CPP_THREAD_SAFETY_DGEMM_ARGS})
|
||||
|
||||
add_executable(dgemm_thread_safety_mixed dgemm_thread_safety_mixed.cpp)
|
||||
target_link_libraries(dgemm_thread_safety_mixed ${CPP_THREAD_SAFETY_LIBS})
|
||||
add_test(NAME dgemm_thread_safety_mixed COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety_mixed ${CPP_THREAD_SAFETY_DGEMM_MIXED_ARGS})
|
||||
|
||||
if (WIN32)
|
||||
add_executable(dgemm_thread_safety_shutdown dgemm_thread_safety_shutdown.cpp)
|
||||
target_link_libraries(dgemm_thread_safety_shutdown ${CPP_THREAD_SAFETY_LIBS})
|
||||
add_test(NAME dgemm_thread_safety_shutdown COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety_shutdown ${CPP_THREAD_SAFETY_SHUTDOWN_ARGS})
|
||||
set_tests_properties(dgemm_thread_safety_shutdown PROPERTIES TIMEOUT 900)
|
||||
endif()
|
||||
if (USE_THREAD AND (USE_OPENMP OR (NOT WIN32 AND NOT CYGWIN)))
|
||||
add_test(NAME dgemm_thread_safety_mixed_callback COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemm_thread_safety_mixed ${CPP_THREAD_SAFETY_DGEMM_MIXED_ARGS} --callback)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
if (CPP_THREAD_SAFETY_TEST OR CPP_THREAD_SAFETY_GEMV)
|
||||
add_executable(dgemv_thread_safety dgemv_thread_safety.cpp)
|
||||
target_link_libraries(dgemv_thread_safety ${OpenBLAS_LIBNAME})
|
||||
add_test(dgemv_thread_safety ${CMAKE_CURRENT_BINARY_DIR}/dgemv_thread_safety)
|
||||
endif()
|
||||
|
||||
add_executable(dgemv_thread_safety dgemv_thread_safety.cpp)
|
||||
target_link_libraries(dgemv_thread_safety ${CPP_THREAD_SAFETY_LIBS})
|
||||
add_test(NAME dgemv_thread_safety COMMAND ${CMAKE_CURRENT_BINARY_DIR}/dgemv_thread_safety ${CPP_THREAD_SAFETY_DGEMV_ARGS})
|
||||
endif()
|
||||
|
||||
@@ -1,15 +1,48 @@
|
||||
TOPDIR = ..
|
||||
include $(TOPDIR)/Makefile.system
|
||||
|
||||
all :: dgemv_tester dgemm_tester
|
||||
all :: dgemv_tester dgemm_tester dgemm_mixed_tester
|
||||
|
||||
ifeq ($(OSNAME), WINNT)
|
||||
all :: dgemm_shutdown_tester
|
||||
endif
|
||||
|
||||
CALLBACK_THREAD_TEST =
|
||||
ifeq ($(SMP),1)
|
||||
ifeq ($(USE_OPENMP),1)
|
||||
CALLBACK_THREAD_TEST = 1
|
||||
else
|
||||
ifneq ($(OSNAME),$(filter $(OSNAME),WINNT CYGWIN_NT))
|
||||
CALLBACK_THREAD_TEST = 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CALLBACK_THREAD_TEST),1)
|
||||
.PHONY : dgemm_mixed_callback_tester
|
||||
all :: dgemm_mixed_callback_tester
|
||||
endif
|
||||
|
||||
dgemv_tester :
|
||||
$(CXX) $(COMMON_OPT) -Wall -Wextra -Wshadow -fopenmp -std=c++11 dgemv_thread_safety.cpp ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) -o dgemv_tester
|
||||
$(CXX) $(COMMON_OPT) -Wall -Wextra -Wshadow -std=c++11 dgemv_thread_safety.cpp ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) -o dgemv_tester
|
||||
./dgemv_tester
|
||||
|
||||
dgemm_tester : dgemv_tester
|
||||
$(CXX) $(COMMON_OPT) -Wall -Wextra -Wshadow -fopenmp -std=c++11 dgemm_thread_safety.cpp ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) -o dgemm_tester
|
||||
$(CXX) $(COMMON_OPT) -Wall -Wextra -Wshadow -std=c++11 dgemm_thread_safety.cpp ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) -o dgemm_tester
|
||||
./dgemm_tester
|
||||
|
||||
dgemm_mixed_tester : dgemm_tester
|
||||
$(CXX) $(COMMON_OPT) -Wall -Wextra -Wshadow -std=c++11 dgemm_thread_safety_mixed.cpp ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) -o dgemm_mixed_tester
|
||||
./dgemm_mixed_tester
|
||||
|
||||
dgemm_shutdown_tester : dgemm_mixed_tester
|
||||
$(CXX) $(COMMON_OPT) -Wall -Wextra -Wshadow -std=c++11 dgemm_thread_safety_shutdown.cpp ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) -o dgemm_shutdown_tester
|
||||
./dgemm_shutdown_tester
|
||||
|
||||
ifeq ($(CALLBACK_THREAD_TEST),1)
|
||||
dgemm_mixed_callback_tester : dgemm_mixed_tester
|
||||
./dgemm_mixed_tester --callback
|
||||
endif
|
||||
|
||||
clean ::
|
||||
rm -f dgemv_tester dgemm_tester
|
||||
rm -f dgemv_tester dgemm_tester dgemm_mixed_tester dgemm_shutdown_tester
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
#ifdef CPP_THREAD_SAFETY_USE_OPENMP
|
||||
#include <omp.h>
|
||||
#else
|
||||
#include <thread>
|
||||
#endif
|
||||
|
||||
inline void pauser(){
|
||||
/// a portable way to pause a program
|
||||
std::string dummy;
|
||||
@@ -13,6 +19,29 @@ void FailIfThreadsAreZero(uint32_t numConcurrentThreads) {
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t GetMaxHwThreads() {
|
||||
#ifdef CPP_THREAD_SAFETY_USE_OPENMP
|
||||
return omp_get_max_threads();
|
||||
#else
|
||||
const uint32_t maxHwThreads = std::thread::hardware_concurrency();
|
||||
return maxHwThreads == 0 ? 1 : maxHwThreads;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetLauncherThreads(uint32_t numConcurrentThreads) {
|
||||
#ifdef CPP_THREAD_SAFETY_USE_OPENMP
|
||||
omp_set_num_threads(numConcurrentThreads);
|
||||
#endif
|
||||
}
|
||||
|
||||
const char *LauncherName() {
|
||||
#ifdef CPP_THREAD_SAFETY_USE_OPENMP
|
||||
return " using OpenMP";
|
||||
#else
|
||||
return "";
|
||||
#endif
|
||||
}
|
||||
|
||||
void FillMatrices(std::vector<std::vector<double>>& matBlock, std::mt19937_64& PRNG, std::uniform_real_distribution<double>& rngdist, const blasint randomMatSize, const uint32_t numConcurrentThreads, const uint32_t numMat){
|
||||
for(uint32_t i=0; i<numMat; i++){
|
||||
for(uint32_t j = 0; j < static_cast<uint32_t>(randomMatSize*randomMatSize); j++){
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
#include <vector>
|
||||
#include <random>
|
||||
#include <future>
|
||||
#include <omp.h>
|
||||
#ifdef OPENBLAS_USE_GENERATED_CBLAS_H
|
||||
#include "generated/cblas.h"
|
||||
#else
|
||||
#include "../cblas.h"
|
||||
#endif
|
||||
#include "cpp_thread_safety_common.h"
|
||||
|
||||
void launch_cblas_dgemm(double* A, double* B, double* C, const blasint randomMatSize){
|
||||
@@ -14,7 +17,7 @@ int main(int argc, char* argv[]){
|
||||
blasint randomMatSize = 1024; //dimension of the random square matrices used
|
||||
uint32_t numConcurrentThreads = 96; //number of concurrent calls of the functions being tested
|
||||
uint32_t numTestRounds = 16; //number of testing rounds before success exit
|
||||
uint32_t maxHwThreads = omp_get_max_threads();
|
||||
uint32_t maxHwThreads = GetMaxHwThreads();
|
||||
|
||||
if (maxHwThreads < 96)
|
||||
numConcurrentThreads = maxHwThreads;
|
||||
@@ -65,11 +68,13 @@ int main(int argc, char* argv[]){
|
||||
//PrintMatrices(matBlock, randomMatSize, numConcurrentThreads, 3);
|
||||
std::cout<<"done\n";
|
||||
std::cout<<"Testing CBLAS DGEMM thread safety\n";
|
||||
omp_set_num_threads(numConcurrentThreads);
|
||||
SetLauncherThreads(numConcurrentThreads);
|
||||
for(uint32_t R=0; R<numTestRounds; R++){
|
||||
std::cout<<"DGEMM round #"<<R<<std::endl;
|
||||
std::cout<<"Launching "<<numConcurrentThreads<<" threads simultaneously using OpenMP..."<<std::flush;
|
||||
std::cout<<"Launching "<<numConcurrentThreads<<" threads simultaneously"<<LauncherName()<<"..."<<std::flush;
|
||||
#ifdef CPP_THREAD_SAFETY_USE_OPENMP
|
||||
#pragma omp parallel for default(none) shared(futureBlock, matBlock, randomMatSize, numConcurrentThreads)
|
||||
#endif
|
||||
for(uint32_t i=0; i<numConcurrentThreads; i++){
|
||||
futureBlock[i] = std::async(std::launch::async, launch_cblas_dgemm, &matBlock[i*3][0], &matBlock[i*3+1][0], &matBlock[i*3+2][0], randomMatSize);
|
||||
//launch_cblas_dgemm( &matBlock[i][0], &matBlock[i+1][0], &matBlock[i+2][0]);
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
#ifdef OPENBLAS_USE_GENERATED_CBLAS_H
|
||||
#include "generated/cblas.h"
|
||||
#else
|
||||
#include "../cblas.h"
|
||||
#endif
|
||||
#include "cpp_thread_safety_common.h"
|
||||
|
||||
std::atomic<uint32_t> callbackInvocations(0);
|
||||
|
||||
void thread_callback(int sync, openblas_dojob_callback doJob, int numJobs,
|
||||
size_t jobDataElementSize, void* jobData, int doJobData){
|
||||
(void)sync;
|
||||
callbackInvocations.fetch_add(1, std::memory_order_relaxed);
|
||||
std::vector<std::thread> workers;
|
||||
workers.reserve(numJobs);
|
||||
char* jobs = static_cast<char*>(jobData);
|
||||
for(int i=0; i<numJobs; i++)
|
||||
workers.emplace_back(doJob, i, jobs + i * jobDataElementSize, doJobData);
|
||||
for(auto& worker : workers)
|
||||
worker.join();
|
||||
}
|
||||
|
||||
void compute_dgemm_pair(std::vector<double>& transA, std::vector<double>& noTransA, std::vector<double>& B, double* firstOutput, double* secondOutput, const blasint randomMatSize, const bool sameVariant){
|
||||
cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, randomMatSize, 2, 2, 1.0, &transA[0], randomMatSize, &B[0], 2, 0.0, firstOutput, 2);
|
||||
if (sameVariant)
|
||||
cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, randomMatSize, 2, 4, 1.0, &transA[0], randomMatSize, &B[0], 2, 0.0, secondOutput, 2);
|
||||
else
|
||||
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, randomMatSize, 2, 4, 1.0, &noTransA[0], 4, &B[0], 2, 0.0, secondOutput, 2);
|
||||
}
|
||||
|
||||
void run_worker(std::vector<double>& transA, std::vector<double>& noTransA, std::vector<double>& B, const std::vector<double>& referenceFirst, const std::vector<double>& referenceSecond, const blasint randomMatSize, const uint32_t numTestRounds, const bool sameVariant, std::atomic<uint32_t>& readyThreads, std::atomic<bool>& startThreads, uint32_t& mismatches){
|
||||
std::vector<double> firstOutput(static_cast<size_t>(randomMatSize) * 2);
|
||||
std::vector<double> secondOutput(static_cast<size_t>(randomMatSize) * 2);
|
||||
const size_t outputBytes = static_cast<size_t>(randomMatSize) * 2 * sizeof(double);
|
||||
uint32_t localMismatches = 0;
|
||||
|
||||
readyThreads.fetch_add(1);
|
||||
while (!startThreads.load())
|
||||
std::this_thread::yield();
|
||||
|
||||
for(uint32_t i=0; i<numTestRounds; i++){
|
||||
compute_dgemm_pair(transA, noTransA, B, &firstOutput[0], &secondOutput[0], randomMatSize, sameVariant);
|
||||
if (std::memcmp(&firstOutput[0], &referenceFirst[0], outputBytes) != 0 ||
|
||||
std::memcmp(&secondOutput[0], &referenceSecond[0], outputBytes) != 0)
|
||||
localMismatches++;
|
||||
}
|
||||
|
||||
mismatches = localMismatches;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]){
|
||||
blasint randomMatSize = 262144;
|
||||
uint32_t numConcurrentThreads = 8;
|
||||
uint32_t numTestRounds = 200;
|
||||
uint32_t maxHwThreads = GetMaxHwThreads();
|
||||
bool sameVariant = false;
|
||||
bool useCallback = false;
|
||||
|
||||
if (maxHwThreads < numConcurrentThreads)
|
||||
numConcurrentThreads = maxHwThreads;
|
||||
|
||||
std::vector<std::string> positionalArgs;
|
||||
for (int i = 1; i < argc; i++){
|
||||
std::cout<<argv[i]<<std::endl;
|
||||
if (std::string(argv[i]) == "--callback")
|
||||
useCallback = true;
|
||||
else
|
||||
positionalArgs.push_back(argv[i]);
|
||||
}
|
||||
|
||||
if (!positionalArgs.empty() && positionalArgs.size() != 3 && positionalArgs.size() != 4){
|
||||
std::cout<<"ERROR: expected: [<M> <threads> <rounds> [sameVariant]] [--callback]"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(!positionalArgs.empty()){
|
||||
randomMatSize = std::stoul(positionalArgs[0]);
|
||||
numConcurrentThreads = std::stoul(positionalArgs[1]);
|
||||
numTestRounds = std::stoul(positionalArgs[2]);
|
||||
if (positionalArgs.size() == 4)
|
||||
sameVariant = std::stoul(positionalArgs[3]) != 0;
|
||||
}
|
||||
|
||||
FailIfThreadsAreZero(numConcurrentThreads);
|
||||
|
||||
const size_t matrixElements = static_cast<size_t>(randomMatSize) * 4;
|
||||
const size_t outputElements = static_cast<size_t>(randomMatSize) * 2;
|
||||
std::vector<double> transA(matrixElements);
|
||||
std::vector<double> noTransA(matrixElements);
|
||||
std::vector<double> B(8);
|
||||
std::vector<double> referenceFirst(outputElements);
|
||||
std::vector<double> referenceSecond(outputElements);
|
||||
std::vector<std::thread> threads(numConcurrentThreads);
|
||||
std::vector<uint32_t> mismatchBlock(numConcurrentThreads);
|
||||
std::atomic<uint32_t> readyThreads(0);
|
||||
std::atomic<bool> startThreads(false);
|
||||
|
||||
std::cout<<"*----------------------------------*\n";
|
||||
std::cout<<"| Mixed DGEMM thread safety tester |\n";
|
||||
std::cout<<"*----------------------------------*\n";
|
||||
std::cout<<"Tall-skinny DGEMM M dimension: "<<randomMatSize<<'\n';
|
||||
std::cout<<"Number of concurrent calls into OpenBLAS : "<<numConcurrentThreads<<'\n';
|
||||
std::cout<<"Number of testing rounds : "<<numTestRounds<<'\n';
|
||||
std::cout<<"Second DGEMM uses "<<(sameVariant ? "the same transpose variant" : "a different transpose variant")<<'\n';
|
||||
std::cout<<"OpenBLAS internal threads : "<<openblas_get_num_threads()<<'\n';
|
||||
if (useCallback)
|
||||
std::cout<<"Thread execution backend : caller callback\n";
|
||||
std::cout<<"This test will need "<<(static_cast<uint64_t>(matrixElements) * 2 * 8 + static_cast<uint64_t>(outputElements) * (2 + 2 * numConcurrentThreads) * 8)/static_cast<double>(1024*1024)<<" MiB of RAM\n"<<std::endl;
|
||||
|
||||
std::cout<<"Filling matrices with deterministic values..."<<std::flush;
|
||||
for(size_t i=0; i<matrixElements; i++){
|
||||
transA[i] = static_cast<double>(i % 512);
|
||||
noTransA[i] = static_cast<double>((i * 7) % 512);
|
||||
}
|
||||
std::cout<<"done\n";
|
||||
std::cout<<"Filling RHS matrix..."<<std::flush;
|
||||
for(uint32_t i=0; i<8; i++){
|
||||
B[i] = 0.1 * static_cast<double>(i + 1);
|
||||
}
|
||||
std::cout<<"done\n";
|
||||
|
||||
std::cout<<"Computing reference results..."<<std::flush;
|
||||
compute_dgemm_pair(transA, noTransA, B, &referenceFirst[0], &referenceSecond[0], randomMatSize, sameVariant);
|
||||
std::cout<<"done\n";
|
||||
|
||||
if (useCallback)
|
||||
openblas_set_threads_callback_function(thread_callback);
|
||||
|
||||
std::cout<<"Testing mixed CBLAS DGEMM thread safety\n";
|
||||
std::cout<<"Launching "<<numConcurrentThreads<<" worker threads..."<<std::flush;
|
||||
for(uint32_t i=0; i<numConcurrentThreads; i++){
|
||||
threads[i] = std::thread(run_worker, std::ref(transA), std::ref(noTransA), std::ref(B), std::cref(referenceFirst), std::cref(referenceSecond), randomMatSize, numTestRounds, sameVariant, std::ref(readyThreads), std::ref(startThreads), std::ref(mismatchBlock[i]));
|
||||
}
|
||||
while (readyThreads.load() != numConcurrentThreads)
|
||||
std::this_thread::yield();
|
||||
startThreads.store(true);
|
||||
std::cout<<"done\n";
|
||||
|
||||
std::cout<<"Waiting for worker threads to finish..."<<std::flush;
|
||||
uint32_t mismatches = 0;
|
||||
for(uint32_t i=0; i<numConcurrentThreads; i++){
|
||||
threads[i].join();
|
||||
mismatches += mismatchBlock[i];
|
||||
}
|
||||
std::cout<<"done\n";
|
||||
|
||||
if (useCallback) {
|
||||
const uint32_t invocations = callbackInvocations.load();
|
||||
std::cout<<"Thread callback invocations: "<<invocations<<std::endl;
|
||||
if (invocations == 0) {
|
||||
std::cout<<"Thread callback was not invoked!"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
std::cout<<"Mixed DGEMM mismatches: "<<mismatches<<std::endl;
|
||||
if (mismatches != 0) {
|
||||
std::cout<<"Mixed CBLAS DGEMM thread safety test FAILED!"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::cout<<"Mixed CBLAS DGEMM thread safety test PASSED!\n"<<std::endl;
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
/* Stress test for library shutdown racing with in-flight BLAS calls
|
||||
* (https://github.com/OpenMathLib/OpenBLAS/issues/5954).
|
||||
*
|
||||
* Windows only. On POSIX, exit() runs the library destructor while worker
|
||||
* threads are still computing into OpenBLAS-owned buffers, which no amount of
|
||||
* locking inside blas_shutdown can make safe, so there is nothing to assert
|
||||
* there; CMakeLists.txt only registers this test on WIN32.
|
||||
*
|
||||
* The parent re-executes itself as short-lived children and checks that each
|
||||
* one terminates cleanly, turning shutdown-path crashes and deadlocks into
|
||||
* ordinary test failures. Each child (--child-storm N) starts N callers that
|
||||
* allocate their matrices and park on a gate, releases them so they all enter
|
||||
* their first dgemm at once, and exits a millisecond later while that
|
||||
* allocation storm is still in flight.
|
||||
*
|
||||
* N must exceed NUM_BUFFERS = MAX(50, NUM_THREADS * 2 * NUM_PARALLEL) for the
|
||||
* build under test; below that every slot is already mapped and the race is
|
||||
* unreachable.
|
||||
*/
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#ifdef OPENBLAS_USE_GENERATED_CBLAS_H
|
||||
#include "generated/cblas.h"
|
||||
#else
|
||||
#include "../cblas.h"
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
namespace {
|
||||
|
||||
const blasint stormM = 200, stormK = 120, stormN = 90; /* the gh-5954 shape */
|
||||
const blasint poolDim = 320; /* above the multithreading threshold, so the pool spins up */
|
||||
const uint32_t defaultStormCallers = 128;
|
||||
const uint32_t stormDelayMs = 3; /* gate to sweep; at 0 the sweep beats the allocations */
|
||||
const int stormBlasThreads = 4;
|
||||
const int stormTimeoutSec = 15;
|
||||
const int numStormChildren = 40;
|
||||
|
||||
std::atomic<uint32_t> parked(0); /* callers built and waiting on the gate */
|
||||
std::atomic<bool> gate(false);
|
||||
|
||||
void fillOperands(std::vector<double>& A, std::vector<double>& B) {
|
||||
for (size_t i = 0; i < A.size(); i++) A[i] = (i % 1000) / 1000.0;
|
||||
for (size_t i = 0; i < B.size(); i++) B[i] = (i % 997) / 997.0;
|
||||
}
|
||||
|
||||
void dgemmOnce(blasint m, blasint k, blasint n) {
|
||||
std::vector<double> A(m * k), B(k * n), C(m * n);
|
||||
fillOperands(A, B);
|
||||
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, m, n, k,
|
||||
1.0, A.data(), m, B.data(), k, 0.1, C.data(), m);
|
||||
}
|
||||
|
||||
/* Allocate before parking, so that when the gate opens nothing stands between
|
||||
the thread and its first dgemm. */
|
||||
void gatedWorker(blasint m, blasint k, blasint n) {
|
||||
std::vector<double> A(m * k), B(k * n), C(m * n);
|
||||
fillOperands(A, B);
|
||||
parked.fetch_add(1, std::memory_order_release);
|
||||
while (!gate.load(std::memory_order_acquire)) std::this_thread::yield();
|
||||
for (;;)
|
||||
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, m, n, k,
|
||||
1.0, A.data(), m, B.data(), k, 0.1, C.data(), m);
|
||||
}
|
||||
|
||||
int ChildStorm(uint32_t nCallers) {
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
openblas_set_num_threads(stormBlasThreads);
|
||||
|
||||
/* Build the OpenBLAS worker pool first, so the storm is buffer allocation
|
||||
and not pool startup. */
|
||||
dgemmOnce(poolDim, poolDim, poolDim);
|
||||
|
||||
for (uint32_t i = 0; i < nCallers; i++)
|
||||
std::thread(gatedWorker, stormM, stormK, stormN).detach();
|
||||
for (int ms = 0; parked.load(std::memory_order_acquire) < nCallers && ms < 10000; ms++)
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
|
||||
gate.store(true, std::memory_order_release);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(stormDelayMs));
|
||||
std::exit(0);
|
||||
}
|
||||
|
||||
/* Returns 0 if the child exited cleanly, nonzero otherwise; fills outcome. */
|
||||
int RunChild(const std::string& args, int timeoutSec, std::string& outcome) {
|
||||
char exe[MAX_PATH];
|
||||
if (GetModuleFileNameA(NULL, exe, MAX_PATH) == 0) {
|
||||
outcome = "GetModuleFileName failed";
|
||||
return 1;
|
||||
}
|
||||
std::string cmd = "\"" + std::string(exe) + "\" " + args;
|
||||
|
||||
STARTUPINFOA si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory(&pi, sizeof(pi));
|
||||
if (!CreateProcessA(NULL, &cmd[0], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
|
||||
outcome = "CreateProcess failed";
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ret = 1;
|
||||
char buf[64];
|
||||
if (WaitForSingleObject(pi.hProcess, timeoutSec * 1000) != WAIT_OBJECT_0) {
|
||||
TerminateProcess(pi.hProcess, 1);
|
||||
WaitForSingleObject(pi.hProcess, 5000);
|
||||
snprintf(buf, sizeof(buf), "HANG (killed after %ds)", timeoutSec);
|
||||
} else {
|
||||
DWORD code = 1;
|
||||
GetExitCodeProcess(pi.hProcess, &code);
|
||||
if (code == 0) {
|
||||
snprintf(buf, sizeof(buf), "clean exit");
|
||||
ret = 0;
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "CRASH (exit code 0x%08lX)", (unsigned long)code);
|
||||
}
|
||||
}
|
||||
outcome = buf;
|
||||
|
||||
CloseHandle(pi.hThread);
|
||||
CloseHandle(pi.hProcess);
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc >= 3 && std::strcmp(argv[1], "--child-storm") == 0)
|
||||
return ChildStorm(uint32_t(std::atoi(argv[2])));
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
|
||||
uint32_t callers = defaultStormCallers;
|
||||
if (argc >= 2) {
|
||||
int n = std::atoi(argv[1]);
|
||||
if (n > 0) callers = uint32_t(n);
|
||||
}
|
||||
|
||||
int failures = 0;
|
||||
std::cout << "Testing process exit during an allocation storm (" << callers << " callers)"
|
||||
<< std::endl;
|
||||
for (int i = 0; i < numStormChildren; i++) {
|
||||
std::string outcome;
|
||||
failures += RunChild("--child-storm " + std::to_string(callers), stormTimeoutSec, outcome);
|
||||
std::cout << " storm child " << i << ": " << outcome << std::endl;
|
||||
}
|
||||
|
||||
if (failures) {
|
||||
std::cout << "CBLAS DGEMM shutdown safety test FAILED! (" << failures
|
||||
<< " child processes)" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "CBLAS DGEMM shutdown safety test PASSED!" << std::endl;
|
||||
return 0;
|
||||
}
|
||||
@@ -2,8 +2,11 @@
|
||||
#include <vector>
|
||||
#include <random>
|
||||
#include <future>
|
||||
#include <omp.h>
|
||||
#ifdef OPENBLAS_USE_GENERATED_CBLAS_H
|
||||
#include "generated/cblas.h"
|
||||
#else
|
||||
#include "../cblas.h"
|
||||
#endif
|
||||
#include "cpp_thread_safety_common.h"
|
||||
|
||||
void launch_cblas_dgemv(double* A, double* x, double* y, const blasint randomMatSize)
|
||||
@@ -17,7 +20,7 @@ int main(int argc, char* argv[])
|
||||
blasint randomMatSize = 1024; //dimension of the random square matrices and vectors being used
|
||||
uint32_t numConcurrentThreads = 52; //number of concurrent calls of the functions being tested
|
||||
uint32_t numTestRounds = 16; //number of testing rounds before success exit
|
||||
uint32_t maxHwThreads = omp_get_max_threads();
|
||||
uint32_t maxHwThreads = GetMaxHwThreads();
|
||||
|
||||
if (maxHwThreads < 52)
|
||||
numConcurrentThreads = maxHwThreads;
|
||||
@@ -84,12 +87,14 @@ int main(int argc, char* argv[])
|
||||
std::cout<<"done\n";
|
||||
|
||||
std::cout<<"Testing CBLAS DGEMV thread safety"<<std::endl;
|
||||
omp_set_num_threads(numConcurrentThreads);
|
||||
SetLauncherThreads(numConcurrentThreads);
|
||||
for(uint32_t R=0; R<numTestRounds; R++)
|
||||
{
|
||||
std::cout<<"DGEMV round #"<<R<<std::endl;
|
||||
std::cout<<"Launching "<<numConcurrentThreads<<" threads simultaneously using OpenMP..."<<std::flush;
|
||||
std::cout<<"Launching "<<numConcurrentThreads<<" threads simultaneously"<<LauncherName()<<"..."<<std::flush;
|
||||
#ifdef CPP_THREAD_SAFETY_USE_OPENMP
|
||||
#pragma omp parallel for default(none) shared(futureBlock, matBlock, vecBlock, randomMatSize, numConcurrentThreads)
|
||||
#endif
|
||||
for(uint32_t i=0; i<numConcurrentThreads; i++)
|
||||
{
|
||||
futureBlock[i] = std::async(std::launch::async, launch_cblas_dgemv, &matBlock[i][0], &vecBlock[i*2][0], &vecBlock[i*2+1][0], randomMatSize);
|
||||
|
||||
+7
-6
@@ -321,9 +321,10 @@ int detect(void)
|
||||
return CPU_CORTEXX2;
|
||||
else if (strstr(cpu_part, "0xd4e")) //X3
|
||||
return CPU_CORTEXX2;
|
||||
else if (strstr(cpu_part, "0xd4f")) //NVIDIA Grace et al.
|
||||
else if (strstr(cpu_part, "0xd4f"))
|
||||
return CPU_NEOVERSEV2;
|
||||
else if (strstr(cpu_part, "0xd87") || strstr(cpu_part, "0xd85") || strstr(cpu_part, "0xd83")) // X925/A725
|
||||
else if (strstr(cpu_part, "0xd87") || strstr(cpu_part, "0xd85") // A725,X925
|
||||
|| strstr(cpu_part, "0xd84") || strstr(cpu_part, "0xd83")) // V3,V3AE
|
||||
return CPU_NEOVERSEV2;
|
||||
else if (strstr(cpu_part, "0xd0b"))
|
||||
return CPU_CORTEXA76;
|
||||
@@ -425,13 +426,13 @@ int detect(void)
|
||||
if (errcode != ERROR_SUCCESS) wprintf(L"Error reading cpuname from registry:%x\n",errcode);
|
||||
//wprintf(stderr,L"%s\n",(PWSTR)valstring);
|
||||
RegCloseKey(reghandle);
|
||||
if (strstr(valstring, "Snapdragon(R) X Elite")) {
|
||||
if (strstr(pvalstring, "Snapdragon(R) X Elite")) {
|
||||
aliased = 1;
|
||||
return CPU_NEOVERSEN1;
|
||||
}
|
||||
if (strstr(valstring, "Ampere(R) Altra")) return CPU_NEOVERSEN1;
|
||||
if (strstr(valstring, "Snapdragon (TM) 8cx Gen 3")) return CPU_CORTEXX1;
|
||||
if (strstr(valstring, "Snapdragon Compute Platform")) return CPU_CORTEXX1;
|
||||
if (strstr(pvalstring, "Ampere(R) Altra")) return CPU_NEOVERSEN1;
|
||||
if (strstr(pvalstring, "Snapdragon (TM) 8cx Gen 3")) return CPU_CORTEXX1;
|
||||
if (strstr(pvalstring, "Snapdragon Compute Platform")) return CPU_CORTEXX1;
|
||||
#endif
|
||||
#endif
|
||||
return CPU_ARMV8;
|
||||
|
||||
+2
-2
@@ -395,8 +395,8 @@ void get_cpuconfig(void) {
|
||||
}
|
||||
}
|
||||
|
||||
if(os_support_lsx) printf("#define HAVE_LSX\n");
|
||||
if(os_support_lasx) printf("#define HAVE_LASX\n");
|
||||
if(os_support_lsx()) printf("#define HAVE_LSX\n");
|
||||
if(os_support_lasx()) printf("#define HAVE_LASX\n");
|
||||
|
||||
get_cpucount(&num_cores);
|
||||
if (num_cores)
|
||||
|
||||
+40
-41
@@ -1,5 +1,5 @@
|
||||
/*****************************************************************************
|
||||
Copyright (c) 2011-2014, The OpenBLAS Project
|
||||
Copyright (c) 2011-2026, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@@ -13,9 +13,9 @@ met:
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
@@ -109,7 +109,7 @@ int detect(void){
|
||||
return CPU_1004K;
|
||||
} else if (strstr(p, " 24K")) {
|
||||
return CPU_24K;
|
||||
} else
|
||||
} else
|
||||
return CPU_UNKNOWN;
|
||||
}
|
||||
#endif
|
||||
@@ -136,6 +136,40 @@ void get_subdirname(void){
|
||||
printf("mips");
|
||||
}
|
||||
|
||||
int get_feature(char *search) {
|
||||
|
||||
#ifdef __linux
|
||||
FILE *infile;
|
||||
char buffer[2048], *p, *t;
|
||||
p = (char *)NULL;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile)) {
|
||||
|
||||
if (!strncmp("Features", buffer, 8) ||
|
||||
!strncmp("ASEs implemented", buffer, 16)) {
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
if (p == NULL)
|
||||
return 0;
|
||||
|
||||
t = strtok(p, " ");
|
||||
while (t = strtok(NULL, " ")) {
|
||||
if (strstr(t, search)) {
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
void get_cpuconfig(void){
|
||||
if(detect()==CPU_P5600){
|
||||
printf("#define P5600\n");
|
||||
@@ -165,7 +199,7 @@ void get_cpuconfig(void){
|
||||
}else{
|
||||
printf("#define UNKNOWN\n");
|
||||
}
|
||||
#ifndef NO_MSA
|
||||
#ifndef NO_MSA
|
||||
if (get_feature("msa")) printf("#define HAVE_MSA\n");
|
||||
#endif
|
||||
}
|
||||
@@ -181,38 +215,3 @@ void get_libname(void){
|
||||
printf("mips\n");
|
||||
}
|
||||
}
|
||||
|
||||
int get_feature(char *search)
|
||||
{
|
||||
|
||||
#ifdef __linux
|
||||
FILE *infile;
|
||||
char buffer[2048], *p,*t;
|
||||
p = (char *) NULL ;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile))
|
||||
{
|
||||
|
||||
if (!strncmp("Features", buffer, 8) || !strncmp("ASEs implemented", buffer, 16))
|
||||
{
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
if( p == NULL ) return 0;
|
||||
|
||||
t = strtok(p," ");
|
||||
while( t = strtok(NULL," "))
|
||||
{
|
||||
if (strstr(t, search)) { return(1); }
|
||||
}
|
||||
|
||||
#endif
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
+39
-40
@@ -1,5 +1,5 @@
|
||||
/*****************************************************************************
|
||||
Copyright (c) 2011-2014, The OpenBLAS Project
|
||||
Copyright (c) 2011-2026, The OpenBLAS Project
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@@ -13,9 +13,9 @@ met:
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written
|
||||
3. Neither the name of the OpenBLAS project nor the names of
|
||||
its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
@@ -145,13 +145,47 @@ void get_subarchitecture(void){
|
||||
printf("SICORTEX");
|
||||
}else{
|
||||
printf("MIPS64_GENERIC");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void get_subdirname(void){
|
||||
printf("mips64");
|
||||
}
|
||||
|
||||
int get_feature(char *search) {
|
||||
|
||||
#ifdef __linux
|
||||
FILE *infile;
|
||||
char buffer[2048], *p, *t;
|
||||
p = (char *)NULL;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile)) {
|
||||
|
||||
if (!strncmp("Features", buffer, 8) ||
|
||||
!strncmp("ASEs implemented", buffer, 16)) {
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
if (p == NULL)
|
||||
return 0;
|
||||
|
||||
t = strtok(p, " ");
|
||||
while (t = strtok(NULL, " ")) {
|
||||
if (strstr(t, search)) {
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
void get_cpuconfig(void){
|
||||
if(detect()==CPU_LOONGSON3R3) {
|
||||
printf("#define LOONGSON3R3\n");
|
||||
@@ -228,38 +262,3 @@ void get_libname(void){
|
||||
printf("mips64_generic\n");
|
||||
}
|
||||
}
|
||||
|
||||
int get_feature(char *search)
|
||||
{
|
||||
|
||||
#ifdef __linux
|
||||
FILE *infile;
|
||||
char buffer[2048], *p,*t;
|
||||
p = (char *) NULL ;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
|
||||
while (fgets(buffer, sizeof(buffer), infile))
|
||||
{
|
||||
|
||||
if (!strncmp("Features", buffer, 8) || !strncmp("ASEs implemented", buffer, 16))
|
||||
{
|
||||
p = strchr(buffer, ':') + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(infile);
|
||||
|
||||
if( p == NULL ) return 0;
|
||||
|
||||
t = strtok(p," ");
|
||||
while( t = strtok(NULL," "))
|
||||
{
|
||||
if (strstr(t, search)) { return(1); }
|
||||
}
|
||||
|
||||
#endif
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
+23
-8
@@ -75,13 +75,15 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define CPU_x280 2
|
||||
#define CPU_RISCV64_ZVL256B 3
|
||||
#define CPU_RISCV64_ZVL128B 4
|
||||
#define CPU_U74 5
|
||||
|
||||
static char *cpuname[] = {
|
||||
"RISCV64_GENERIC",
|
||||
"C910V",
|
||||
"x280",
|
||||
"CPU_RISCV64_ZVL256B",
|
||||
"CPU_RISCV64_ZVL128B"
|
||||
"CPU_RISCV64_ZVL128B",
|
||||
"U74"
|
||||
};
|
||||
|
||||
static char *cpuname_lower[] = {
|
||||
@@ -89,15 +91,17 @@ static char *cpuname_lower[] = {
|
||||
"c910v",
|
||||
"x280",
|
||||
"riscv64_zvl256b",
|
||||
"riscv64_zvl128b"
|
||||
"riscv64_zvl128b",
|
||||
"u74"
|
||||
};
|
||||
|
||||
int detect(void){
|
||||
#ifdef __linux
|
||||
FILE *infile;
|
||||
char buffer[512],isa_buffer[512],model_buffer[512];
|
||||
char buffer[512],isa_buffer[512],model_buffer[512], uarch_buffer[512];
|
||||
const char* check_c910_str = "T-HEAD C910";
|
||||
char *pmodel = NULL, *pisa = NULL;
|
||||
const char* check_u74_str = "sifive,u74";
|
||||
char *pmodel = NULL, *pisa = NULL, *puarch = NULL;
|
||||
|
||||
infile = fopen("/proc/cpuinfo", "r");
|
||||
if (!infile)
|
||||
@@ -110,6 +114,13 @@ int detect(void){
|
||||
pmodel++;
|
||||
}
|
||||
|
||||
if(!strncmp(buffer, "uarch", 5)){
|
||||
strcpy(uarch_buffer, buffer);
|
||||
puarch = strchr(uarch_buffer, ':');
|
||||
if (puarch)
|
||||
puarch++;
|
||||
}
|
||||
|
||||
if(!strncmp(buffer, "isa", 3)){
|
||||
strcpy(isa_buffer, buffer);
|
||||
pisa = strchr(isa_buffer, '4');
|
||||
@@ -120,12 +131,16 @@ int detect(void){
|
||||
|
||||
fclose(infile);
|
||||
|
||||
if (!pmodel || !pisa)
|
||||
if ((!pmodel && !puarch) || !pisa)
|
||||
return(CPU_GENERIC);
|
||||
|
||||
if (strstr(pmodel, check_c910_str) && strchr(pisa, 'v'))
|
||||
return CPU_C910V;
|
||||
|
||||
if (pmodel) {
|
||||
if (strstr(pmodel, check_c910_str) && strchr(pisa, 'v'))
|
||||
return CPU_C910V;
|
||||
} else if (puarch) {
|
||||
if (strstr(puarch, check_u74_str) && !strchr(pisa, 'v'))
|
||||
return CPU_U74;
|
||||
}
|
||||
return CPU_GENERIC;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1843,9 +1843,11 @@ int get_cpuname(void)
|
||||
if (support_avx2()) return CPUTYPE_ZEN;
|
||||
else return CPUTYPE_DUNNINGTON;
|
||||
default:
|
||||
if (support_avx2()) return CPUTYPE_ZEN;
|
||||
return CPUTYPE_NEHALEM;
|
||||
}
|
||||
default:
|
||||
if (support_avx2()) return CPUTYPE_ZEN;
|
||||
return CPUTYPE_NEHALEM;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,6 +182,6 @@ ARCH_WASM
|
||||
OS_WINDOWS
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_OS_IPHONE)
|
||||
#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
|
||||
OS_IOS
|
||||
#endif
|
||||
|
||||
@@ -18,6 +18,7 @@ if(WIN32)
|
||||
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.ps1
|
||||
"$ErrorActionPreference = \"Stop\"\n"
|
||||
"Get-Content $args[1] | & $args[0]\n"
|
||||
"exit $LASTEXITCODE\n"
|
||||
)
|
||||
set(test_helper powershell -ExecutionPolicy Bypass "${CMAKE_CURRENT_BINARY_DIR}/test_cblas_helper.ps1")
|
||||
else()
|
||||
|
||||
+99
-99
@@ -67,16 +67,16 @@ ztestl3o_3m = c_zblas3_3m.o c_z3chke_3m.o auxiliary.o c_xerbla.o constant.o
|
||||
all :: all1 all2 all3
|
||||
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
all1targets += xscblat1
|
||||
all1targets += xscblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
all1targets += xdcblat1
|
||||
all1targets += xdcblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
all1targets += xccblat1
|
||||
all1targets += xccblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
all1targets += xzcblat1
|
||||
all1targets += xzcblat1$(EXE)
|
||||
endif
|
||||
|
||||
all1: $(all1targets)
|
||||
@@ -84,44 +84,44 @@ all1: $(all1targets)
|
||||
ifneq ($(CROSS), 1)
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
OMP_NUM_THREADS=2 ./xscblat1
|
||||
OMP_NUM_THREADS=2 ./xscblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
OMP_NUM_THREADS=2 ./xdcblat1
|
||||
endif
|
||||
OMP_NUM_THREADS=2 ./xdcblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OMP_NUM_THREADS=2 ./xccblat1
|
||||
OMP_NUM_THREADS=2 ./xccblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OMP_NUM_THREADS=2 ./xzcblat1
|
||||
OMP_NUM_THREADS=2 ./xzcblat1$(EXE)
|
||||
endif
|
||||
else
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xscblat1
|
||||
OPENBLAS_NUM_THREADS=2 ./xscblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xdcblat1
|
||||
OPENBLAS_NUM_THREADS=2 ./xdcblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat1
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat1$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat1
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat1$(EXE)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
all2targets += xscblat2
|
||||
all2targets += xscblat2$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
all2targets += xdcblat2
|
||||
all2targets += xdcblat2$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
all2targets += xccblat2
|
||||
all2targets += xccblat2$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
all2targets += xzcblat2
|
||||
all2targets += xzcblat2$(EXE)
|
||||
endif
|
||||
|
||||
all2: $(all2targets)
|
||||
@@ -129,50 +129,50 @@ all2: $(all2targets)
|
||||
ifneq ($(CROSS), 1)
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
OMP_NUM_THREADS=2 ./xscblat2 < sin2
|
||||
OMP_NUM_THREADS=2 ./xscblat2$(EXE) < sin2
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
OMP_NUM_THREADS=2 ./xdcblat2 < din2
|
||||
OMP_NUM_THREADS=2 ./xdcblat2$(EXE) < din2
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OMP_NUM_THREADS=2 ./xccblat2 < cin2
|
||||
OMP_NUM_THREADS=2 ./xccblat2$(EXE) < cin2
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OMP_NUM_THREADS=2 ./xzcblat2 < zin2
|
||||
OMP_NUM_THREADS=2 ./xzcblat2$(EXE) < zin2
|
||||
endif
|
||||
else
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xscblat2 < sin2
|
||||
OPENBLAS_NUM_THREADS=2 ./xscblat2$(EXE) < sin2
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xdcblat2 < din2
|
||||
OPENBLAS_NUM_THREADS=2 ./xdcblat2$(EXE) < din2
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat2 < cin2
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat2$(EXE) < cin2
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat2 < zin2
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat2$(EXE) < zin2
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
all3targets += xscblat3
|
||||
all3targets += xscblat3$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
all3targets += xdcblat3
|
||||
all3targets += xdcblat3$(EXE)
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
all3targets += xccblat3
|
||||
all3targets += xccblat3$(EXE)
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
all3targets += xccblat3_3m
|
||||
all3targets += xccblat3_3m$(EXE)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
all3targets += xzcblat3
|
||||
all3targets += xzcblat3$(EXE)
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
all3targets += xzcblat3_3m
|
||||
all3targets += xzcblat3_3m$(EXE)
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -181,46 +181,46 @@ all3: $(all3targets)
|
||||
ifneq ($(CROSS), 1)
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
OMP_NUM_THREADS=2 ./xscblat3 < sin3
|
||||
OMP_NUM_THREADS=2 ./xscblat3$(EXE) < sin3
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
OMP_NUM_THREADS=2 ./xdcblat3 < din3
|
||||
OMP_NUM_THREADS=2 ./xdcblat3$(EXE) < din3
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OMP_NUM_THREADS=2 ./xccblat3 < cin3
|
||||
OMP_NUM_THREADS=2 ./xccblat3$(EXE) < cin3
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OMP_NUM_THREADS=2 ./xzcblat3 < zin3
|
||||
OMP_NUM_THREADS=2 ./xzcblat3$(EXE) < zin3
|
||||
endif
|
||||
else
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xscblat3 < sin3
|
||||
OPENBLAS_NUM_THREADS=2 ./xscblat3$(EXE) < sin3
|
||||
endif
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xdcblat3 < din3
|
||||
OPENBLAS_NUM_THREADS=2 ./xdcblat3$(EXE) < din3
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat3 < cin3
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat3$(EXE) < cin3
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat3 < zin3
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat3$(EXE) < zin3
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
ifeq ($(USE_OPENMP), 1)
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OMP_NUM_THREADS=2 ./xccblat3_3m < cin3_3m
|
||||
OMP_NUM_THREADS=2 ./xccblat3_3m$(EXE) < cin3_3m
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OMP_NUM_THREADS=2 ./xzcblat3_3m < zin3_3m
|
||||
OMP_NUM_THREADS=2 ./xzcblat3_3m$(EXE) < zin3_3m
|
||||
endif
|
||||
else
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat3_3m < cin3_3m
|
||||
OPENBLAS_NUM_THREADS=2 ./xccblat3_3m$(EXE) < cin3_3m
|
||||
endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat3_3m < zin3_3m
|
||||
OPENBLAS_NUM_THREADS=2 ./xzcblat3_3m$(EXE) < zin3_3m
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -254,64 +254,64 @@ endif
|
||||
ifeq ($(BUILD_SINGLE),1)
|
||||
# Single real
|
||||
ifeq ($(NOFORTRAN), $(filter 0 2,$(NOFORTRAN)))
|
||||
xscblat1: $(stestl1o) c_sblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xscblat1 c_sblat1.o $(stestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xscblat2: $(stestl2o) c_sblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xscblat2 c_sblat2.o $(stestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xscblat3: $(stestl3o) c_sblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xscblat3 c_sblat3.o $(stestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xscblat1$(EXE): $(stestl1o) c_sblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_sblat1.o $(stestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xscblat2$(EXE): $(stestl2o) c_sblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_sblat2.o $(stestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xscblat3$(EXE): $(stestl3o) c_sblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_sblat3.o $(stestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
else
|
||||
xscblat1: $(stestl1o) c_sblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xscblat1 c_sblat1c.o $(stestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xscblat2: $(stestl2o) c_sblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xscblat2 c_sblat2c.o $(stestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xscblat3: $(stestl3o) c_sblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xscblat3 c_sblat3c.o $(stestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xscblat1$(EXE): $(stestl1o) c_sblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_sblat1c.o $(stestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xscblat2$(EXE): $(stestl2o) c_sblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_sblat2c.o $(stestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xscblat3$(EXE): $(stestl3o) c_sblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_sblat3c.o $(stestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_DOUBLE),1)
|
||||
# Double real
|
||||
ifeq ($(NOFORTRAN), $(filter 0 2,$(NOFORTRAN)))
|
||||
xdcblat1: $(dtestl1o) c_dblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xdcblat1 c_dblat1.o $(dtestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xdcblat2: $(dtestl2o) c_dblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xdcblat2 c_dblat2.o $(dtestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xdcblat3: $(dtestl3o) c_dblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xdcblat3 c_dblat3.o $(dtestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xdcblat1$(EXE): $(dtestl1o) c_dblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_dblat1.o $(dtestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xdcblat2$(EXE): $(dtestl2o) c_dblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_dblat2.o $(dtestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xdcblat3$(EXE): $(dtestl3o) c_dblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_dblat3.o $(dtestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
else
|
||||
xdcblat1: $(dtestl1o) c_dblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xdcblat1 c_dblat1c.o $(dtestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xdcblat2: $(dtestl2o) c_dblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xdcblat2 c_dblat2c.o $(dtestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xdcblat3: $(dtestl3o) c_dblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xdcblat3 c_dblat3c.o $(dtestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xdcblat1$(EXE): $(dtestl1o) c_dblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_dblat1c.o $(dtestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xdcblat2$(EXE): $(dtestl2o) c_dblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_dblat2c.o $(dtestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xdcblat3$(EXE): $(dtestl3o) c_dblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_dblat3c.o $(dtestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_COMPLEX),1)
|
||||
# Single complex
|
||||
ifeq ($(NOFORTRAN), $(filter 0 2,$(NOFORTRAN)))
|
||||
xccblat1: $(ctestl1o) c_cblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xccblat1 c_cblat1.o $(ctestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat2: $(ctestl2o) c_cblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xccblat2 c_cblat2.o $(ctestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat3: $(ctestl3o) c_cblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xccblat3 c_cblat3.o $(ctestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat1$(EXE): $(ctestl1o) c_cblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_cblat1.o $(ctestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat2$(EXE): $(ctestl2o) c_cblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_cblat2.o $(ctestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat3$(EXE): $(ctestl3o) c_cblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_cblat3.o $(ctestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
xccblat3_3m: $(ctestl3o_3m) c_cblat3_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xccblat3_3m c_cblat3_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat3_3m$(EXE): $(ctestl3o_3m) c_cblat3_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_cblat3_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
endif
|
||||
else
|
||||
xccblat1: $(ctestl1o) c_cblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xccblat1 c_cblat1c.o $(ctestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xccblat2: $(ctestl2o) c_cblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xccblat2 c_cblat2c.o $(ctestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xccblat3: $(ctestl3o) c_cblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xccblat3 c_cblat3c.o $(ctestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xccblat1$(EXE): $(ctestl1o) c_cblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_cblat1c.o $(ctestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xccblat2$(EXE): $(ctestl2o) c_cblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_cblat2c.o $(ctestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xccblat3$(EXE): $(ctestl3o) c_cblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_cblat3c.o $(ctestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
xccblat3_3m: $(ctestl3o_3m) c_cblat3c_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xccblat3_3m c_cblat3c_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xccblat3_3m$(EXE): $(ctestl3o_3m) c_cblat3c_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_cblat3c_3m.o $(ctestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -320,26 +320,26 @@ endif
|
||||
ifeq ($(BUILD_COMPLEX16),1)
|
||||
# Double complex
|
||||
ifeq ($(NOFORTRAN), $(filter 0 2,$(NOFORTRAN)))
|
||||
xzcblat1: $(ztestl1o) c_zblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xzcblat1 c_zblat1.o $(ztestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat2: $(ztestl2o) c_zblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xzcblat2 c_zblat2.o $(ztestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat3: $(ztestl3o) c_zblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xzcblat3 c_zblat3.o $(ztestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat1$(EXE): $(ztestl1o) c_zblat1.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_zblat1.o $(ztestl1o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat2$(EXE): $(ztestl2o) c_zblat2.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_zblat2.o $(ztestl2o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat3$(EXE): $(ztestl3o) c_zblat3.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_zblat3.o $(ztestl3o) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
xzcblat3_3m: $(ztestl3o_3m) c_zblat3_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o xzcblat3_3m c_zblat3_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat3_3m$(EXE): $(ztestl3o_3m) c_zblat3_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(FC) $(FLDFLAGS) -o $@ c_zblat3_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
endif
|
||||
else
|
||||
xzcblat1: $(ztestl1o) c_zblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xzcblat1 c_zblat1c.o $(ztestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xzcblat2: $(ztestl2o) c_zblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xzcblat2 c_zblat2c.o $(ztestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xzcblat3: $(ztestl3o) c_zblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xzcblat3 c_zblat3c.o $(ztestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xzcblat1$(EXE): $(ztestl1o) c_zblat1c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_zblat1c.o $(ztestl1o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xzcblat2$(EXE): $(ztestl2o) c_zblat2c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_zblat2c.o $(ztestl2o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
xzcblat3$(EXE): $(ztestl3o) c_zblat3c.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_zblat3c.o $(ztestl3o) $(LIB) $(CEXTRALIB) $(filter-out -lgfortran,$(EXTRALIB))
|
||||
ifeq ($(SUPPORT_GEMM3M),1)
|
||||
xzcblat3_3m: $(ztestl3o_3m) c_zblat3c_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o xzcblat3_3m c_zblat3c_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
xzcblat3_3m$(EXE): $(ztestl3o_3m) c_zblat3c_3m.o $(TOPDIR)/$(LIBNAME)
|
||||
$(CC) $(CFLAGS) -o $@ c_zblat3c_3m.o $(ztestl3o_3m) $(LIB) $(EXTRALIB) $(CEXTRALIB)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -36,11 +29,7 @@ void F77_c2chke(char *rout) {
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
@@ -821,6 +810,8 @@ void F77_c2chke(char *rout) {
|
||||
}
|
||||
if (cblas_ok == TRUE)
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -39,11 +32,7 @@ void F77_c3chke(char * rout) {
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
|
||||
if (strncmp( sf,"cblas_cgemm" ,11)==0) {
|
||||
@@ -1703,6 +1692,8 @@ void F77_c3chke(char * rout) {
|
||||
|
||||
if (cblas_ok == 1 )
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -39,11 +32,7 @@ void F77_c3chke(char * rout) {
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
|
||||
if (strncmp( sf,"cblas_cgemm3m" ,13)==0) {
|
||||
@@ -1931,6 +1920,8 @@ void F77_c3chke(char * rout) {
|
||||
|
||||
if (cblas_ok == 1 )
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -34,11 +27,7 @@ void F77_d2chke(char *rout) {
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
@@ -784,6 +773,8 @@ void F77_d2chke(char *rout) {
|
||||
}
|
||||
if (cblas_ok == TRUE)
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -34,11 +27,7 @@ void F77_d3chke(char *rout) {
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
@@ -1266,6 +1255,8 @@ void F77_d3chke(char *rout) {
|
||||
}
|
||||
if (cblas_ok == TRUE )
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -34,11 +27,7 @@ void F77_s2chke(char *rout) {
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
@@ -784,6 +773,8 @@ void F77_s2chke(char *rout) {
|
||||
}
|
||||
if (cblas_ok == TRUE)
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -34,11 +27,7 @@ void F77_s3chke(char *rout) {
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
@@ -1268,6 +1257,8 @@ void F77_s3chke(char *rout) {
|
||||
}
|
||||
if (cblas_ok == TRUE )
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -509,7 +509,7 @@ L30:
|
||||
if (i__1 < 2) {
|
||||
goto L60;
|
||||
}
|
||||
for (i__ = 1; i__ <= 9; ++i__) {
|
||||
for (i__ = 1; i__ <= 6; ++i__) {
|
||||
if (s_cmp(snamet, snames[i__ - 1] , (ftnlen)12, (ftnlen)12) ==
|
||||
0) {
|
||||
goto L50;
|
||||
|
||||
+18
-46
@@ -1,4 +1,5 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
@@ -8,17 +9,9 @@
|
||||
void cblas_xerbla(blasint info, char *rout, char *form, ...)
|
||||
{
|
||||
extern int cblas_lerr, cblas_info, cblas_ok;
|
||||
extern int link_xerbla;
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
/* Initially, c__3chke will call this routine with
|
||||
* global variable link_xerbla=1, and F77_xerbla will set link_xerbla=0.
|
||||
* This is done to fool the linker into loading these subroutines first
|
||||
* instead of ones in the CBLAS or the legacy BLAS library.
|
||||
*/
|
||||
if (link_xerbla) return;
|
||||
|
||||
if (cblas_rout != NULL && strcmp(cblas_rout, rout) != 0){
|
||||
printf("***** XERBLA WAS CALLED WITH SRNAME = <%s> INSTEAD OF <%s> *******\n", rout, cblas_rout);
|
||||
cblas_ok = FALSE;
|
||||
@@ -78,44 +71,27 @@ void cblas_xerbla(blasint info, char *rout, char *form, ...)
|
||||
}
|
||||
|
||||
if (info != cblas_info){
|
||||
printf("***** XERBLA WAS CALLED WITH INFO = %d INSTEAD OF %d in %s *******\n",info, cblas_info, rout);
|
||||
printf("***** XERBLA WAS CALLED WITH INFO = %lld INSTEAD OF %lld in %s *******\n",
|
||||
(long long)info, (long long)cblas_info, rout);
|
||||
cblas_lerr = PASSED;
|
||||
cblas_ok = FALSE;
|
||||
} else cblas_lerr = FAILED;
|
||||
}
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo)
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo)
|
||||
#endif
|
||||
static void cblas_test_xerbla(const char *srname, const blasint *info,
|
||||
size_t length)
|
||||
{
|
||||
#ifdef F77_Char
|
||||
char *srname;
|
||||
#endif
|
||||
|
||||
extern int cblas_ok;
|
||||
char rout[] = {'c','b','l','a','s','_','\0','\0','\0','\0','\0','\0','\0'};
|
||||
blasint i;
|
||||
|
||||
#ifdef F77_Integer
|
||||
F77_Integer *info=vinfo;
|
||||
F77_Integer i;
|
||||
extern F77_Integer link_xerbla;
|
||||
#else
|
||||
int *info=vinfo;
|
||||
int i;
|
||||
extern int link_xerbla;
|
||||
#endif
|
||||
#ifdef F77_Char
|
||||
srname = F2C_STR(F77_srname, XerblaStrLen);
|
||||
#endif
|
||||
|
||||
/* See the comment in cblas_xerbla() above */
|
||||
if (link_xerbla)
|
||||
{
|
||||
link_xerbla = 0;
|
||||
if (length < 6) {
|
||||
printf("***** XERBLA WAS CALLED WITH AN INVALID ROUTINE NAME LENGTH *******\n");
|
||||
cblas_ok = FALSE;
|
||||
return;
|
||||
}
|
||||
for(i=0; i < 6; i++) rout[i+6] = tolower(srname[i]);
|
||||
|
||||
for(i=0; i < 6; i++) rout[i+6] = tolower((unsigned char)srname[i]);
|
||||
for(i=11; i >= 9; i--) if (rout[i] == ' ') rout[i] = '\0';
|
||||
|
||||
/* We increment *info by 1 since the CBLAS interface adds one more
|
||||
@@ -124,14 +100,10 @@ void F77_xerbla(char *srname, void *vinfo)
|
||||
cblas_xerbla(*info+1,rout,"");
|
||||
}
|
||||
|
||||
#ifdef USE64BITINT
|
||||
#undef int
|
||||
#endif
|
||||
|
||||
int BLASFUNC(xerbla)(char *name, blasint *info, blasint length) {
|
||||
|
||||
F77_xerbla(name, info);
|
||||
return 0;
|
||||
};
|
||||
|
||||
void cblas_test_set_xerbla(void) {
|
||||
openblas_set_xerbla(cblas_test_xerbla);
|
||||
}
|
||||
|
||||
void cblas_test_fail(void) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -36,11 +29,7 @@ void F77_z2chke(char *rout) {
|
||||
extern int RowMajorStrg;
|
||||
extern char *cblas_rout;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
@@ -821,6 +810,8 @@ void F77_z2chke(char *rout) {
|
||||
}
|
||||
if (cblas_ok == TRUE)
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("******* %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -39,11 +32,7 @@ void F77_z3chke(char * rout) {
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
|
||||
|
||||
@@ -1705,6 +1694,8 @@ void F77_z3chke(char * rout) {
|
||||
|
||||
if (cblas_ok == 1 )
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-15
@@ -4,21 +4,14 @@
|
||||
#include "cblas_test.h"
|
||||
|
||||
int cblas_ok, cblas_lerr, cblas_info;
|
||||
int link_xerbla=TRUE;
|
||||
char *cblas_rout;
|
||||
|
||||
#ifdef F77_Char
|
||||
void F77_xerbla(F77_Char F77_srname, void *vinfo);
|
||||
#else
|
||||
void F77_xerbla(char *srname, void *vinfo);
|
||||
#endif
|
||||
|
||||
void chkxer(void) {
|
||||
extern int cblas_ok, cblas_lerr, cblas_info;
|
||||
extern int link_xerbla;
|
||||
extern char *cblas_rout;
|
||||
if (cblas_lerr == 1 ) {
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %d NOT DETECTED BY %s *****\n", cblas_info, cblas_rout);
|
||||
printf("***** ILLEGAL VALUE OF PARAMETER NUMBER %lld NOT DETECTED BY %s *****\n",
|
||||
(long long)cblas_info, cblas_rout);
|
||||
cblas_ok = 0 ;
|
||||
}
|
||||
cblas_lerr = 1 ;
|
||||
@@ -39,11 +32,7 @@ void F77_z3chke(char * rout) {
|
||||
cblas_ok = TRUE ;
|
||||
cblas_lerr = PASSED ;
|
||||
|
||||
if (link_xerbla) /* call these first to link */
|
||||
{
|
||||
cblas_xerbla(cblas_info,cblas_rout,"");
|
||||
F77_xerbla(cblas_rout,&cblas_info);
|
||||
}
|
||||
cblas_test_set_xerbla();
|
||||
|
||||
|
||||
|
||||
@@ -1935,6 +1924,8 @@ void F77_z3chke(char * rout) {
|
||||
|
||||
if (cblas_ok == 1 )
|
||||
printf(" %-12s PASSED THE TESTS OF ERROR-EXITS\n", cblas_rout);
|
||||
else
|
||||
else {
|
||||
printf("***** %s FAILED THE TESTS OF ERROR-EXITS *******\n",cblas_rout);
|
||||
cblas_test_fail();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
#define INVALID -1
|
||||
#define UNDEFINED -1
|
||||
|
||||
void cblas_test_set_xerbla(void);
|
||||
void cblas_test_fail(void);
|
||||
|
||||
typedef struct { float real; float imag; } CBLAS_TEST_COMPLEX;
|
||||
typedef struct { double real; double imag; } CBLAS_TEST_ZOMPLEX;
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ though - please read the linked Makefiles if you want to see all variables.
|
||||
- `BUILD_DOUBLE`: build the double-precision real functions
|
||||
- `BUILD_COMPLEX`: build the single-precision complex functions
|
||||
- `BUILD_COMPLEX16`: build the double-precision complex functions
|
||||
- `BUILD_BFLOAT16`: build the "half precision brainfloat" real functions
|
||||
- `BUILD_BFLOAT16`: build the `bfloat16` real functions
|
||||
- `EXPRECISION`: (do not use, this is a work in progress) option to use `long
|
||||
double` functions
|
||||
|
||||
@@ -143,9 +143,8 @@ ensures that there are a sufficient number of buffer sets available.
|
||||
no symbolic linking to variant names (default is `0`)
|
||||
- `LIBNAMEPREFIX`: prefix that, if given, will be inserted in the library name
|
||||
before `openblas` (e.g., `xxx` will result in `libxxxopenblas.so`)
|
||||
- `LIBNAMESUFFIX`: suffix that, if given, will be inserted in the library name
|
||||
after `openblas`, separated by an underscore (e.g., `yyy` will result in
|
||||
`libopenblas_yyy.so`)
|
||||
- `LIBNAMESUFFIX`: suffix that, if given, will be appended to the library name
|
||||
after `openblas` (e.g., `_yyy` will result in `libopenblas_yyy.so`)
|
||||
- `SYMBOLPREFIX`: prefix that, if given, will be added to all symbol names
|
||||
*and* to the library name
|
||||
- `SYMBOLSUFFIX`: suffix that, if given, will be added to all symbol names
|
||||
|
||||
+18
-8
@@ -22,14 +22,24 @@
|
||||
| x86_64 | " |macOS11|gmake |arm64| XCode 12.4 | - | | + | - | both | Azure | |
|
||||
| x86_64 | " |macOS11|gmake |arm | XCode 12.4 | - | | + | - | both | Azure | |
|
||||
| x86_64 | " |Alpine Linux(musl)|gmake| - | gcc | gfortran | pthreads | + | - | both | Azure | |
|
||||
| arm64 |Apple M1 |OSX |CMAKE/XCode| - | LLVM | - | OpenMP | - | - | static | Cirrus | |
|
||||
| arm64 |Apple M1 |OSX |CMAKE/Xcode| - | LLVM | - | OpenMP | - | + | static | Cirrus | |
|
||||
| arm64 |Apple M1 |OSX |CMAKE/XCode|x86_64| LLVM| - | - | + | - | static | Cirrus | |
|
||||
| arm64 |Neoverse N1|Linux |gmake | - |gcc10.2| -| pthreads| - | - | both | Cirrus | |
|
||||
| arm64 |Neoverse N1|Linux |gmake | - |gcc10.2| -| pthreads| - | + | both | Cirrus | |
|
||||
| arm64 |Neoverse N1|Linux |gmake |- |gcc10.2| -| OpenMP | - | - | both |Cirrus | 8 |
|
||||
| x86_64 | Ryzen| FreeBSD |gmake | - | gcc12.2|gfortran| pthreads| - | - | both | Cirrus | |
|
||||
| x86_64 | Ryzen| FreeBSD |gmake | | gcc12.2|gfortran| pthreads| - | + | both | Cirrus | |
|
||||
| arm64 |Apple M1 |macOS14|CMAKE | - | LLVM |gfortran| pthreads | + | - | static | Github | |
|
||||
| arm64 |Apple M1 |macOS14|CMAKE | - | LLVM |gfortran| pthreads | + | + | static | Github | |
|
||||
| arm64 |Apple M1 |macOS14|CMAKE | - | LLVM |gfortran| OpenMP | + | - | static | Github | |
|
||||
| arm64 |Apple M1 |macOS14|CMAKE | - | LLVM |gfortran| OpenMP | + | + | static | Github | |
|
||||
| arm64 |Apple M1 |macOS14|gmake | - | LLVM |gfortran| pthreads | + | - | both | Github | |
|
||||
| arm64 |Apple M1 |macOS14|gmake | - | LLVM |gfortran| pthreads | + | + | both | Github | |
|
||||
| arm64 |Apple M1 |macOS14|gmake | - | LLVM |gfortran| OpenMP | + | - | both | Github | |
|
||||
| arm64 |Apple M1 |macOS14|gmake | - | LLVM |gfortran| OpenMP | + | + | both | Github | |
|
||||
| arm64 |Apple M1 |macOS26|gmake |x86_64| XCode| - | | + | - | both | Github | |
|
||||
| arm64 |Apple M1 |macOS26|gmake |arm64| XCode| - | | + | - | both | Github | |
|
||||
| arm64 |Apple M1 |macOS26|gmake |arm| AndroidNDK-llvm | - | | - | - | both | Github | |
|
||||
| arm64 |Neoverse N1|Linux |gmake | - |gcc|gfortran| pthreads| - | - | both | Github | |
|
||||
| arm64 |Neoverse N1|Linux |gmake | - |gcc|gfortran| pthreads| - | + | both | Github | |
|
||||
| arm64 |Neoverse N1|Linux |gmake |- |gcc|gfortran| OpenMP | - | - | both | Github | |
|
||||
| arm64 |Graviton3 |Linux |CMAKE | - |gcc|gfortran| pthreads| + | - | static | Github | |
|
||||
| arm64 |Graviton3 |Linux |gmake | - |gcc|gfortran| pthreads| + | - | both | Github | |
|
||||
| x86_64 |generic|FreeBSD |gmake | - | gcc15|gfortran15| pthreads| - | - | both | Github | |
|
||||
| arm64 |generic|FreeBSD |gmake | - | gcc15|gfortran15| pthreads| - | - | both | Github | |
|
||||
| x86_64 |GENERIC |QEMU |gmake| mips64 | gcc | gfortran | pthreads | - | - | static | Github | |
|
||||
| x86_64 |SICORTEX |QEMU |gmake| mips64 | gcc | gfortran | pthreads | - | - | static | Github | |
|
||||
| x86_64 |I6400 |QEMU |gmake| mips64 | gcc | gfortran | pthreads | - | - | static | Github | |
|
||||
|
||||
+2
-2
@@ -80,8 +80,8 @@ According to the above `KERNEL.HASWELL`, OpenBLAS Haswell dgemm kernel file is `
|
||||
["Anatomy of High-Performance Matrix Multiplication"](http://delivery.acm.org/10.1145/1360000/1356053/a12-goto.pdf?ip=155.68.162.54&id=1356053&acc=ACTIVE%20SERVICE&key=A79D83B43E50B5B8%2EF070BBE7E45C3F17%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35&__acm__=1517932837_edfe766f1e295d9a7830812371e1d173).
|
||||
ACM Transactions on Mathematical Software 34 (3): Article 12
|
||||
|
||||
(The above link is available only to ACM members, but this and many related
|
||||
papers is also available on [the pages of van de Geijn's FLAME project](http://www.cs.utexas.edu/~flame/web/FLAMEPublications.html))
|
||||
(The above link is available only to ACM members, but this paper and many
|
||||
related papers are also available on [the pages of van de Geijn's FLAME project](http://www.cs.utexas.edu/~flame/web/FLAMEPublications.html))
|
||||
|
||||
The `driver/level3/level3.c` is the implementation of Goto's algorithm.
|
||||
Meanwhile, you can look at `kernel/generic/gemmkernel_2x2.c`, which is a naive
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user