diff options
| -rw-r--r-- | CMakeLists.txt | 6 | ||||
| -rw-r--r-- | expt_0707.cpp | 40 | ||||
| -rw-r--r-- | expt_0707_1.cu | 38 | ||||
| -rw-r--r-- | publish_0630.cu | 4 | ||||
| -rw-r--r-- | sortlib.cuh | 2 |
5 files changed, 86 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c0e53dc..754e438 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -187,3 +187,9 @@ set_cuda_target_base(expt_0618_3) add_executable(publish_0630 publish_0630.cu) set_cuda_target_base(publish_0630) + +add_executable(expt_0707 expt_0707.cpp) +set_target_properties(expt_0707 PROPERTIES LINKER_LANGUAGE CXX) + +add_executable(expt_0707_1 expt_0707_1.cu) +set_cuda_target_base(expt_0707_1)
\ No newline at end of file diff --git a/expt_0707.cpp b/expt_0707.cpp new file mode 100644 index 0000000..b3e51ff --- /dev/null +++ b/expt_0707.cpp @@ -0,0 +1,40 @@ + +#include <cstdio> +#include <iostream> +#include <limits> +#define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c" +#define PRINTF_BYTE_TO_BINARY_INT8(i) \ + (((i)&0x80ull) ? '1' : '0'), (((i)&0x40ull) ? '1' : '0'), \ + (((i)&0x20ull) ? '1' : '0'), (((i)&0x10ull) ? '1' : '0'), \ + (((i)&0x08ull) ? '1' : '0'), (((i)&0x04ull) ? '1' : '0'), \ + (((i)&0x02ull) ? '1' : '0'), (((i)&0x01ull) ? '1' : '0') + +#define PRINTF_BINARY_PATTERN_INT16 \ + PRINTF_BINARY_PATTERN_INT8 PRINTF_BINARY_PATTERN_INT8 +#define PRINTF_BYTE_TO_BINARY_INT16(i) \ + PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i) +#define PRINTF_BINARY_PATTERN_INT32 \ + PRINTF_BINARY_PATTERN_INT16 PRINTF_BINARY_PATTERN_INT16 +#define PRINTF_BYTE_TO_BINARY_INT32(i) \ + PRINTF_BYTE_TO_BINARY_INT16((i) >> 16), PRINTF_BYTE_TO_BINARY_INT16(i) +#define PRINTF_BINARY_PATTERN_INT64 \ + PRINTF_BINARY_PATTERN_INT32 PRINTF_BINARY_PATTERN_INT32 +#define PRINTF_BYTE_TO_BINARY_INT64(i) \ + PRINTF_BYTE_TO_BINARY_INT32((i) >> 32), PRINTF_BYTE_TO_BINARY_INT32(i) +/* --- end macros --- */ + +template <typename T> void print_type_max(T _) { + std::cout << typeid(T).name() << "" +} + +int main() { + std::cout << (PRINTF_BINARY_PATTERN_INT64) << std::endl; + + auto last_known_point = 10981552822ULL, val = 10960094149ULL; + + printf("last_known_point = %llu, val = %llu\nlast_known_point - val " + "= " PRINTF_BINARY_PATTERN_INT64 "\n", + last_known_point, val, + PRINTF_BYTE_TO_BINARY_INT64(last_known_point - val)); + std::cout << std::numeric_limits<size_t>::max() << std::endl; +}
\ No newline at end of file diff --git a/expt_0707_1.cu b/expt_0707_1.cu new file mode 100644 index 0000000..61a53c6 --- /dev/null +++ b/expt_0707_1.cu @@ -0,0 +1,38 @@ + +#include <cstdio> +#include <iostream> +#define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c" +#define PRINTF_BYTE_TO_BINARY_INT8(i) \ + (int)((((i) >> 7) & 1ull) + '0'), (int)((((i) >> 6) & 1ull) + '0'), \ + (int)((((i) >> 5) & 1ull) + '0'), (int)((((i) >> 4) & 1ull) + '0'), \ + (int)((((i) >> 3) & 1ull) + '0'), (int)((((i) >> 2) & 1ull) + '0'), \ + (int)((((i) >> 1) & 1ull) + '0'), (int)((((i)) & 1ull) + '0') + +#define PRINTF_BINARY_PATTERN_INT16 \ + PRINTF_BINARY_PATTERN_INT8 PRINTF_BINARY_PATTERN_INT8 +#define PRINTF_BYTE_TO_BINARY_INT16(i) \ + PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i) +#define PRINTF_BINARY_PATTERN_INT32 \ + PRINTF_BINARY_PATTERN_INT16 PRINTF_BINARY_PATTERN_INT16 +#define PRINTF_BYTE_TO_BINARY_INT32(i) \ + PRINTF_BYTE_TO_BINARY_INT16((i) >> 16), PRINTF_BYTE_TO_BINARY_INT16(i) +#define PRINTF_BINARY_PATTERN_INT64 \ + PRINTF_BINARY_PATTERN_INT32 PRINTF_BINARY_PATTERN_INT32 +#define PRINTF_BYTE_TO_BINARY_INT64(i) \ + PRINTF_BYTE_TO_BINARY_INT32((i) >> 32), PRINTF_BYTE_TO_BINARY_INT32(i) +/* --- end macros --- */ + +__global__ void test() { + + auto last_known_point = 10981552822ULL, val = 10960094149ULL; + auto x = last_known_point - val; + printf("last_known_point =%llu, val = %llu " PRINTF_BINARY_PATTERN_INT64 "\n", + last_known_point, val, + PRINTF_BYTE_TO_BINARY_INT64(last_known_point - val)); +} + +int main() { + std::cout << (PRINTF_BINARY_PATTERN_INT64) << std::endl; + test<<<1, 1>>>(); + cudaDeviceSynchronize(); +}
\ No newline at end of file diff --git a/publish_0630.cu b/publish_0630.cu index 31e66c9..9cdd7d3 100644 --- a/publish_0630.cu +++ b/publish_0630.cu @@ -67,10 +67,9 @@ Conference on Parallel and Distributed Systems, December 2012. #include <algorithm> #include <cassert> #include <cstdio> -#include <cstdlib> +#include <cstring> #include <fstream> #include <random> -#include <set> #include <vector> typedef unsigned long long key_type; @@ -121,7 +120,6 @@ inline void __cudaCheckError(const char *file, const int line) { /// 用於讀入資料的幫助類 /// 該類為模板類,可用於任意類型的讀入資料 template <typename key_type> class ReadHelper_ { - // typedef unsigned long long key_type; /// 用來存放最大值和最小值的變數 key_type max_value = std::numeric_limits<key_type>::min(), diff --git a/sortlib.cuh b/sortlib.cuh index d9e91a2..d2e148a 100644 --- a/sortlib.cuh +++ b/sortlib.cuh @@ -79,7 +79,7 @@ public: }*/ // son = get_son_from_step(son, (*last_known_point > val)); - auto branch_selector = ((*last_known_point - val) >> MOVE_OFFSET); + auto branch_selector = (int)(*last_known_point < val); // printf("tmp: %llu\n", tmp); // printf("%llu %llu ", val, *last_known_point); son = son * 2 + branch_selector; |
