MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / evalNodes

Function evalNodes

src/backend/oneapi/jit.cpp:388–631  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

386
387template<typename T>
388void evalNodes(vector<Param<T>>& outputs, const vector<Node*>& output_nodes) {
389 if (outputs.empty()) return;
390 Node_map_t nodes;
391 vector<Node*> full_nodes;
392 vector<Node_ids> full_ids;
393 vector<int> output_ids;
394 vector<Node_ptr> node_clones;
395
396 bool is_linear{true};
397 dim_t numOutElems{1};
398 assert(outputs.size() == output_nodes.size());
399 KParam& out_info{outputs[0].info};
400 dim_t* outDims{out_info.dims};
401 dim_t* outStrides{out_info.strides};
402 // unsigned nrInputs{0};
403
404 dim_t ndims{outDims[3] > 1 ? 4
405 : outDims[2] > 1 ? 3
406 : outDims[1] > 1 ? 2
407 : outDims[0] > 0 ? 1
408 : 0};
409 for (dim_t dim{0}; dim < ndims; ++dim) {
410 is_linear &= (numOutElems == outStrides[dim]);
411 numOutElems *= outDims[dim];
412 }
413 if (numOutElems == 0) { return; }
414
415 for (Node* node : output_nodes) {
416 const int id{node->getNodesMap(nodes, full_nodes, full_ids)};
417 output_ids.push_back(id);
418 }
419
420 node_clones.clear();
421 node_clones.reserve(full_nodes.size());
422 for (Node* node : full_nodes) { node_clones.emplace_back(node->clone()); }
423
424 bool moddimsFound{false};
425 for (const Node* node : full_nodes) {
426 is_linear &= node->isLinear(outDims);
427 moddimsFound |= (node->getOp() == af_moddims_t);
428 // if (node->isBuffer()) { ++nrInputs; }
429 }
430
431 bool emptyColumnsFound{false};
432 if (is_linear) {
433 outDims[0] = numOutElems;
434 outDims[1] = 1;
435 outDims[2] = 1;
436 outDims[3] = 1;
437 outStrides[0] = 1;
438 outStrides[1] = numOutElems;
439 outStrides[2] = numOutElems;
440 outStrides[3] = numOutElems;
441 ndims = 1;
442 } else {
443 emptyColumnsFound = ndims > (outDims[0] == 1 ? 1
444 : outDims[1] == 1 ? 2
445 : outDims[2] == 1 ? 3

Callers 4

joinFunction · 0.70
evalMethod · 0.70
evalMultipleFunction · 0.70
copyArrayFunction · 0.70

Calls 15

beginFunction · 0.85
endFunction · 0.85
getFuncNameFunction · 0.85
getNodesMapMethod · 0.80
isBufferMethod · 0.80
getNodeTypeMethod · 0.80
requireMethod · 0.80
transformFunction · 0.70
calcStridesFunction · 0.50
getQueueFunction · 0.50
cloneMethod · 0.45
isLinearMethod · 0.45

Tested by

no test coverage detected