12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include "ORExpand.hpp"
- #ifdef TEST_OREXPAND
- void test_ORExpand()
- {
- size_t block_size = 48;
- uint32_t N = 16;
- uint32_t dest_specified[] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14};
- size_t dest_specified_len = sizeof(dest_specified)/sizeof(uint32_t);
- unsigned char *buf = new unsigned char[N*block_size];
- uint32_t *dest = new uint32_t[N];
- for (size_t i=0;i<dest_specified_len;++i) {
- dest[i] = dest_specified[i];
- }
- for (size_t i=dest_specified_len;i<N;++i) {
- dest[i] = 0xffffffff;
- }
- for (size_t i=0;i<N;++i) {
- for (size_t j=0;j<block_size;j+=2) {
- buf[i*block_size+j] = (unsigned char)i;
- buf[i*block_size+j+1] = (unsigned char)j/2;
- }
- }
- ORExpand<OSWAP_16X>(buf, dest, block_size, N);
- for(size_t i=0;i<N;++i) {
- printf("%2d ", i);
- if (dest[i] == 0xffffffff) {
- printf("PD ");
- } else {
- printf("%2d ", dest[i]);
- }
- for (size_t j=0;j<block_size;++j) {
- printf("%02x", buf[i*block_size+j]);
- }
- printf("\n");
- }
- delete[] buf;
- delete[] dest;
- }
- void test_ORExpand_parallel(threadid_t nthreads)
- {
- size_t block_size = 384;
- uint32_t N = 500000;
- unsigned char *buf = new unsigned char[N*block_size];
- uint32_t *dest = new uint32_t[N];
- uint32_t next_dest = 0;
- for (uint32_t i=0;i<N;++i) {
- // Randomly decide whether i is real or dummy
- bool keep = getRandomBit();
- if (keep) {
- dest[next_dest] = i;
- ++next_dest;
- }
- }
- for (uint32_t i=next_dest;i<N;++i) {
- dest[i] = 0xffffffff;
- }
- for (size_t i=0;i<N;++i) {
- for (size_t j=0;j<block_size;j+=2) {
- buf[i*block_size+j] = (unsigned char)i;
- buf[i*block_size+j+1] = (unsigned char)j/2;
- }
- }
- ORExpand_parallel<OSWAP_16X>(buf, dest, block_size, N, nthreads);
- for(uint32_t i=0;i<N;++i) {
- assert(dest[i] == 0xffffffff || dest[i] == i);
- if (N < 200) {
- printf("%2d ", i);
- if (dest[i] == 0xffffffff) {
- printf(" ");
- } else {
- printf("%2d ", dest[i]);
- }
- for (size_t j=0;j<block_size;++j) {
- printf("%02x", buf[i*block_size+j]);
- }
- printf("\n");
- }
- }
- delete[] buf;
- delete[] dest;
- }
- #endif
|