"use strict";
|
/**
|
* @license
|
* Copyright 2017 Google Inc. All Rights Reserved.
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
* =============================================================================
|
*/
|
Object.defineProperty(exports, "__esModule", { value: true });
|
var ArgMinMaxProgram = /** @class */ (function () {
|
function ArgMinMaxProgram(reduceInfo, op, firstPass) {
|
this.variableNames = ['A'];
|
var windowSize = reduceInfo.windowSize;
|
var batchSize = reduceInfo.batchSize;
|
var inSize = reduceInfo.inSize;
|
var outSize = Math.ceil(inSize / windowSize);
|
if (!firstPass) {
|
this.variableNames.push('bestIndicesA');
|
}
|
this.outputShape = [batchSize, outSize];
|
var compOp = (op === 'max') ? '>' : '<';
|
var indexSnippet = firstPass ?
|
'inOffset + i;' :
|
'round(getBestIndicesA(batch, inOffset + i));';
|
this.userCode = "\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * " + windowSize + ";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < " + windowSize + "; i++) {\n int inIdx = " + indexSnippet + ";\n float candidate = getA(batch, inIdx);\n if (candidate " + compOp + " bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n ";
|
}
|
return ArgMinMaxProgram;
|
}());
|
exports.ArgMinMaxProgram = ArgMinMaxProgram;
|
//# sourceMappingURL=argminmax_gpu.js.map
|