From 70d413fbf12aa7f77426424fac34fd19f8350545 Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 2 Jul 2024 12:52:39 -0700 Subject: [PATCH 1/8] initial commit for machine view adjacent modules --- lib/pcg/include/pcg/device_id.h | 2 +- lib/pcg/include/pcg/machine_view.h | 18 +++-- lib/pcg/include/pcg/strided_rectangle.h | 5 +- lib/pcg/src/pcg/machine_view.cc | 84 +++++++++++++++++++--- lib/pcg/src/pcg/strided_rectangle_side.cc | 5 +- lib/pcg/src/strided_rectangle.cc | 16 +++-- lib/pcg/test/src/test_machine_view.cc | 11 +++ lib/pcg/test/src/test_strided_rectangle.cc | 27 +++++++ 8 files changed, 142 insertions(+), 26 deletions(-) create mode 100644 lib/pcg/test/src/test_machine_view.cc create mode 100644 lib/pcg/test/src/test_strided_rectangle.cc diff --git a/lib/pcg/include/pcg/device_id.h b/lib/pcg/include/pcg/device_id.h index be92be7081..1157a2932a 100644 --- a/lib/pcg/include/pcg/device_id.h +++ b/lib/pcg/include/pcg/device_id.h @@ -10,7 +10,7 @@ namespace FlexFlow { device_id_t operator+(device_id_t, size_t); -DeviceType get_device_type(device_id_t); +DeviceType get_device_type(device_id_t const &device_id); gpu_id_t unwrap_gpu(device_id_t); cpu_id_t unwrap_cpu(device_id_t); diff --git a/lib/pcg/include/pcg/machine_view.h b/lib/pcg/include/pcg/machine_view.h index 625b128d35..cff541e6c8 100644 --- a/lib/pcg/include/pcg/machine_view.h +++ b/lib/pcg/include/pcg/machine_view.h @@ -8,24 +8,28 @@ #include "pcg/machine_view.dtg.h" #include "pcg/num_points_t.dtg.h" #include "pcg/side_size_t.dtg.h" +#include "pcg/device_id.h" #include #include namespace FlexFlow { std::vector device_ids(MachineView const &); -std::size_t num_dims(MachineView const &); +size_t num_dims(MachineView const &); std::size_t num_devices(MachineView const &); DeviceType get_device_type(MachineView const &); MachineView make_1d_machine_view(gpu_id_t start, gpu_id_t stop, int stride = 1); MachineView make_1d_machine_view(cpu_id_t start, cpu_id_t stop, int stride = 1); -MachineView make_1d_machine_view(device_id_t start, - num_points_t num_points, - int stride = 1); -MachineView make_1d_machine_view(device_id_t start, - side_size_t interval_size, - int stride = 1); +MachineView make_1d_machine_view(device_id_t start, device_id_t stop, int stride = 1); + +MachineView make_1d_machine_view(gpu_id_t start, num_points_t num_points, int stride = 1); +MachineView make_1d_machine_view(cpu_id_t start, num_points_t num_points, int stride = 1); +MachineView make_1d_machine_view(device_id_t start, num_points_t num_points, int stride = 1); + +MachineView make_1d_machine_view(gpu_id_t start, side_size_t interval_size, int stride = 1); +MachineView make_1d_machine_view(cpu_id_t start, side_size_t interval_size, int stride = 1); +MachineView make_1d_machine_view(device_id_t start, side_size_t interval_size, int stride = 1); MachineView make_1d_machine_view(device_id_t start, size_t interval_size); diff --git a/lib/pcg/include/pcg/strided_rectangle.h b/lib/pcg/include/pcg/strided_rectangle.h index 24ae51ac41..9c3b8eeda9 100644 --- a/lib/pcg/include/pcg/strided_rectangle.h +++ b/lib/pcg/include/pcg/strided_rectangle.h @@ -8,8 +8,9 @@ namespace FlexFlow { size_t get_num_dims(StridedRectangle const &); -StridedRectangleSide get_side_at_idx(StridedRectangle const &, - ff_dim_t const &); +StridedRectangleSide get_side_at_idx(StridedRectangle const &rect, + ff_dim_t const &idx); +num_points_t get_num_points(StridedRectangle const &rect); } // namespace FlexFlow diff --git a/lib/pcg/src/pcg/machine_view.cc b/lib/pcg/src/pcg/machine_view.cc index 00bf1296fe..049ceb750e 100644 --- a/lib/pcg/src/pcg/machine_view.cc +++ b/lib/pcg/src/pcg/machine_view.cc @@ -1,6 +1,8 @@ #include "pcg/machine_view.h" #include "pcg/strided_rectangle.dtg.h" #include "pcg/strided_rectangle_side.h" +#include "pcg/strided_rectangle.h" +#include "pcg/device_id.h" namespace FlexFlow { @@ -8,18 +10,23 @@ std::vector device_ids(MachineView const &) { NOT_IMPLEMENTED(); } -std::size_t num_dims(MachineView const &) { - NOT_IMPLEMENTED(); -} +std::size_t num_dims(MachineView const &mv) { + return get_num_dims(mv.rect); -std::size_t num_devices(MachineView const &) { - NOT_IMPLEMENTED(); } -DeviceType get_device_type(MachineView const &) { - NOT_IMPLEMENTED(); +// std::size_t num_devices(MachineView const &mv) { +// // return get_num_points(mv.rect); +// } + +DeviceType get_device_type(MachineView const &mv) { + return get_device_type(mv.start); } + + + + static StridedRectangle make_1d_rect(int start, int stop, int stride) { assert(stop > start); assert(stride > 0); @@ -40,18 +47,75 @@ MachineView make_1d_machine_view(cpu_id_t start, cpu_id_t stop, int stride) { return MachineView{device_id_t{start}, rect}; } -MachineView make_1d_machine_view(device_id_t start, +MachineView make_1d_machine_view(device_id_t start, device_id_t stop, int stride) { + assert(get_device_type(start) == get_device_type(stop)); + if (get_device_type(start) == DeviceType::CPU){ + return make_1d_machine_view(unwrap_cpu(start), unwrap_cpu(stop), stride); + } + assert(get_device_type(start) == DeviceType::GPU); + return make_1d_machine_view(unwrap_gpu(start), unwrap_gpu(stop), stride); +} + + + + + +static StridedRectangle make_1d_rect(int start, num_points_t num_points, int stride) { + return make_1d_rect(start, start+num_points.unwrapped*stride, stride); +} + +MachineView make_1d_machine_view(cpu_id_t start, num_points_t num_points, int stride) { - NOT_IMPLEMENTED(); + StridedRectangle rect = make_1d_rect(start.cpu_index, num_points, stride); + return MachineView{device_id_t{start}, rect}; } +MachineView make_1d_machine_view(gpu_id_t start, + num_points_t num_points, + int stride) { + StridedRectangle rect = make_1d_rect(start.gpu_index, num_points, stride); + return MachineView{device_id_t{start}, rect}; +} MachineView make_1d_machine_view(device_id_t start, + num_points_t num_points, + int stride) { + if (get_device_type(start) == DeviceType::CPU){ + return make_1d_machine_view(unwrap_cpu(start), num_points, stride); + } + assert(get_device_type(start) == DeviceType::GPU); + return make_1d_machine_view(unwrap_gpu(start), num_points, stride); +} + + +static StridedRectangle make_1d_rect(int start, side_size_t interval_size, int stride) { + return make_1d_rect(start, start+interval_size.unwrapped, stride); +} + +MachineView make_1d_machine_view(cpu_id_t start, side_size_t interval_size, int stride) { - NOT_IMPLEMENTED(); + StridedRectangle rect = make_1d_rect(start.cpu_index, interval_size, stride); + return MachineView{device_id_t{start}, rect}; +} + +MachineView make_1d_machine_view(gpu_id_t start, + side_size_t interval_size, + int stride) { + StridedRectangle rect = make_1d_rect(start.gpu_index, interval_size, stride); + return MachineView{device_id_t{start}, rect}; } +MachineView make_1d_machine_view(device_id_t start, + side_size_t interval_size, + int stride) { + + if (get_device_type(start) == DeviceType::CPU){ + return make_1d_machine_view(unwrap_cpu(start), interval_size, stride); + } + assert(get_device_type(start) == DeviceType::GPU); + return make_1d_machine_view(unwrap_gpu(start), interval_size, stride); +} MachineView make_1d_machine_view(device_id_t start, size_t interval_size) { NOT_IMPLEMENTED(); } diff --git a/lib/pcg/src/pcg/strided_rectangle_side.cc b/lib/pcg/src/pcg/strided_rectangle_side.cc index 5e7274141d..56a41fd93d 100644 --- a/lib/pcg/src/pcg/strided_rectangle_side.cc +++ b/lib/pcg/src/pcg/strided_rectangle_side.cc @@ -3,9 +3,10 @@ namespace FlexFlow { -StridedRectangleSide strided_side_from_size_and_stride(side_size_t, +StridedRectangleSide strided_side_from_size_and_stride(side_size_t side_size, int stride) { - NOT_IMPLEMENTED(); + assert((side_size.unwrapped % stride) == 0); + return StridedRectangleSide{num_points_t{side_size.unwrapped / stride}, stride}; } side_size_t get_side_size(StridedRectangleSide const &s) { diff --git a/lib/pcg/src/strided_rectangle.cc b/lib/pcg/src/strided_rectangle.cc index 9c8ff69b42..a33eedbc2d 100644 --- a/lib/pcg/src/strided_rectangle.cc +++ b/lib/pcg/src/strided_rectangle.cc @@ -15,12 +15,20 @@ namespace FlexFlow { /* return idx; */ /* } */ -size_t get_num_dims(StridedRectangle const &) { - NOT_IMPLEMENTED(); +size_t get_num_dims(StridedRectangle const &rect) { + return rect.sides.size(); } -size_t get_side_at_idx(StridedRectangle const &) { - NOT_IMPLEMENTED(); +num_points_t get_num_points(StridedRectangle const &rect) { + int num = 1; + for (const StridedRectangleSide& side : rect.sides) { + num *= side.num_points.unwrapped; + } + return num_points_t{num}; +} + +StridedRectangleSide get_side_at_idx(StridedRectangle const &rect, ff_dim_t const &idx) { + return rect.sides.at(idx); } } // namespace FlexFlow diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc new file mode 100644 index 0000000000..b18b3f1325 --- /dev/null +++ b/lib/pcg/test/src/test_machine_view.cc @@ -0,0 +1,11 @@ +#include "doctest/doctest.h" +#include "pcg/machine_view.h" + +TEST_SUITE(FF_TEST_SUITE) { + TEST_CASE("StridedRectangleSide") { + } + + TEST_CASE("StridedRectangle") { + + } +} diff --git a/lib/pcg/test/src/test_strided_rectangle.cc b/lib/pcg/test/src/test_strided_rectangle.cc new file mode 100644 index 0000000000..2c50a5fd24 --- /dev/null +++ b/lib/pcg/test/src/test_strided_rectangle.cc @@ -0,0 +1,27 @@ +#include "doctest/doctest.h" +#include "pcg/strided_rectangle.h" +#include "pcg/strided_rectangle_side.h" + +TEST_SUITE(FF_TEST_SUITE) { + TEST_CASE("StridedRectangleSide") { + StridedRectangleSide side{num_points_t{7}, 5}; + + CHECK(get_side_size(side) == side_size_t{7*5}); + StridedRectangleSide result = strided_side_from_size_and_stride(side_size_t{7*5}, 5); + CHECK(result == side); + } + + TEST_CASE("StridedRectangle") { + + StridedRectangleSide s0{num_points_t{7}, 5}; + StridedRectangleSide s1{num_points_t{10}, 2}; + StridedRectangleSide s2{num_points_t{8}, 1}; + + StridedRectangle rect{{s0, s1, s2}}; + + CHECK(get_num_dims(rect) == 3); + CHECK(get_side_at_idx(rect, ff_dim_t{0}) == s0); + CHECK(get_side_at_idx(rect, ff_dim_t{1}) == s1); + CHECK(get_side_at_idx(rect, ff_dim_t{2}) == s2); + } +} From d36c34bc9f6cfa8e4307caa88e9f6e3043caed1f Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 2 Jul 2024 13:01:10 -0700 Subject: [PATCH 2/8] Formatting --- lib/pcg/include/pcg/machine_view.h | 33 +++++++++++----- lib/pcg/src/pcg/machine_view.cc | 46 +++++++++------------- lib/pcg/src/pcg/strided_rectangle_side.cc | 3 +- lib/pcg/src/strided_rectangle.cc | 5 ++- lib/pcg/test/src/test_machine_view.cc | 7 +--- lib/pcg/test/src/test_strided_rectangle.cc | 7 ++-- 6 files changed, 52 insertions(+), 49 deletions(-) diff --git a/lib/pcg/include/pcg/machine_view.h b/lib/pcg/include/pcg/machine_view.h index cff541e6c8..56abf5aa20 100644 --- a/lib/pcg/include/pcg/machine_view.h +++ b/lib/pcg/include/pcg/machine_view.h @@ -2,13 +2,13 @@ #define _FLEXFLOW_PCG_INCLUDE_PCG_MACHINE_VIEW_H #include "pcg/cpu_id_t.dtg.h" +#include "pcg/device_id.h" #include "pcg/device_id_t.dtg.h" #include "pcg/device_type.dtg.h" #include "pcg/gpu_id_t.dtg.h" #include "pcg/machine_view.dtg.h" #include "pcg/num_points_t.dtg.h" #include "pcg/side_size_t.dtg.h" -#include "pcg/device_id.h" #include #include @@ -21,15 +21,28 @@ DeviceType get_device_type(MachineView const &); MachineView make_1d_machine_view(gpu_id_t start, gpu_id_t stop, int stride = 1); MachineView make_1d_machine_view(cpu_id_t start, cpu_id_t stop, int stride = 1); -MachineView make_1d_machine_view(device_id_t start, device_id_t stop, int stride = 1); - -MachineView make_1d_machine_view(gpu_id_t start, num_points_t num_points, int stride = 1); -MachineView make_1d_machine_view(cpu_id_t start, num_points_t num_points, int stride = 1); -MachineView make_1d_machine_view(device_id_t start, num_points_t num_points, int stride = 1); - -MachineView make_1d_machine_view(gpu_id_t start, side_size_t interval_size, int stride = 1); -MachineView make_1d_machine_view(cpu_id_t start, side_size_t interval_size, int stride = 1); -MachineView make_1d_machine_view(device_id_t start, side_size_t interval_size, int stride = 1); +MachineView + make_1d_machine_view(device_id_t start, device_id_t stop, int stride = 1); + +MachineView make_1d_machine_view(gpu_id_t start, + num_points_t num_points, + int stride = 1); +MachineView make_1d_machine_view(cpu_id_t start, + num_points_t num_points, + int stride = 1); +MachineView make_1d_machine_view(device_id_t start, + num_points_t num_points, + int stride = 1); + +MachineView make_1d_machine_view(gpu_id_t start, + side_size_t interval_size, + int stride = 1); +MachineView make_1d_machine_view(cpu_id_t start, + side_size_t interval_size, + int stride = 1); +MachineView make_1d_machine_view(device_id_t start, + side_size_t interval_size, + int stride = 1); MachineView make_1d_machine_view(device_id_t start, size_t interval_size); diff --git a/lib/pcg/src/pcg/machine_view.cc b/lib/pcg/src/pcg/machine_view.cc index 049ceb750e..8ba92b378a 100644 --- a/lib/pcg/src/pcg/machine_view.cc +++ b/lib/pcg/src/pcg/machine_view.cc @@ -1,8 +1,8 @@ #include "pcg/machine_view.h" +#include "pcg/device_id.h" #include "pcg/strided_rectangle.dtg.h" -#include "pcg/strided_rectangle_side.h" #include "pcg/strided_rectangle.h" -#include "pcg/device_id.h" +#include "pcg/strided_rectangle_side.h" namespace FlexFlow { @@ -12,7 +12,6 @@ std::vector device_ids(MachineView const &) { std::size_t num_dims(MachineView const &mv) { return get_num_dims(mv.rect); - } // std::size_t num_devices(MachineView const &mv) { @@ -23,10 +22,6 @@ DeviceType get_device_type(MachineView const &mv) { return get_device_type(mv.start); } - - - - static StridedRectangle make_1d_rect(int start, int stop, int stride) { assert(stop > start); assert(stride > 0); @@ -47,49 +42,45 @@ MachineView make_1d_machine_view(cpu_id_t start, cpu_id_t stop, int stride) { return MachineView{device_id_t{start}, rect}; } -MachineView make_1d_machine_view(device_id_t start, device_id_t stop, int stride) { +MachineView + make_1d_machine_view(device_id_t start, device_id_t stop, int stride) { assert(get_device_type(start) == get_device_type(stop)); - if (get_device_type(start) == DeviceType::CPU){ + if (get_device_type(start) == DeviceType::CPU) { return make_1d_machine_view(unwrap_cpu(start), unwrap_cpu(stop), stride); } assert(get_device_type(start) == DeviceType::GPU); return make_1d_machine_view(unwrap_gpu(start), unwrap_gpu(stop), stride); } - - - - -static StridedRectangle make_1d_rect(int start, num_points_t num_points, int stride) { - return make_1d_rect(start, start+num_points.unwrapped*stride, stride); +static StridedRectangle + make_1d_rect(int start, num_points_t num_points, int stride) { + return make_1d_rect(start, start + num_points.unwrapped * stride, stride); } -MachineView make_1d_machine_view(cpu_id_t start, - num_points_t num_points, - int stride) { +MachineView + make_1d_machine_view(cpu_id_t start, num_points_t num_points, int stride) { StridedRectangle rect = make_1d_rect(start.cpu_index, num_points, stride); return MachineView{device_id_t{start}, rect}; } -MachineView make_1d_machine_view(gpu_id_t start, - num_points_t num_points, - int stride) { +MachineView + make_1d_machine_view(gpu_id_t start, num_points_t num_points, int stride) { StridedRectangle rect = make_1d_rect(start.gpu_index, num_points, stride); return MachineView{device_id_t{start}, rect}; } MachineView make_1d_machine_view(device_id_t start, num_points_t num_points, int stride) { - if (get_device_type(start) == DeviceType::CPU){ + if (get_device_type(start) == DeviceType::CPU) { return make_1d_machine_view(unwrap_cpu(start), num_points, stride); } assert(get_device_type(start) == DeviceType::GPU); return make_1d_machine_view(unwrap_gpu(start), num_points, stride); } - -static StridedRectangle make_1d_rect(int start, side_size_t interval_size, int stride) { - return make_1d_rect(start, start+interval_size.unwrapped, stride); +static StridedRectangle + make_1d_rect(int start, side_size_t interval_size, int stride) { + return make_1d_rect(start, start + interval_size.unwrapped, stride); } MachineView make_1d_machine_view(cpu_id_t start, @@ -108,13 +99,12 @@ MachineView make_1d_machine_view(gpu_id_t start, MachineView make_1d_machine_view(device_id_t start, side_size_t interval_size, int stride) { - - if (get_device_type(start) == DeviceType::CPU){ + + if (get_device_type(start) == DeviceType::CPU) { return make_1d_machine_view(unwrap_cpu(start), interval_size, stride); } assert(get_device_type(start) == DeviceType::GPU); return make_1d_machine_view(unwrap_gpu(start), interval_size, stride); - } MachineView make_1d_machine_view(device_id_t start, size_t interval_size) { NOT_IMPLEMENTED(); diff --git a/lib/pcg/src/pcg/strided_rectangle_side.cc b/lib/pcg/src/pcg/strided_rectangle_side.cc index 56a41fd93d..e6caf4cb86 100644 --- a/lib/pcg/src/pcg/strided_rectangle_side.cc +++ b/lib/pcg/src/pcg/strided_rectangle_side.cc @@ -6,7 +6,8 @@ namespace FlexFlow { StridedRectangleSide strided_side_from_size_and_stride(side_size_t side_size, int stride) { assert((side_size.unwrapped % stride) == 0); - return StridedRectangleSide{num_points_t{side_size.unwrapped / stride}, stride}; + return StridedRectangleSide{num_points_t{side_size.unwrapped / stride}, + stride}; } side_size_t get_side_size(StridedRectangleSide const &s) { diff --git a/lib/pcg/src/strided_rectangle.cc b/lib/pcg/src/strided_rectangle.cc index a33eedbc2d..e23af5323d 100644 --- a/lib/pcg/src/strided_rectangle.cc +++ b/lib/pcg/src/strided_rectangle.cc @@ -21,13 +21,14 @@ size_t get_num_dims(StridedRectangle const &rect) { num_points_t get_num_points(StridedRectangle const &rect) { int num = 1; - for (const StridedRectangleSide& side : rect.sides) { + for (StridedRectangleSide const &side : rect.sides) { num *= side.num_points.unwrapped; } return num_points_t{num}; } -StridedRectangleSide get_side_at_idx(StridedRectangle const &rect, ff_dim_t const &idx) { +StridedRectangleSide get_side_at_idx(StridedRectangle const &rect, + ff_dim_t const &idx) { return rect.sides.at(idx); } diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index b18b3f1325..667ecc538d 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -2,10 +2,7 @@ #include "pcg/machine_view.h" TEST_SUITE(FF_TEST_SUITE) { - TEST_CASE("StridedRectangleSide") { - } + TEST_CASE("StridedRectangleSide") {} - TEST_CASE("StridedRectangle") { - - } + TEST_CASE("StridedRectangle") {} } diff --git a/lib/pcg/test/src/test_strided_rectangle.cc b/lib/pcg/test/src/test_strided_rectangle.cc index 2c50a5fd24..41f587edeb 100644 --- a/lib/pcg/test/src/test_strided_rectangle.cc +++ b/lib/pcg/test/src/test_strided_rectangle.cc @@ -6,8 +6,9 @@ TEST_SUITE(FF_TEST_SUITE) { TEST_CASE("StridedRectangleSide") { StridedRectangleSide side{num_points_t{7}, 5}; - CHECK(get_side_size(side) == side_size_t{7*5}); - StridedRectangleSide result = strided_side_from_size_and_stride(side_size_t{7*5}, 5); + CHECK(get_side_size(side) == side_size_t{7 * 5}); + StridedRectangleSide result = + strided_side_from_size_and_stride(side_size_t{7 * 5}, 5); CHECK(result == side); } @@ -16,7 +17,7 @@ TEST_SUITE(FF_TEST_SUITE) { StridedRectangleSide s0{num_points_t{7}, 5}; StridedRectangleSide s1{num_points_t{10}, 2}; StridedRectangleSide s2{num_points_t{8}, 1}; - + StridedRectangle rect{{s0, s1, s2}}; CHECK(get_num_dims(rect) == 3); From 95b24c8ac6e4031c358c52b0408e8e0bcd9211e8 Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 2 Jul 2024 13:34:22 -0700 Subject: [PATCH 3/8] Tests for new machine_view.cc functions --- lib/pcg/src/pcg/machine_view.cc | 7 +++--- lib/pcg/test/src/test_machine_view.cc | 31 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/lib/pcg/src/pcg/machine_view.cc b/lib/pcg/src/pcg/machine_view.cc index 8ba92b378a..8a33e4b946 100644 --- a/lib/pcg/src/pcg/machine_view.cc +++ b/lib/pcg/src/pcg/machine_view.cc @@ -14,9 +14,9 @@ std::size_t num_dims(MachineView const &mv) { return get_num_dims(mv.rect); } -// std::size_t num_devices(MachineView const &mv) { -// // return get_num_points(mv.rect); -// } +size_t num_devices(MachineView const &mv) { + return get_num_points(mv.rect).unwrapped; +} DeviceType get_device_type(MachineView const &mv) { return get_device_type(mv.start); @@ -68,6 +68,7 @@ MachineView StridedRectangle rect = make_1d_rect(start.gpu_index, num_points, stride); return MachineView{device_id_t{start}, rect}; } + MachineView make_1d_machine_view(device_id_t start, num_points_t num_points, int stride) { diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index 667ecc538d..e84b55a55b 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -1,8 +1,35 @@ #include "doctest/doctest.h" #include "pcg/machine_view.h" +#include "pcg/strided_rectangle.h" +#include "pcg/strided_rectangle_side.h" TEST_SUITE(FF_TEST_SUITE) { - TEST_CASE("StridedRectangleSide") {} + TEST_CASE("MachineView general util functions") { + StridedRectangle rect{{ + StridedRectangleSide{num_points_t{7}, 5}, + StridedRectangleSide{num_points_t{10}, 2}} + }; + gpu_id_t start(1); + MachineView mv{device_id_t{start}, rect}; + CHECK(num_dims(mv) == 2); + CHECK(num_devices(mv) == 7*10); + CHECK(get_device_type(mv) == DeviceType::GPU); + } - TEST_CASE("StridedRectangle") {} + TEST_CASE("MachineView make_1d_machine_view") { + StridedRectangle rect{{StridedRectangleSide{num_points_t{7}, 5}}}; + gpu_id_t start_gpu(1); + cpu_id_t start_cpu(3); + MachineView gpu_mv{device_id_t{start_gpu}, rect}; + MachineView cpu_mv{device_id_t{start_cpu}, rect}; + + CHECK(make_1d_machine_view(start_gpu, gpu_id_t(1+7*5), 5) == gpu_mv); + CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); + CHECK(make_1d_machine_view(start_gpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5) == gpu_mv); + + CHECK(make_1d_machine_view(start_cpu, cpu_id_t(3+7*5), 5) == cpu_mv); + CHECK(make_1d_machine_view(start_cpu, num_points_t{7}, 5) == cpu_mv); + CHECK(make_1d_machine_view(start_cpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5) == cpu_mv); + + } } From 0678c58088a4e6041e0fe5a2f6f5f203c87e49ee Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 2 Jul 2024 13:38:40 -0700 Subject: [PATCH 4/8] formatting --- lib/pcg/test/src/test_machine_view.cc | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index e84b55a55b..eadf7a763f 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -5,14 +5,12 @@ TEST_SUITE(FF_TEST_SUITE) { TEST_CASE("MachineView general util functions") { - StridedRectangle rect{{ - StridedRectangleSide{num_points_t{7}, 5}, - StridedRectangleSide{num_points_t{10}, 2}} - }; + StridedRectangle rect{{StridedRectangleSide{num_points_t{7}, 5}, + StridedRectangleSide{num_points_t{10}, 2}}}; gpu_id_t start(1); MachineView mv{device_id_t{start}, rect}; CHECK(num_dims(mv) == 2); - CHECK(num_devices(mv) == 7*10); + CHECK(num_devices(mv) == 7 * 10); CHECK(get_device_type(mv) == DeviceType::GPU); } @@ -23,13 +21,16 @@ TEST_SUITE(FF_TEST_SUITE) { MachineView gpu_mv{device_id_t{start_gpu}, rect}; MachineView cpu_mv{device_id_t{start_cpu}, rect}; - CHECK(make_1d_machine_view(start_gpu, gpu_id_t(1+7*5), 5) == gpu_mv); + CHECK(make_1d_machine_view(start_gpu, gpu_id_t(1 + 7 * 5), 5) == gpu_mv); CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); - CHECK(make_1d_machine_view(start_gpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5) == gpu_mv); + CHECK(make_1d_machine_view(start_gpu, + get_side_size(rect.sides.at(ff_dim_t{0})), + 5) == gpu_mv); - CHECK(make_1d_machine_view(start_cpu, cpu_id_t(3+7*5), 5) == cpu_mv); + CHECK(make_1d_machine_view(start_cpu, cpu_id_t(3 + 7 * 5), 5) == cpu_mv); CHECK(make_1d_machine_view(start_cpu, num_points_t{7}, 5) == cpu_mv); - CHECK(make_1d_machine_view(start_cpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5) == cpu_mv); - + CHECK(make_1d_machine_view(start_cpu, + get_side_size(rect.sides.at(ff_dim_t{0})), + 5) == cpu_mv); } } From 6b0d511bef002ac94f0be1c721f72dc2db5a8df1 Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 2 Jul 2024 14:51:54 -0700 Subject: [PATCH 5/8] Minor Test correction --- lib/pcg/test/src/test_machine_view.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index eadf7a763f..520ea1dd88 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -16,18 +16,21 @@ TEST_SUITE(FF_TEST_SUITE) { TEST_CASE("MachineView make_1d_machine_view") { StridedRectangle rect{{StridedRectangleSide{num_points_t{7}, 5}}}; - gpu_id_t start_gpu(1); - cpu_id_t start_cpu(3); - MachineView gpu_mv{device_id_t{start_gpu}, rect}; - MachineView cpu_mv{device_id_t{start_cpu}, rect}; + device_id_t start_gpu{gpu_id_t{1}}; + device_id_t start_cpu{cpu_id_t{3}}; - CHECK(make_1d_machine_view(start_gpu, gpu_id_t(1 + 7 * 5), 5) == gpu_mv); + + MachineView gpu_mv{start_gpu, rect}; + MachineView cpu_mv{start_cpu, rect}; + + + CHECK(make_1d_machine_view(start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5) == gpu_mv); CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); CHECK(make_1d_machine_view(start_gpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5) == gpu_mv); - CHECK(make_1d_machine_view(start_cpu, cpu_id_t(3 + 7 * 5), 5) == cpu_mv); + CHECK(make_1d_machine_view(start_cpu, device_id_t{cpu_id_t(3 + 7 * 5)}, 5) == cpu_mv); CHECK(make_1d_machine_view(start_cpu, num_points_t{7}, 5) == cpu_mv); CHECK(make_1d_machine_view(start_cpu, get_side_size(rect.sides.at(ff_dim_t{0})), From 4928c9e52dd83db9b762259e102acc3107bfa521 Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 2 Jul 2024 14:54:53 -0700 Subject: [PATCH 6/8] formatting --- lib/pcg/test/src/test_machine_view.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index 520ea1dd88..dfdb75f88e 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -19,18 +19,18 @@ TEST_SUITE(FF_TEST_SUITE) { device_id_t start_gpu{gpu_id_t{1}}; device_id_t start_cpu{cpu_id_t{3}}; - MachineView gpu_mv{start_gpu, rect}; MachineView cpu_mv{start_cpu, rect}; - - - CHECK(make_1d_machine_view(start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5) == gpu_mv); + + CHECK(make_1d_machine_view( + start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5) == gpu_mv); CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); CHECK(make_1d_machine_view(start_gpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5) == gpu_mv); - CHECK(make_1d_machine_view(start_cpu, device_id_t{cpu_id_t(3 + 7 * 5)}, 5) == cpu_mv); + CHECK(make_1d_machine_view( + start_cpu, device_id_t{cpu_id_t(3 + 7 * 5)}, 5) == cpu_mv); CHECK(make_1d_machine_view(start_cpu, num_points_t{7}, 5) == cpu_mv); CHECK(make_1d_machine_view(start_cpu, get_side_size(rect.sides.at(ff_dim_t{0})), From c84d80235b384ad09954cd0b5c70a6ce75563db0 Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Tue, 16 Jul 2024 19:36:09 -0700 Subject: [PATCH 7/8] PR fixes --- lib/pcg/src/pcg/machine_view.cc | 10 +++-- lib/pcg/src/strided_rectangle.cc | 10 ++--- lib/pcg/test/src/test_machine_view.cc | 51 +++++++++++++++------- lib/pcg/test/src/test_strided_rectangle.cc | 25 +++++++---- 4 files changed, 63 insertions(+), 33 deletions(-) diff --git a/lib/pcg/src/pcg/machine_view.cc b/lib/pcg/src/pcg/machine_view.cc index 8a33e4b946..c09ab1a3c9 100644 --- a/lib/pcg/src/pcg/machine_view.cc +++ b/lib/pcg/src/pcg/machine_view.cc @@ -74,9 +74,10 @@ MachineView make_1d_machine_view(device_id_t start, int stride) { if (get_device_type(start) == DeviceType::CPU) { return make_1d_machine_view(unwrap_cpu(start), num_points, stride); + } else { + assert(get_device_type(start) == DeviceType::GPU); + return make_1d_machine_view(unwrap_gpu(start), num_points, stride); } - assert(get_device_type(start) == DeviceType::GPU); - return make_1d_machine_view(unwrap_gpu(start), num_points, stride); } static StridedRectangle @@ -103,9 +104,10 @@ MachineView make_1d_machine_view(device_id_t start, if (get_device_type(start) == DeviceType::CPU) { return make_1d_machine_view(unwrap_cpu(start), interval_size, stride); + } else { + assert(get_device_type(start) == DeviceType::GPU); + return make_1d_machine_view(unwrap_gpu(start), interval_size, stride); } - assert(get_device_type(start) == DeviceType::GPU); - return make_1d_machine_view(unwrap_gpu(start), interval_size, stride); } MachineView make_1d_machine_view(device_id_t start, size_t interval_size) { NOT_IMPLEMENTED(); diff --git a/lib/pcg/src/strided_rectangle.cc b/lib/pcg/src/strided_rectangle.cc index e23af5323d..3fe9dc85f3 100644 --- a/lib/pcg/src/strided_rectangle.cc +++ b/lib/pcg/src/strided_rectangle.cc @@ -20,11 +20,11 @@ size_t get_num_dims(StridedRectangle const &rect) { } num_points_t get_num_points(StridedRectangle const &rect) { - int num = 1; - for (StridedRectangleSide const &side : rect.sides) { - num *= side.num_points.unwrapped; - } - return num_points_t{num}; + std::vector sides(rect.sides.begin(), rect.sides.end()); + return num_points_t{ + product(transform(sides, [](StridedRectangleSide const &side) { + return side.num_points.unwrapped; + }))}; } StridedRectangleSide get_side_at_idx(StridedRectangle const &rect, diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index dfdb75f88e..2e0cf93391 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -14,26 +14,45 @@ TEST_SUITE(FF_TEST_SUITE) { CHECK(get_device_type(mv) == DeviceType::GPU); } - TEST_CASE("MachineView make_1d_machine_view") { + TEST_CASE("MachineView make_1d_machine_view - GPU") { StridedRectangle rect{{StridedRectangleSide{num_points_t{7}, 5}}}; device_id_t start_gpu{gpu_id_t{1}}; - device_id_t start_cpu{cpu_id_t{3}}; - MachineView gpu_mv{start_gpu, rect}; - MachineView cpu_mv{start_cpu, rect}; - CHECK(make_1d_machine_view( - start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5) == gpu_mv); - CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); - CHECK(make_1d_machine_view(start_gpu, - get_side_size(rect.sides.at(ff_dim_t{0})), - 5) == gpu_mv); + SUBCASE("make_1d_machine_view(gpu_id_t start, gpu_id_t stop, int stride)") { + CHECK(make_1d_machine_view( + start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5) == gpu_mv); + } + SUBCASE("make_1d_machine_view(gpu_id_t start, num_points_t num_points, int " + "stride)") { + CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); + } + SUBCASE("make_1d_machine_view(gpu_id_t start, side_size_t interval_size, " + "int stride)") { + CHECK(make_1d_machine_view(start_gpu, + get_side_size(rect.sides.at(ff_dim_t{0})), + 5) == gpu_mv); + } + } + + TEST_CASE("MachineView make_1d_machine_view - CPU") { + StridedRectangle rect{{StridedRectangleSide{num_points_t{11}, 4}}}; + device_id_t start_cpu{cpu_id_t{2}}; + MachineView cpu_mv{start_cpu, rect}; - CHECK(make_1d_machine_view( - start_cpu, device_id_t{cpu_id_t(3 + 7 * 5)}, 5) == cpu_mv); - CHECK(make_1d_machine_view(start_cpu, num_points_t{7}, 5) == cpu_mv); - CHECK(make_1d_machine_view(start_cpu, - get_side_size(rect.sides.at(ff_dim_t{0})), - 5) == cpu_mv); + SUBCASE("make_1d_machine_view(cpu_id_t start, cpu_id_t stop, int stride)") { + CHECK(make_1d_machine_view( + start_cpu, device_id_t{cpu_id_t(2 + 11 * 4)}, 4) == cpu_mv); + } + SUBCASE("make_1d_machine_view(cpu_id_t start, num_points_t num_points, int " + "stride)") { + CHECK(make_1d_machine_view(start_cpu, num_points_t{11}, 4) == cpu_mv); + } + SUBCASE("make_1d_machine_view(cpu_id_t start, side_size_t interval_size, " + "int stride)") { + CHECK(make_1d_machine_view(start_cpu, + get_side_size(rect.sides.at(ff_dim_t{0})), + 4) == cpu_mv); + } } } diff --git a/lib/pcg/test/src/test_strided_rectangle.cc b/lib/pcg/test/src/test_strided_rectangle.cc index 41f587edeb..122f5cad8f 100644 --- a/lib/pcg/test/src/test_strided_rectangle.cc +++ b/lib/pcg/test/src/test_strided_rectangle.cc @@ -3,26 +3,35 @@ #include "pcg/strided_rectangle_side.h" TEST_SUITE(FF_TEST_SUITE) { - TEST_CASE("StridedRectangleSide") { + TEST_CASE("get_side_size(StridedRectangleSide s)") { StridedRectangleSide side{num_points_t{7}, 5}; CHECK(get_side_size(side) == side_size_t{7 * 5}); + } + TEST_CASE("Make StridedRectangleSide from size and stride") { + StridedRectangleSide side{num_points_t{10}, 3}; StridedRectangleSide result = - strided_side_from_size_and_stride(side_size_t{7 * 5}, 5); + strided_side_from_size_and_stride(side_size_t{10 * 3}, 3); CHECK(result == side); } - TEST_CASE("StridedRectangle") { + TEST_CASE("StridedRectangle - helper functions") { StridedRectangleSide s0{num_points_t{7}, 5}; StridedRectangleSide s1{num_points_t{10}, 2}; StridedRectangleSide s2{num_points_t{8}, 1}; - StridedRectangle rect{{s0, s1, s2}}; - CHECK(get_num_dims(rect) == 3); - CHECK(get_side_at_idx(rect, ff_dim_t{0}) == s0); - CHECK(get_side_at_idx(rect, ff_dim_t{1}) == s1); - CHECK(get_side_at_idx(rect, ff_dim_t{2}) == s2); + SUBCASE("number of dimensions") { + CHECK(get_num_dims(rect) == 3); + } + SUBCASE("number of points") { + CHECK(get_num_points(rect) == num_points_t{7 * 8 * 10}); + } + SUBCASE("each side is correctly stored") { + CHECK(get_side_at_idx(rect, ff_dim_t{0}) == s0); + CHECK(get_side_at_idx(rect, ff_dim_t{1}) == s1); + CHECK(get_side_at_idx(rect, ff_dim_t{2}) == s2); + } } } From 61ae1c620808b6fe047272cef5115d7e315d6218 Mon Sep 17 00:00:00 2001 From: Pietro Max Marsella Date: Wed, 17 Jul 2024 10:54:19 -0700 Subject: [PATCH 8/8] PR Fixes --- lib/pcg/src/strided_rectangle.cc | 4 +- lib/pcg/test/src/test_machine_view.cc | 46 +++++++++++++++------- lib/pcg/test/src/test_strided_rectangle.cc | 14 +++---- 3 files changed, 40 insertions(+), 24 deletions(-) diff --git a/lib/pcg/src/strided_rectangle.cc b/lib/pcg/src/strided_rectangle.cc index 3fe9dc85f3..1c61424ab9 100644 --- a/lib/pcg/src/strided_rectangle.cc +++ b/lib/pcg/src/strided_rectangle.cc @@ -1,4 +1,5 @@ #include "pcg/strided_rectangle.h" +#include "op-attrs/dim_ordered/transform.h" #include "utils/containers.h" namespace FlexFlow { @@ -20,9 +21,8 @@ size_t get_num_dims(StridedRectangle const &rect) { } num_points_t get_num_points(StridedRectangle const &rect) { - std::vector sides(rect.sides.begin(), rect.sides.end()); return num_points_t{ - product(transform(sides, [](StridedRectangleSide const &side) { + product(transform(rect.sides, [](StridedRectangleSide const &side) { return side.num_points.unwrapped; }))}; } diff --git a/lib/pcg/test/src/test_machine_view.cc b/lib/pcg/test/src/test_machine_view.cc index 2e0cf93391..92a96d5e9a 100644 --- a/lib/pcg/test/src/test_machine_view.cc +++ b/lib/pcg/test/src/test_machine_view.cc @@ -9,9 +9,15 @@ TEST_SUITE(FF_TEST_SUITE) { StridedRectangleSide{num_points_t{10}, 2}}}; gpu_id_t start(1); MachineView mv{device_id_t{start}, rect}; - CHECK(num_dims(mv) == 2); - CHECK(num_devices(mv) == 7 * 10); - CHECK(get_device_type(mv) == DeviceType::GPU); + SUBCASE("num_dims") { + CHECK(num_dims(mv) == 2); + } + SUBCASE("num_devices") { + CHECK(num_devices(mv) == 7 * 10); + } + SUBCASE("get_device_type") { + CHECK(get_device_type(mv) == DeviceType::GPU); + } } TEST_CASE("MachineView make_1d_machine_view - GPU") { @@ -20,18 +26,23 @@ TEST_SUITE(FF_TEST_SUITE) { MachineView gpu_mv{start_gpu, rect}; SUBCASE("make_1d_machine_view(gpu_id_t start, gpu_id_t stop, int stride)") { - CHECK(make_1d_machine_view( - start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5) == gpu_mv); + MachineView result = + make_1d_machine_view(start_gpu, device_id_t{gpu_id_t(1 + 7 * 5)}, 5); + MachineView correct = gpu_mv; + CHECK(result == correct); } SUBCASE("make_1d_machine_view(gpu_id_t start, num_points_t num_points, int " "stride)") { - CHECK(make_1d_machine_view(start_gpu, num_points_t{7}, 5) == gpu_mv); + MachineView result = make_1d_machine_view(start_gpu, num_points_t{7}, 5); + MachineView correct = gpu_mv; + CHECK(result == correct); } SUBCASE("make_1d_machine_view(gpu_id_t start, side_size_t interval_size, " "int stride)") { - CHECK(make_1d_machine_view(start_gpu, - get_side_size(rect.sides.at(ff_dim_t{0})), - 5) == gpu_mv); + MachineView result = make_1d_machine_view( + start_gpu, get_side_size(rect.sides.at(ff_dim_t{0})), 5); + MachineView correct = gpu_mv; + CHECK(result == correct); } } @@ -41,18 +52,23 @@ TEST_SUITE(FF_TEST_SUITE) { MachineView cpu_mv{start_cpu, rect}; SUBCASE("make_1d_machine_view(cpu_id_t start, cpu_id_t stop, int stride)") { - CHECK(make_1d_machine_view( - start_cpu, device_id_t{cpu_id_t(2 + 11 * 4)}, 4) == cpu_mv); + MachineView result = + make_1d_machine_view(start_cpu, device_id_t{cpu_id_t(2 + 11 * 4)}, 4); + MachineView correct = cpu_mv; + CHECK(result == correct); } SUBCASE("make_1d_machine_view(cpu_id_t start, num_points_t num_points, int " "stride)") { - CHECK(make_1d_machine_view(start_cpu, num_points_t{11}, 4) == cpu_mv); + MachineView result = make_1d_machine_view(start_cpu, num_points_t{11}, 4); + MachineView correct = cpu_mv; + CHECK(result == correct); } SUBCASE("make_1d_machine_view(cpu_id_t start, side_size_t interval_size, " "int stride)") { - CHECK(make_1d_machine_view(start_cpu, - get_side_size(rect.sides.at(ff_dim_t{0})), - 4) == cpu_mv); + MachineView result = make_1d_machine_view( + start_cpu, get_side_size(rect.sides.at(ff_dim_t{0})), 4); + MachineView correct = cpu_mv; + CHECK(result == correct); } } } diff --git a/lib/pcg/test/src/test_strided_rectangle.cc b/lib/pcg/test/src/test_strided_rectangle.cc index 122f5cad8f..ef342944de 100644 --- a/lib/pcg/test/src/test_strided_rectangle.cc +++ b/lib/pcg/test/src/test_strided_rectangle.cc @@ -3,16 +3,16 @@ #include "pcg/strided_rectangle_side.h" TEST_SUITE(FF_TEST_SUITE) { - TEST_CASE("get_side_size(StridedRectangleSide s)") { + TEST_CASE("get_side_size(StridedRectangleSide)") { StridedRectangleSide side{num_points_t{7}, 5}; CHECK(get_side_size(side) == side_size_t{7 * 5}); } - TEST_CASE("Make StridedRectangleSide from size and stride") { - StridedRectangleSide side{num_points_t{10}, 3}; + TEST_CASE("strided_side_from_size_and_stride") { + StridedRectangleSide correct{num_points_t{10}, 3}; StridedRectangleSide result = strided_side_from_size_and_stride(side_size_t{10 * 3}, 3); - CHECK(result == side); + CHECK(result == correct); } TEST_CASE("StridedRectangle - helper functions") { @@ -22,13 +22,13 @@ TEST_SUITE(FF_TEST_SUITE) { StridedRectangleSide s2{num_points_t{8}, 1}; StridedRectangle rect{{s0, s1, s2}}; - SUBCASE("number of dimensions") { + SUBCASE("get_num_dims") { CHECK(get_num_dims(rect) == 3); } - SUBCASE("number of points") { + SUBCASE("get_num_points") { CHECK(get_num_points(rect) == num_points_t{7 * 8 * 10}); } - SUBCASE("each side is correctly stored") { + SUBCASE("get_side_at_idx") { CHECK(get_side_at_idx(rect, ff_dim_t{0}) == s0); CHECK(get_side_at_idx(rect, ff_dim_t{1}) == s1); CHECK(get_side_at_idx(rect, ff_dim_t{2}) == s2);