#include "bang/bang_runtime.h" #include "core/graph.h" #include "core/kernel.h" #include "core/runtime.h" #include "operators/unary.h" #include "test.h" namespace infini { template void testUnary(const std::function &generator, const Shape &shape) { // Runtime Runtime cpuRuntime = NativeCpuRuntimeObj::getInstance(); auto bangRuntime = make_ref(); // Build input data on CPU Tensor inputCpu = make_ref(shape, DataType::Float32, cpuRuntime); // GPU Graph bangGraph = make_ref(bangRuntime); auto inputGpu = bangGraph->cloneTensor(inputCpu); auto gpuOp = bangGraph->addOp(inputGpu, nullptr); bangGraph->dataMalloc(); inputGpu->setData(generator); bangRuntime->run(bangGraph); auto outputGpu = gpuOp->getOutput(); auto outputGpu2Cpu = outputGpu->clone(cpuRuntime); // CPU Graph cpuGraph = make_ref(cpuRuntime); auto cpuOp = cpuGraph->addOp(inputCpu, nullptr); cpuGraph->addTensor(inputCpu); cpuGraph->dataMalloc(); inputCpu->setData(generator); cpuRuntime->run(cpuGraph); auto outputCpu = cpuOp->getOutput(); // Check EXPECT_TRUE(outputCpu->equalData(outputGpu2Cpu)); } TEST(cnnl_Unary, run) { testUnary(IncrementalGenerator(), Shape{1, 2, 2, 3}); testUnary(IncrementalGenerator(), Shape{1, 2, 2, 3}); testUnary(IncrementalGenerator(), Shape{1, 2, 2, 3}); } } // namespace infini