Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/FBGEMM.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fbgemm.cc')
-rw-r--r--src/Fbgemm.cc85
1 files changed, 41 insertions, 44 deletions
diff --git a/src/Fbgemm.cc b/src/Fbgemm.cc
index 523f556..0f2f6fb 100644
--- a/src/Fbgemm.cc
+++ b/src/Fbgemm.cc
@@ -44,53 +44,51 @@ void fbgemmPacked(
typename packingBMatrix::accType>::value,
"Accumulation type of both matrices should be the same");
- int MCB, KCB;
+ // Run time CPU detection
+ if (!cpuinfo_initialize()) {
+ throw std::runtime_error("Failed to initialize cpuinfo!");
+ }
+ if ((!fbgemmHasAvx512Support() && !fbgemmHasAvx2Support())) {
+ assert(0 && "unknown architecure");
+ }
+
+ int MCB;
+ int KCB;
int MR;
- // Run time CPU detection
- if (cpuinfo_initialize()) {
- if (blocking_params) {
- if (fbgemmHasAvx512Support() || fbgemmHasAvx2Support()) {
- MCB = blocking_params->MCB;
- KCB = blocking_params->KCB;
- MR = blocking_params->MR;
- }
+ if (blocking_params) {
+ MCB = blocking_params->MCB;
+ KCB = blocking_params->KCB;
+ MR = blocking_params->MR;
+
+ } else {
+ if (fbgemmHasAvx512Support()) {
+ MCB = PackingTraits<
+ typename packingAMatrix::inpType,
+ typename packingAMatrix::accType,
+ inst_set_t::avx512>::MCB;
+ KCB = PackingTraits<
+ typename packingAMatrix::inpType,
+ typename packingAMatrix::accType,
+ inst_set_t::avx512>::KCB;
+ MR = PackingTraits<
+ typename packingAMatrix::inpType,
+ typename packingAMatrix::accType,
+ inst_set_t::avx512>::MR;
} else {
- if (fbgemmHasAvx512Support()) {
- MCB = PackingTraits<
- typename packingAMatrix::inpType,
- typename packingAMatrix::accType,
- inst_set_t::avx512>::MCB;
- KCB = PackingTraits<
- typename packingAMatrix::inpType,
- typename packingAMatrix::accType,
- inst_set_t::avx512>::KCB;
- MR = PackingTraits<
- typename packingAMatrix::inpType,
- typename packingAMatrix::accType,
- inst_set_t::avx512>::MR;
- } else if (fbgemmHasAvx2Support()) {
- MCB = PackingTraits<
- typename packingAMatrix::inpType,
- typename packingAMatrix::accType,
- inst_set_t::avx2>::MCB;
- KCB = PackingTraits<
- typename packingAMatrix::inpType,
- typename packingAMatrix::accType,
- inst_set_t::avx2>::KCB;
- MR = PackingTraits<
- typename packingAMatrix::inpType,
- typename packingAMatrix::accType,
- inst_set_t::avx2>::MR;
-
- } else {
- // TODO: Have default slower path
- assert(0 && "unsupported architecture");
- return;
- }
+ MCB = PackingTraits<
+ typename packingAMatrix::inpType,
+ typename packingAMatrix::accType,
+ inst_set_t::avx2>::MCB;
+ KCB = PackingTraits<
+ typename packingAMatrix::inpType,
+ typename packingAMatrix::accType,
+ inst_set_t::avx2>::KCB;
+ MR = PackingTraits<
+ typename packingAMatrix::inpType,
+ typename packingAMatrix::accType,
+ inst_set_t::avx2>::MR;
}
- } else {
- throw std::runtime_error("Failed to initialize cpuinfo!");
}
if (!packB.isPrePacked()) {
@@ -516,5 +514,4 @@ template void fbgemmPacked(
int num_threads,
const BlockingFactors* blocking_params);
-
} // namespace fbgemm