| 3099 | } |
| 3100 | } |
| 3101 | void test_copy_tensor_slice_gpu() |
| 3102 | { |
| 3103 | using namespace dlib::tt; |
| 3104 | print_spinner(); |
| 3105 | resizable_tensor dest(10, 9, 7, 15); |
| 3106 | resizable_tensor src1(10, 3, 7, 15); |
| 3107 | resizable_tensor src2(10, 3, 6, 12); |
| 3108 | resizable_tensor src3(10, 9, 7, 15); |
| 3109 | tt::tensor_rand rnd; |
| 3110 | rnd.fill_gaussian(dest); |
| 3111 | rnd.fill_gaussian(src1); |
| 3112 | rnd.fill_gaussian(src2); |
| 3113 | rnd.fill_gaussian(src3); |
| 3114 | |
| 3115 | const resizable_tensor old_dest = dest; |
| 3116 | |
| 3117 | cuda::copy_tensor(false, dest, 0, 0, 0, src1, 0, 0, 0, src1.k(), src1.nr(), src1.nc()); //full copy src1->dest |
| 3118 | cuda::copy_tensor(false, dest, src1.k(), 0, 0, src2, 0, 0, 0, src2.k(), src2.nr(), src2.nc()); //full copy src2->dest with offset of src1 |
| 3119 | cuda::copy_tensor(false, dest, src1.k() + src2.k(), 1, 1, src3, 3, 1, 1, 3, src3.nr()-2, src3.nc()-2); //partial copy src3 into the rest place of dest |
| 3120 | |
| 3121 | |
| 3122 | for (long i = 0; i < dest.num_samples(); ++i) |
| 3123 | { |
| 3124 | for (long k = 0; k < dest.k(); ++k) |
| 3125 | { |
| 3126 | for (long r = 0; r < dest.nr(); ++r) |
| 3127 | { |
| 3128 | for (long c = 0; c < dest.nc(); ++c) |
| 3129 | { |
| 3130 | float old_dest_value = tensor_read_cpu(old_dest, i, k, r, c); |
| 3131 | float dest_value = tensor_read_cpu(dest, i, k, r, c); |
| 3132 | // first part is from src1 |
| 3133 | if (k < src1.k()) |
| 3134 | { |
| 3135 | float src_value = tensor_read_cpu(src1, i, k, r, c); |
| 3136 | DLIB_TEST(src_value == dest_value); |
| 3137 | } |
| 3138 | // second part is from src2 |
| 3139 | else if (k < src1.k() + src2.k()) |
| 3140 | { |
| 3141 | if (r < src2.nr() && c < src2.nc()) |
| 3142 | { |
| 3143 | float src_value = tensor_read_cpu(src2, i, k - src1.k(), r, c); |
| 3144 | DLIB_TEST(src_value == dest_value); |
| 3145 | } |
| 3146 | else |
| 3147 | { |
| 3148 | DLIB_TEST(old_dest_value == dest_value); |
| 3149 | } |
| 3150 | } |
| 3151 | // third part is from src3 |
| 3152 | else |
| 3153 | { |
| 3154 | if (r > 0 && c > 0 && r + 1 < src3.nr() && c + 1 < src3.nc()) |
| 3155 | { |
| 3156 | float src_value = tensor_read_cpu(src3, i, k - src1.k() - src2.k() + 3, r, c); |
| 3157 | DLIB_TEST(src_value == dest_value); |
| 3158 | } |
nothing calls this directly
no test coverage detected