from caffe2.python import core, workspace from caffe2.proto import caffe2_pb2 from caffe2.python.test_util import TestCase import unittest core.GlobalInit(["caffe2", "--caffe2_cpu_numa_enabled=1"]) def build_test_net(net_name): net = core.Net(net_name) net.Proto().type = "async_scheduling" numa_device_option = caffe2_pb2.DeviceOption() numa_device_option.device_type = caffe2_pb2.CPU numa_device_option.numa_node_id = 0 net.ConstantFill([], "output_blob_0", shape=[1], value=3.14, device_option=numa_device_option) numa_device_option.numa_node_id = 1 net.ConstantFill([], "output_blob_1", shape=[1], value=3.14, device_option=numa_device_option) gpu_device_option = caffe2_pb2.DeviceOption() gpu_device_option.device_type = caffe2_pb2.CUDA gpu_device_option.device_id = 0 net.CopyCPUToGPU("output_blob_0", "output_blob_0_gpu", device_option=gpu_device_option) net.CopyCPUToGPU("output_blob_1", "output_blob_1_gpu", device_option=gpu_device_option) return net @unittest.skipIf(not workspace.IsNUMAEnabled(), "NUMA is not enabled") @unittest.skipIf(workspace.GetNumNUMANodes() < 2, "Not enough NUMA nodes") @unittest.skipIf(not workspace.has_gpu_support, "No GPU support") class NUMATest(TestCase): def test_numa(self): net = build_test_net("test_numa") workspace.RunNetOnce(net) self.assertEqual(workspace.GetBlobNUMANode("output_blob_0"), 0) self.assertEqual(workspace.GetBlobNUMANode("output_blob_1"), 1) if __name__ == '__main__': unittest.main()