MCPcopy Create free account
hub / github.com/docknetwork/crypto / _transpose

Function _transpose

oblivious_transfer/src/util.rs:260–301  ·  view source on GitHub ↗
(nrows: usize, ncols: usize)

Source from the content-addressed store, hash-verified

258 use std::time::Instant;
259
260 fn _transpose(nrows: usize, ncols: usize) {
261 let mut rng = StdRng::seed_from_u64(0u64);
262
263 let m = (0..nrows * ncols / 8)
264 .map(|_| u8::rand(&mut rng))
265 .collect::<Vec<u8>>();
266
267 let start = Instant::now();
268 let m1 = transpose_naive(&m, nrows, ncols);
269 let m2 = transpose_naive(&m1, ncols, nrows);
270 let end = start.elapsed();
271 assert_eq!(m, m2);
272 assert_ne!(m, m1);
273 println!(
274 "Naively, time for twice transposing {}x{} matrix {:?}",
275 nrows, ncols, end
276 );
277
278 let start = Instant::now();
279 let m3 = transpose(&m, nrows, ncols);
280 let m4 = transpose(&m3, ncols, nrows);
281 let end = start.elapsed();
282 assert_eq!(m, m4);
283 assert_ne!(m, m3);
284 assert_eq!(m1, m3);
285 println!(
286 "Using SSE, time for twice transposing {}x{} matrix {:?}",
287 nrows, ncols, end
288 );
289
290 let start = Instant::now();
291 let m5 = transpose_portable(&m, nrows, ncols);
292 let m6 = transpose_portable(&m5, ncols, nrows);
293 let end = start.elapsed();
294 assert_eq!(m, m6);
295 assert_ne!(m, m5);
296 assert_eq!(m3, m5);
297 println!(
298 "For portable, time for twice transposing {}x{} matrix {:?}",
299 nrows, ncols, end
300 );
301 }
302
303 #[test]
304 fn test_xor() {

Callers 1

test_transposeFunction · 0.85

Calls 5

randFunction · 0.85
transpose_naiveFunction · 0.85
transposeFunction · 0.85
transpose_portableFunction · 0.85
mapMethod · 0.80

Tested by 1

test_transposeFunction · 0.68