MCPcopy Create free account
hub / github.com/davisking/dlib / transpose

Function transpose

dlib/cuda/cpu_dlib.cpp:3182–3220  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3180 // ------------------------------------------------------------------------------------
3181
3182 void transpose(
3183 bool add,
3184 tensor& dest,
3185 const tensor& src
3186 )
3187 {
3188 DLIB_CASSERT(dest.num_samples() == src.num_samples() &&
3189 dest.k() == src.k() &&
3190 dest.nr() == src.nc() &&
3191 dest.nc() == src.nr(),
3192 "Incompatible tensor dimensions.");
3193
3194 const float* src_data = src.host();
3195 float* dest_data = dest.host();
3196
3197 const long num_samples = src.num_samples();
3198 const long k_dim = src.k();
3199 const long src_nr = src.nr();
3200 const long src_nc = src.nc();
3201 const long dest_nr = dest.nr();
3202 const long dest_nc = dest.nc();
3203
3204 parallel_for(0, num_samples * k_dim, [&](long i) {
3205 const long n = i / k_dim;
3206 const long k = i % k_dim;
3207 const long src_nk_offset = (n * src.k() + k) * src_nr;
3208 const long dest_nk_offset = (n * dest.k() + k) * dest_nr;
3209
3210 for (long r = 0; r < src_nr; ++r) {
3211 for (long c = 0; c < src_nc; ++c) {
3212 const long src_idx = (src_nk_offset + r) * src_nc + c;
3213 const long dest_idx = (dest_nk_offset + c) * dest_nc + r;
3214
3215 if (add) dest_data[dest_idx] += src_data[src_idx];
3216 else dest_data[dest_idx] = src_data[src_idx];
3217 }
3218 }
3219 });
3220 }
3221
3222 // ------------------------------------------------------------------------------------
3223

Callers 3

test_transposeFunction · 0.50
forwardMethod · 0.50
backwardMethod · 0.50

Calls 6

parallel_forFunction · 0.85
num_samplesMethod · 0.45
kMethod · 0.45
nrMethod · 0.45
ncMethod · 0.45
hostMethod · 0.45

Tested by 1

test_transposeFunction · 0.40