mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 19:29:02 +08:00
Fixed compilation error
This commit is contained in:
parent
ebf6ada5ee
commit
997c335970
@ -93,10 +93,16 @@ struct EvalRange {
|
|||||||
evaluator.evalScalar(i);
|
evaluator.evalScalar(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Index alignBlockSize(Index size) {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Evaluator, typename Index>
|
template <typename Evaluator, typename Index>
|
||||||
struct EvalRange<Evaluator, Index, true> {
|
struct EvalRange<Evaluator, Index, true> {
|
||||||
|
static const int PacketSize = unpacket_traits<typename Evaluator::PacketReturnType>::size;
|
||||||
|
|
||||||
static void run(Evaluator* evaluator_in, const Index first, const Index last) {
|
static void run(Evaluator* evaluator_in, const Index first, const Index last) {
|
||||||
Evaluator evaluator = *evaluator_in;
|
Evaluator evaluator = *evaluator_in;
|
||||||
eigen_assert(last >= first);
|
eigen_assert(last >= first);
|
||||||
@ -122,6 +128,15 @@ struct EvalRange<Evaluator, Index, true> {
|
|||||||
evaluator.evalScalar(i);
|
evaluator.evalScalar(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Index alignBlockSize(Index size) {
|
||||||
|
// Align block size to packet size and account for unrolling in run above.
|
||||||
|
if (size >= 16 * PacketSize) {
|
||||||
|
return (size + 4 * PacketSize - 1) & ~(4 * PacketSize - 1);
|
||||||
|
}
|
||||||
|
// Aligning to 4 * PacketSize would increase block size by more than 25%.
|
||||||
|
return (size + PacketSize - 1) & ~(PacketSize - 1);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Expression, bool Vectorizable>
|
template <typename Expression, bool Vectorizable>
|
||||||
@ -139,9 +154,9 @@ class TensorExecutor<Expression, ThreadPoolDevice, Vectorizable> {
|
|||||||
const Index size = array_prod(evaluator.dimensions());
|
const Index size = array_prod(evaluator.dimensions());
|
||||||
#if defined(EIGEN_USE_NONBLOCKING_THREAD_POOL) && defined(EIGEN_USE_COST_MODEL)
|
#if defined(EIGEN_USE_NONBLOCKING_THREAD_POOL) && defined(EIGEN_USE_COST_MODEL)
|
||||||
device.parallelFor(size, evaluator.costPerCoeff(Vectorizable),
|
device.parallelFor(size, evaluator.costPerCoeff(Vectorizable),
|
||||||
EvalRange::alignBlockSize,
|
EvalRange<Evaluator, Index, Vectorizable>::alignBlockSize,
|
||||||
[&evaluator](Index first, Index last) {
|
[&evaluator](Index first, Index last) {
|
||||||
EvalRange::run(&evaluator, first, last);
|
EvalRange<Evaluator, Index, Vectorizable>::run(&evaluator, first, last);
|
||||||
});
|
});
|
||||||
#else
|
#else
|
||||||
size_t num_threads = device.numThreads();
|
size_t num_threads = device.numThreads();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user