| 2995 | } |
| 2996 | #ifdef DLIB_USE_CUDA |
| 2997 | void test_copy_tensor_gpu() |
| 2998 | { |
| 2999 | using namespace dlib::tt; |
| 3000 | print_spinner(); |
| 3001 | resizable_tensor dest(10, 9, 7, 15); |
| 3002 | resizable_tensor src1(10, 3, 7, 15); |
| 3003 | resizable_tensor src2(10, 3, 7, 15); |
| 3004 | resizable_tensor src3(10, 9, 7, 15); |
| 3005 | tt::tensor_rand rnd; |
| 3006 | rnd.fill_gaussian(dest); |
| 3007 | rnd.fill_gaussian(src1); |
| 3008 | rnd.fill_gaussian(src2); |
| 3009 | rnd.fill_gaussian(src3); |
| 3010 | cuda::copy_tensor(false, dest, 0, src1, 0, src1.k()); //full copy src1->dest |
| 3011 | cuda::copy_tensor(false, dest, src1.k(), src2, 0, src2.k()); //full copy src2->dest with offset of src1 |
| 3012 | cuda::copy_tensor(false, dest, src1.k() + src2.k(), src3, 3, 3); //partial copy src3 into the rest place of dest |
| 3013 | |
| 3014 | |
| 3015 | for (long i = 0; i < dest.num_samples(); ++i) |
| 3016 | { |
| 3017 | for (long k = 0; k < dest.k(); ++k) |
| 3018 | { |
| 3019 | for (long r = 0; r < dest.nr(); ++r) |
| 3020 | { |
| 3021 | for (long c = 0; c < dest.nc(); ++c) |
| 3022 | { |
| 3023 | float dest_value = tensor_read_cpu(dest, i, k, r, c); |
| 3024 | // first part is from src1 |
| 3025 | if (k < src1.k()) |
| 3026 | { |
| 3027 | float src_value = tensor_read_cpu(src1, i, k, r, c); |
| 3028 | DLIB_TEST(src_value == dest_value); |
| 3029 | } |
| 3030 | // second part is from src2 |
| 3031 | else if (k < src1.k() + src2.k()) |
| 3032 | { |
| 3033 | float src_value = tensor_read_cpu(src2, i, k - src1.k(), r, c); |
| 3034 | DLIB_TEST(src_value == dest_value); |
| 3035 | } |
| 3036 | // third part is from src3 |
| 3037 | else |
| 3038 | { |
| 3039 | float src_value = tensor_read_cpu(src3, i, k - src1.k() - src2.k() + 3, r, c); |
| 3040 | DLIB_TEST(src_value == dest_value); |
| 3041 | } |
| 3042 | } |
| 3043 | } |
| 3044 | } |
| 3045 | } |
| 3046 | } |
| 3047 | void test_copy_tensor_add_to_gpu() |
| 3048 | { |
| 3049 | using namespace dlib::tt; |
no test coverage detected