diff --git a/src/PTQ/Clipping.cpp b/src/PTQ/Clipping.cpp index df833fa24692a10bc22ff90206aa15660e2b1d95..7dd02b3df7b84559db36b46803700408dbd9c9c6 100644 --- a/src/PTQ/Clipping.cpp +++ b/src/PTQ/Clipping.cpp @@ -35,17 +35,10 @@ std::unordered_map<std::shared_ptr<Node>, std::vector<int>> computeHistograms(st // Setup the histograms ... - for (std::shared_ptr<Node> node : graphView->getNodes()) + for (std::pair<std::shared_ptr<Node>, double> pair : valueRanges) { - bool isInsideRanges = (valueRanges.find(node) != valueRanges.end()); - if (isInsideRanges) - { - std::vector<int> histogram; - for (int i = 0; i < nbBins; i++) - histogram.push_back(0); - - histograms.insert(std::make_pair(node, histogram)); - } + std::vector<int> histogram(nbBins, 0); + histograms.insert(std::make_pair(pair.first, histogram)); } // Fill the histograms ... @@ -66,35 +59,32 @@ std::unordered_map<std::shared_ptr<Node>, std::vector<int>> computeHistograms(st scheduler.forward(true, {inputTensor}); // Gather values ... - - for (std::shared_ptr<Node> node : graphView->getNodes()) + + for (std::pair<std::shared_ptr<Node>, double> pair : valueRanges) { - bool isInsideRanges = (valueRanges.find(node) != valueRanges.end()); - if (isInsideRanges) - { - double valueRange = valueRanges[node]; + std::shared_ptr<Node> node = pair.first; + double valueRange = pair.second; - std::shared_ptr<Operator> nodeOperator = node->getOperator(); - std::shared_ptr<Tensor> valueTensor = std::static_pointer_cast<Tensor> (nodeOperator->getRawOutput(0)); + std::shared_ptr<Operator> nodeOperator = node->getOperator(); + std::shared_ptr<Tensor> valueTensor = std::static_pointer_cast<Tensor> (nodeOperator->getRawOutput(0)); - if (useCuda) - valueTensor->setBackend("cpu"); + if (useCuda) + valueTensor->setBackend("cpu"); - double * castedTensor = static_cast<double *> (valueTensor->getImpl()->rawPtr()); + double * castedTensor = static_cast<double *> (valueTensor->getImpl()->rawPtr()); - std::vector<int> nodeHistogram = histograms[node]; - for(std::size_t i = 0; i < valueTensor->size(); i++) - { - std::size_t bin = std::round(std::abs(castedTensor[i] / valueRange * nbBins)); - bin = std::min(bin, nodeHistogram.size() - 1); - nodeHistogram[bin]++; - } + std::vector<int> nodeHistogram = histograms[node]; + for(std::size_t i = 0; i < valueTensor->size(); i++) + { + std::size_t bin = std::round(std::abs(castedTensor[i] / valueRange * nbBins)); + bin = std::min(bin, nodeHistogram.size() - 1); + nodeHistogram[bin]++; + } - histograms[node] = nodeHistogram; + histograms[node] = nodeHistogram; - if (useCuda) - valueTensor->setBackend("cuda"); - } + if (useCuda) + valueTensor->setBackend("cuda"); } if (useCuda)