554 lines
69 KiB
LLVM
554 lines
69 KiB
LLVM
; ModuleID = 'kernel_gpu_cuda_wrapper-host-x86_64-unknown-linux-gnu.bc'
|
|
source_filename = "kernel/kernel_gpu_cuda_wrapper.cu"
|
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
%struct.knode = type { i32, [257 x i32], [257 x i32], i8, i32 }
|
|
%struct.record = type { i32 }
|
|
%struct.dim3 = type { i32, i32, i32 }
|
|
%struct.CUstream_st = type opaque
|
|
|
|
$_ZN4dim3C2Ejjj = comdat any
|
|
|
|
@.str = private unnamed_addr constant [75 x i8] c"# of blocks = %d, # of threads/block = %d (ensure that device can handle)\0A\00", align 1
|
|
@.str.1 = private unnamed_addr constant [21 x i8] c"cudaMalloc recordsD\00", align 1
|
|
@.str.2 = private unnamed_addr constant [23 x i8] c"cudaMalloc currKnodeD\00", align 1
|
|
@.str.3 = private unnamed_addr constant [20 x i8] c"cudaMalloc offsetD\00", align 1
|
|
@.str.4 = private unnamed_addr constant [18 x i8] c"cudaMalloc keysD\00", align 1
|
|
@.str.5 = private unnamed_addr constant [16 x i8] c"cudaMalloc ansD\00", align 1
|
|
@.str.6 = private unnamed_addr constant [27 x i8] c"cudaMalloc cudaMemcpy memD\00", align 1
|
|
@.str.7 = private unnamed_addr constant [33 x i8] c"cudaMalloc cudaMemcpy currKnodeD\00", align 1
|
|
@.str.8 = private unnamed_addr constant [30 x i8] c"cudaMalloc cudaMemcpy offsetD\00", align 1
|
|
@.str.9 = private unnamed_addr constant [28 x i8] c"cudaMalloc cudaMemcpy keysD\00", align 1
|
|
@.str.10 = private unnamed_addr constant [27 x i8] c"cudaMalloc cudaMemcpy ansD\00", align 1
|
|
@.str.11 = private unnamed_addr constant [6 x i8] c"findK\00", align 1
|
|
@.str.12 = private unnamed_addr constant [16 x i8] c"cudaMemcpy ansD\00", align 1
|
|
@.str.13 = private unnamed_addr constant [52 x i8] c"Time spent in different stages of GPU_CUDA KERNEL:\0A\00", align 1
|
|
@.str.14 = private unnamed_addr constant [54 x i8] c"%15.12f s, %15.12f % : GPU: SET DEVICE / DRIVER INIT\0A\00", align 1
|
|
@.str.15 = private unnamed_addr constant [37 x i8] c"%15.12f s, %15.12f % : GPU MEM: ALO\0A\00", align 1
|
|
@.str.16 = private unnamed_addr constant [41 x i8] c"%15.12f s, %15.12f % : GPU MEM: COPY IN\0A\00", align 1
|
|
@.str.17 = private unnamed_addr constant [36 x i8] c"%15.12f s, %15.12f % : GPU: KERNEL\0A\00", align 1
|
|
@.str.18 = private unnamed_addr constant [42 x i8] c"%15.12f s, %15.12f % : GPU MEM: COPY OUT\0A\00", align 1
|
|
@.str.19 = private unnamed_addr constant [37 x i8] c"%15.12f s, %15.12f % : GPU MEM: FRE\0A\00", align 1
|
|
@.str.20 = private unnamed_addr constant [13 x i8] c"Total time:\0A\00", align 1
|
|
@.str.21 = private unnamed_addr constant [9 x i8] c"%.12f s\0A\00", align 1
|
|
@0 = private constant [15913 x i8] c"P\EDU\BA\01\00\10\00\18>\00\00\00\00\00\00\02\00\01\01@\00\00\00\A83\00\00\00\00\00\00\00\00\00\00\00\00\00\00\07\00\01\00=\00\00\00\00\00\00\00\00\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\7FELF\02\01\013\07\00\00\00\00\00\00\00\02\00\BE\00e\00\00\00\00\00\00\00\00\00\00\00\003\00\00\00\00\00\00\C00\00\00\00\00\00\00=\05=\00@\008\00\03\00@\00\09\00\01\00\00.shstrtab\00.strtab\00.symtab\00.symtab_shndx\00.nv.info\00.text.findK\00.nv.info.findK\00.nv.shared.findK\00.nv.global\00.nv.constant0.findK\00\00.shstrtab\00.strtab\00.symtab\00.symtab_shndx\00.nv.info\00findK\00.text.findK\00.nv.info.findK\00.nv.shared.findK\00.nv.global\00threadIdx\00blockIdx\00.nv.constant0.findK\00_param\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\008\00\00\00\03\00\07\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00d\00\00\00\03\00\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00o\00\00\00\01\00\08\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00y\00\00\00\01\00\08\00\01\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\82\00\00\00\03\00\06\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\002\00\00\00\12\10\07\00\00\00\00\00\00\00\00\00@,\00\00\00\00\00\00\04/\08\00\06\00\00\00\16\00\00\00\04#\08\00\06\00\00\00\00\00\00\00\04\12\08\00\06\00\00\00P\00\00\00\04\11\08\00\06\00\00\00P\00\00\00\010\00\00\01*\00\00\04\0A\08\00\05\00\00\00@\01@\00\03\19@\00\04\17\0C\00\00\00\00\00\07\008\00\00\F0!\00\04\17\0C\00\00\00\00\00\06\000\00\00\F0!\00\04\17\0C\00\00\00\00\00\05\00(\00\00\F0!\00\04\17\0C\00\00\00\00\00\04\00 \00\00\F0!\00\04\17\0C\00\00\00\00\00\03\00\18\00\00\F0!\00\04\17\0C\00\00\00\00\00\02\00\10\00\00\F0!\00\04\17\0C\00\00\00\00\00\01\00\08\00\00\F0!\00\04\17\0C\00\00\00\00\00\00\00\00\00\00\F0!\00\03\1B\FF\00\04\1D\04\00\F0\07\00\00\04\1C\04\00\F8+\00\00\04\1E\04\00p\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EF\1F\E0\FD\03<d\00\01\00\87\00\80\07\98L\01\01\07\FB\FF\FF\0F\1C\00\00w\03\00\00\C8\F0\EF\1F\E0\FD\03\BC\7F\00\07\01\07\00\80\03l[\0F\00\80\00\00\00@\E2\C0\00\10\00\00\00\A0\E3\EF\1F\E0!\03\BC\7F\00\00\01\F7\0F\00\00\10\\\00\0A\07\00\00\00\E0\\\02\00\07\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\00\F7\0F\80\07\98\\\00\00'\00\80\07\98\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\00\07\00\80\07\98\\\03\007\00\80\07\98\\\0A\00\17\00\80\07\98L\EF\1F\E0\FD\03\BC\7F\00\00\00\17\04\80\07\98L\0A\02\A7\00\00\80\10\\\00\03\07\00\00\08\10\\\EF\1F\E0!\03\BC\7F\00\02\F0\87\17\00\00\00\01\02\02\07\00\00\00\95\EF\06\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\07\007\00\80\07\98\\\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\02\F0\07\17\00\00\00\01\02\02\07\00\00\00\95\EF\08\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\09\007\00\80\07\98\\\08\00\87\00\80\07\98\\\09\00\97\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\02\F0\87\16\00\00\00\01\02\02\07\00\00\00\95\EF\0D\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0E\007\00\80\07\98\\\0D\00\D7\00\80\07\98\\\0E\00\E7\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\02\F0\07\16\00\00\00\01\02\02\07\00\00\00\95\EF\10\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\13\007\00\80\07\98\\\10\00\07\01\80\07\98\\\13\007\01\80\07\98\\\EF\1F\E0!\03\BC\7F\00\02\F0\87\15\00\00\00\01\02\02\07\00\00\00\95\EF\11\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\12\007\00\80\07\98\\\11\00\17\01\80\07\98\\\12\00'\01\80\07\98\\\EF\1F\E0!\03\BC\7F\00\02\F0\07\15\00\00\00\01\02\02\07\00\00\00\95\EF\04\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\007\00\80\07\98\\\03\00'\00\80\07\98\\\02\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\04\F0\87\14\00\00\00\01\0F\19\E0\FD\03\BC\7F\00\04\04\07\00\00\00\95\EF\0C\00G\00\80\07\98\\\0B\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0C\00\C7\00\80\07\98\\\0B\00\B7\00\80\07\98\\\04\F0\07\14\00\00\00\01\0F\19\E0\FD\03\BC\7F\00\04\04\07\00\00\00\95\EF\0F\00G\00\80\07\98\\\04\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00G\00\80\07\98\\\04\00\F7\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\07\00w\00\80\07\98\\\08\00\87\00\80\07\98\\\09\00\97\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\08\00\87\00\80\07\98\\\09\00\97\00\80\07\98\\\08\00\87\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\09\00\97\00\80\07\98\\\0D\00\D7\00\80\07\98\\\0E\00\E7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0F\00\E7\00\80\07\98\\\0E\00\D7\00\80\07\98\\\0E\00\E7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0F\00\F7\00\80\07\98\\\10\00\07\01\80\07\98\\\13\007\01\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\14\00\07\01\80\07\98\\\15\007\01\80\07\98\\\14\00G\01\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\15\00W\01\80\07\98\\\11\00\17\01\80\07\98\\\10\00'\01\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\11\11\07\01\00\04G\\\10\11\07\01\00\04G\\\11\11\07\01\00\04G\\\EF\1F\E0\FD\03\BC\7F\00\10\00\07\01\80\07\98\\\11\00\17\01\80\07\98\\\0C\00\C7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0B\00\B7\00\80\07\98\\\0C\00\C7\00\80\07\98\\\0D\00\B7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0C\00\C7\00\80\07\98\\\0D\00\D7\00\80\07\98\\\13\0A\F7\0F\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\0B\00\F7\0F\00\08\10\\\13\007\01\80\07\98\\\0B\00\B7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\12\13\F7\0F\00\80\D7[\13\13\F7\0F\C0\05\D8[\12\00'\01\80\07\98\\\EF\1F\E0=\03\BC\7F\00\13\007\01\80\07\98\\\04\12\07\00\00\00\B0\A0\05\0A\87\00\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\0B\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\0B\00\B7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F\C0\05\D8[\04\00G\00\80\07\98\\\EF\1F\E0=\03\BC\7F\00\05\00W\00\80\07\98\\\0C\04\07\00\00\00\B0\A0\05\0A\07\01\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\0B\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\0B\00\B7\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F\C0\05\D8[\04\00G\00\80\07\98\\\EF\1F\E0=\03\BC\7F\00\05\00W\00\80\07\98\\\02\04\07\00\00\00\B0\A0\03\0A\87\01\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0=\03\BC\7F\00\03\007\00\80\07\98\\\10\02\07\00\00\00\B0\A0\03\0A\07\02\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0=\03\BC\7F\00\03\007\00\80\07\98\\\14\02\07\00\00\00\B0\A0\03\0A\87\02\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0=\03\BC\7F\00\03\007\00\80\07\98\\\0E\02\07\00\00\00\B0\A0\03\0A\07\03\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0=\03\BC\7F\00\03\007\00\80\07\98\\\08\02\07\00\00\00\B0\A0\03\0A\87\03\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0=\03<d\00\03\007\00\80\07\98\\\06\02\07\00\00\00\B0\A0\04\00\17\02\00\00\C8\F0\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\03\0A\07\04\00\00\10\1C\05\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\05\00W\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F\C0\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\EF\19\E0!\03\BC\7F\00\04\02\07\00\00\00\90\A0\04\00W\02\00\00\C8\F0\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\0AG\04\00\00\10\1C\05\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F\C0\02\D8[\EF\1F\E0\FD\03\BCg\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\04\02\07\00\00\00\90\A0\EF\1F\E0\FD\03\BC\7F\00\05\00\F7\0F\80\07\98\\\03\0A\87\04\00\00\10\1C\04\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\EF\19\E0\FD\03\BC\7F\00\05\02\07\00\00\00\90\A0\0A\00\A7\00\80\07\98\\\00\00\07\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\00\00\00\86\01\00\90\E2\0F\00\07\00\00\00@\E2\03\0A\87\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03<d\00\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\03\02\F7\01\00\00)8\05\00'\00\80\07\98\\\06\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\0A\F7\0F\00\80\10\\\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\04\00'\00\80\07\98\\\02\007\00\80\07\98\\\FF\05G\00\00\80\11\\\EF\1F\E0\FD\03\BC\7F\00\07\06'\00\80\0Bm[\0F\00\00\00\00\00\F8\F0\0F\00\07\00\00\00@\E2\EF\1F\E0\FD\03\BC\7F\00\03\0A\87\00\00\00\10\1C\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\04\00'\00\80\07\98\\\05\007\00\80\07\98\\\03\0A\07\02\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\09\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0B\007\00\80\07\98\\\03\0AG\04\00\00\10\1C\06\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\06\00g\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0!\03\BC\7F\00\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\03\02\F7\01\00\00)8\EF\1F\E0\FD\03\BC\7F\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\08\027\00\C0\01\F86\EF\1F\E0\FD\03\BC\7F\00\07\027\00\00\00H8\07\09w\00\00\80\10\\\08\0B\87\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\07\00w\00\80\07\98\\\08\00\87\00\80\07\98\\\06\07\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\07\07\F7\0F@\04\D8[\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\06\06\07\00\00\00\B0\80\08\00g\00\80\07\98\\\06\00w\00\80\07\98\\\0F\19\E0!\03<d\00\07\08G\81\00\00\00\1F\09\08G\81\00\00 \1F\0B\06G\81\00\00\00\1F\0F\19\E0!\03<d\00\0C\06G\81\00\00 \1F\0D\08\F7\0F\00\008\\\08\08\F7\0F\80\008\\\0F\19\E0!\03\BC\7F\00\0E\06\F7\0F\00\008\\\06\06\F7\0F\80\008\\\09\09\B7\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\0C\0C\F7\0F\00\08\10\\\0E\08\E7\00\00\80\10\\\0B\06\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\08\09\D7\00\00\80\10\\\06\0C\E7\00\00\88\10\\\06\0B\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\07\04w\00\00\80\10\\\08\05\87\00\00\08\10\\\05\0A\07\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03<d\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\04:G\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\04'\00\C0\02\F86\05\04'\00\00\00H8\05\07W\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\06\08g\00\00\08\10\\\05\05\87@\00\00\10\1C\06\06\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\06\04\07\00\00\00\90\80\05\0A\07\03\00\00\10\1C\07\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\07\00w\00\80\07\98\\\04\05\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\05\05\F7\0F\C0\03\D8[\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\04\04\07\00\00\00\B0\80\07\00G\00\80\07\98\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\02'\00\C0\01\F86\03\02'\00\00\00H8\03\077\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\04\05G\00\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\07\06'\00\80\03i[\EF\1F\E0\FD\03\BC\7F\00\00\00\80\E2\00\00\90\E2\0F\00\00\00\00\00\F8\F0\0F\00\07\00\00\00@\E2\EF\1F\E0\FD\03\BC\7F\00\03\0A\87\00\00\00\10\1C\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\04\00'\00\80\07\98\\\05\007\00\80\07\98\\\03\0A\07\02\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\09\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0B\007\00\80\07\98\\\03\0AG\04\00\00\10\1C\06\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\06\00g\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0!\03\BC\7F\00\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\03\02\F7\01\00\00)8\EF\1F\E0\FD\03\BC\7F\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\08\027\00\C0\01\F86\EF\1F\E0\FD\03\BC\7F\00\07\027\00\00\00H8\07\09w\00\00\80\10\\\08\0B\87\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\07\00w\00\80\07\98\\\08\00\87\00\80\07\98\\\06\07\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\07\07\F7\0F@\04\D8[\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\06\06\07\00\00\00\B0\80\08\00g\00\80\07\98\\\06\00w\00\80\07\98\\\0F\19\E0!\03<d\00\07\08G\81\00\00\00\1F\09\08G\81\00\00 \1F\0B\06G\81\00\00\00\1F\0F\19\E0!\03<d\00\0C\06G\81\00\00 \1F\0D\08\F7\0F\00\008\\\08\08\F7\0F\80\008\\\0F\19\E0!\03\BC\7F\00\0E\06\F7\0F\00\008\\\06\06\F7\0F\80\008\\\09\09\B7\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\0C\0C\F7\0F\00\08\10\\\0E\08\E7\00\00\80\10\\\0B\06\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\08\09\D7\00\00\80\10\\\06\0C\E7\00\00\88\10\\\06\0B\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\07\04w\00\00\80\10\\\08\05\87\00\00\08\10\\\05\0A\07\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\04\04\17\00\00\00\00\1C\0F\19\E0\FD\03\BC\7F\00\04:G\00\00\00\E0\\\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\06\00G\00\80\07\98\\\04\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00g\00\80\07\98\\\06\00G\00\80\07\98\\\06\05'\00@\03\F86\EF\1F\E0\FD\03\BC\7F\00\05\05'\00\00\00H8\05\07W\00\00\80\10\\\06\08g\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\05\87@\00\00\10\1C\06\06\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\06\04\07\00\00\00\90\80\EF\1F\E0\FD\03\BC\7F\00\05\0A\07\03\00\00\10\1C\07\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\07\00w\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F\C0\03\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\04\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\07\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\02'\00\C0\01\F86\EF\1F\E0\FD\03\BC\7F\00\03\02'\00\00\00H8\03\077\00\00\80\10\\\04\05G\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\02\02\07\00\00\00\90\80\07\06'\00\80\03g[\0F\00\00\00\00\00\F8\F0\EF\1F\E0\FD\03\BC\7F\00\0F\00\07\00\00\00@\E2\05\0A\87\00\00\00\10\1C\02\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\02\00'\00\80\07\98\\\04\05\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\05\05\F7\0F@\01\D8[\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\04\04\07\00\00\00\B0\80\02\00G\00\80\07\98\\\03\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\0A\87\02\00\00\10\1C\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\04\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\07\00G\00\80\07\98\\\08\00W\00\80\07\98\\\05\0AG\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03<d\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\04:G\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\047\00\C0\02\F86\05\047\00\00\00H8\05\07W\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\06\08g\00\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\B0\80\06\00G\00\80\07\98\\\EF\1F\E0!\03<d\00\04\00W\00\80\07\98\\\05\06G\81\00\00\00\1F\07\06G\81\00\00 \1F\0F\19\E0!\03<d\00\08\04G\81\00\00\00\1F\09\04G\81\00\00 \1F\0B\06\F7\0F\00\008\\\0F\19\E0!\03<d\00\06\06\F7\0F\80\008\\\0C\04\F7\0F\00\008\\\04\04\F7\0F\80\008\\\EF\1F\E0\FD\03\BC\7F\00\07\07\87\00\00\80\10\\\09\09\F7\0F\00\08\10\\\0C\06\C7\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\08\04\F7\0F\00\08\10\\\06\07\B7\00\00\80\10\\\04\09\C7\00\00\88\10\\\EF\1F\E0\FD\03\BC\7F\00\04\08\F7\0F\00\08\10\\\05\02W\00\00\80\10\\\06\03g\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\0A\07\04\00\00\10\1C\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\0F\19\E0\FD\03\BC\7F\00\02:'\00\00\00\E0\\\03\02\F7\01\00\00)8\02\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\02'\00\C0\01\F86\03\02'\00\00\00H8\EF\1F\E0\FD\03\BC\7F\00\03\057\00\00\80\10\\\04\06G\00\00\08\10\\\03\03G\00\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\04\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03<d\00\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\03\02\F7\01\00\00)8\05\00'\00\80\07\98\\\06\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\0A\07\01\00\00\10\1C\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\04\00'\00\80\07\98\\\02\007\00\80\07\98\\\FF\05G\00\00\80\11\\\EF\1F\E0\FD\03\BC\7F\00\07\06'\00\80\0Bm[\00\00\80F\00\00\90\E2\0F\00\00\00\00\00\F8\F0\EF\1F\E0\FD\03\BC\7F\00\0F\00\07\00\00\00@\E2\03\0A\87\00\00\00\10\1C\04\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\02\02\07\00\00\00\B0\80\04\00'\00\80\07\98\\\05\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\0A\87\02\00\00\10\1C\06\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\07\00'\00\80\07\98\\\08\007\00\80\07\98\\\03\0AG\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03<d\00\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\03\02\F7\01\00\00)8\06\00'\00\80\07\98\\\02\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\067\00@\01\F86\03\067\00\00\00H8\03\077\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\02\08'\00\00\08\10\\\07\007\00\80\07\98\\\02\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\07\F7\0F\00\80\D7[\07\07\F7\0F@\01\D8[\06\00g\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\07\00w\00\80\07\98\\\06\06\07\00\00\00\B0\80\08\00g\00\80\07\98\\\EF\1F\E0!\03<d\00\06\00w\00\80\07\98\\\07\08G\81\00\00\00\1F\09\08G\81\00\00 \1F\0F\19\E0!\03<d\00\0B\06G\81\00\00\00\1F\0C\06G\81\00\00 \1F\0D\08\F7\0F\00\008\\\0F\19\E0!\03<d\00\08\08\F7\0F\80\008\\\0E\06\F7\0F\00\008\\\06\06\F7\0F\80\008\\\EF\1F\E0\FD\03\BC\7F\00\09\09\B7\00\00\80\10\\\0C\0C\F7\0F\00\08\10\\\0E\08\E7\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\0B\06\F7\0F\00\08\10\\\08\09\D7\00\00\80\10\\\06\0C\E7\00\00\88\10\\\EF\1F\E0\FD\03\BC\7F\00\06\0B\F7\0F\00\08\10\\\07\04w\00\00\80\10\\\08\05\87\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\0A\07\04\00\00\10\1C\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\0F\19\E0\FD\03\BC\7F\00\04:G\00\00\00\E0\\\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\06\04'\00\C0\02\F86\05\04'\00\00\00H8\EF\1F\E0\FD\03\BC\7F\00\05\07W\00\00\80\10\\\06\08g\00\00\08\10\\\05\05G\00\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\06\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03<d\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\04:G\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\06\00'\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\EF\19\E0\FD\03\BC\7F\00\04\02\07\00\00\00\B0\A0\0F\00\07\00\00\00\F8\F0\0F\00\07\00\00\00\F8\F0\EF\1F\E0\FD\03\BC\1F\00\0F\00\07\00\00\00\F8\F0\0F\00\07\00\00\00\F8\F0\00\0F\07\00\00\00\B0P\EF\07\80\FC\00\BCg\00\00\0F\07\00\00\00\B0P\00\0F\07\00\00\00\B0P\00\00\07\00\80\1B\A8\F0\F5\07\E0\FD\03\BC\7F\00\00\00\07\00\00\00\98\EF\03\0A\07\04\00\00\10\1C\04\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\02\02\07\00\00\00\90\80\07\02\F7\0F\80\03k[\00\00\80'\00\00\90\E2\EF\1F\E0\FD\03\BC\7F\00\0F\00\00\00\00\00\F8\F0\0F\00\07\00\00\00@\E2\03\0A\87\02\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\05\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\007\00\80\07\98\\\03\0AG\04\00\00\10\1C\04\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0!\03\BC\7F\00\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\03\02\F7\01\00\00)8\EF\1F\E0\FD\03\BC\7F\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\08\027\00\C0\01\F86\EF\1F\E0\FD\03\BC\7F\00\07\027\00\00\00H8\03\05w\00\00\80\10\\\04\06\87\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\02\02\07\00\00\00\B0\80\05\0A\07\02\00\00\10\1C\06\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\04\04\07\00\00\00\B0\80\06\00G\00\80\07\98\\\04\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\06w\00\00\80\10\\\06\04\87\00\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\EF\1F\E0\FD\03\BCg\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\02\04\07\00\00\00\B0\A0\EF\1F\E0\FD\03\BC\1F\00\0F\00\07\00\00\00\F8\F0\0F\00\07\00\00\00\F8\F0\00\0F\07\00\00\00\B0P\EF\07\80\FC\00\BCg\00\00\0F\07\00\00\00\B0P\00\0F\07\00\00\00\B0P\00\00\07\00\80\1B\A8\F0\F5\07\E0\FD\03\BC\7F\00\00\00\07\00\00\00\98\EF\0F\00\07\00\00\00@\E2\03\0A\87\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\04\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\04\02\17\00\00\00\00\1C\EF\1F\E0\FD\03\BC\7F\00\03\0A\87\04\00\00\10\1C\05\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F\C0\02\D8[\EF\1F\E0\FD\03\BCg\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\04\02\07\00\00\00\90\A0\EF\1F\E0\FD\03\BC\7F\00\0F\00\87z\FE\0F@\E2\03\0A\87\00\00\00\10\1C\04\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\02\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\02\02\07\00\00\00\B0\80\04\00'\00\80\07\98\\\05\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\03\0A\07\02\00\00\10\1C\06\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\09\00'\00\80\07\98\\\0B\007\00\80\07\98\\\03\0AG\04\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\02\00'\00\80\07\98\\\EF\1F\E0!\03<d\00\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\02:'\00\00\00\E0\\\EF\1F\E0\FD\03\BC\7F\00\03\02\F7\01\00\00)8\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\08\027\00\C0\01\F86\07\027\00\00\00H8\07\09w\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\08\0B\87\00\00\08\10\\\07\00w\00\80\07\98\\\08\00\87\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\07\F7\0F\00\80\D7[\07\07\F7\0F@\04\D8[\06\00g\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\07\00w\00\80\07\98\\\06\06\07\00\00\00\B0\80\08\00g\00\80\07\98\\\EF\1F\E0!\03<d\00\06\00w\00\80\07\98\\\07\08G\81\00\00\00\1F\09\08G\81\00\00 \1F\0F\19\E0!\03<d\00\0B\06G\81\00\00\00\1F\0C\06G\81\00\00 \1F\0D\08\F7\0F\00\008\\\0F\19\E0!\03<d\00\08\08\F7\0F\80\008\\\0E\06\F7\0F\00\008\\\06\06\F7\0F\80\008\\\EF\1F\E0\FD\03\BC\7F\00\09\09\B7\00\00\80\10\\\0C\0C\F7\0F\00\08\10\\\0E\08\E7\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\0B\06\F7\0F\00\08\10\\\08\09\D7\00\00\80\10\\\06\0C\E7\00\00\88\10\\\EF\1F\E0\FD\03\BC\7F\00\06\0B\F7\0F\00\08\10\\\07\04w\00\00\80\10\\\08\05\87\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\0A\07\04\00\00\10\1C\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\0F\19\E0\FD\03\BC\7F\00\04:G\00\00\00\E0\\\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\06\04'\00\C0\02\F86\05\04'\00\00\00H8\EF\1F\E0\FD\03\BC\7F\00\05\07W\00\00\80\10\\\06\08g\00\00\08\10\\\05\05\87@\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\06\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\05\00W\00\80\07\98\\\06\04\07\00\00\00\90\80\05\0A\07\03\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\07\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\07\00w\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F\C0\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\B0\80\07\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\04\02'\00\C0\01\F86\03\02'\00\00\00H8\EF\1F\E0\FD\03\BC\7F\00\03\077\00\00\80\10\\\04\05G\00\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\00G\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\02\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\90\80\EF\1F\E0\FD\03\BC\7F\00\07\06'\00\80\03k[\0F\00\00^\00\00@\E2\0F\00\07\00\00\00@\E2\EF\1F\E0\FD\03\BC\7F\00\05\0A\87\01\00\00\10\1C\02\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\02\00'\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\01\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\04\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\02\00G\00\80\07\98\\\03\00W\00\80\07\98\\\05\0A\87\00\00\00\10\1C\EF\1F\E0\FD\03\BC\7F\00\06\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\03\D8[\04\00G\00\80\07\98\\\EF\1F\E0!\03\BC\7F\00\05\00W\00\80\07\98\\\04\04\07\00\00\00\B0\80\06\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\07\00W\00\80\07\98\\\05\0A\07\02\00\00\10\1C\08\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\08\00\87\00\80\07\98\\\04\05\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\05\05\F7\0F@\04\D8[\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\0F\19\E0\FD\03\BC\7F\00\04\04\07\00\00\00\B0\80\0C\00G\00\80\07\98\\\0D\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\0AG\04\00\00\10\1C\08\00\F7\0F\00\08\10\\\05\00W\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\08\00\87\00\80\07\98\\\04\05\F7\0F\00\80\D7[\05\05\F7\0F@\04\D8[\EF\1F\E0\FD\03<d\00\04\00G\00\80\07\98\\\05\00W\00\80\07\98\\\04\04\07\00\00\00\90\80\0F\19\E0\FD\03\BC\7F\00\04:G\00\00\00\E0\\\05\04\F7\01\00\00)8\04\00G\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\05\00W\00\80\07\98\\\0B\047\00\C0\02\F86\09\047\00\00\00H8\EF\1F\E0\FD\03\BC\7F\00\09\0C\97\00\00\80\10\\\0B\0D\B7\00\00\08\10\\\09\00\97\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\0B\00\B7\00\80\07\98\\\08\09\F7\0F\00\80\D7[\09\09\F7\0F\C0\05\D8[\EF\1F\E0\FD\03<d\00\08\00\87\00\80\07\98\\\09\00\97\00\80\07\98\\\08\08\07\00\00\00\B0\80\EF\1F\E0\FD\03<d\00\0B\00\87\00\80\07\98\\\08\00\97\00\80\07\98\\\09\0BG\81\00\00\00\1F\0F\19\E0!\03<d\00\0C\0BG\81\00\00 \1F\0D\08G\81\00\00\00\1F\0E\08G\81\00\00 \1F\0F\19\E0!\03<d\00\0F\0B\F7\0F\00\008\\\0B\0B\F7\0F\80\008\\\10\08\F7\0F\00\008\\\0F\19\E0\FD\03\BC\7F\00\08\08\F7\0F\80\008\\\0C\0C\D7\00\00\80\10\\\0E\0E\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\10\0B\07\01\00\80\10\\\0D\08\F7\0F\00\08\10\\\0B\0C\F7\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\08\0E\07\01\00\88\10\\\08\0D\F7\0F\00\08\10\\\09\06\97\00\00\80\10\\\EF\1F\E0\FD\03\BC\7F\00\0B\07\B7\00\00\08\10\\\07\0A\07\04\00\00\10\1C\08\00\F7\0F\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\07\00w\00\80\07\98\\\08\00\87\00\80\07\98\\\06\07\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\07\07\F7\0F@\04\D8[\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\0F\19\E0!\03\BC\7F\00\06\06\07\00\00\00\90\80\06:g\00\00\00\E0\\\07\06\F7\01\00\00)8\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\08\06'\00\C0\03\F86\EF\1F\E0\FD\03\BC\7F\00\07\06'\00\00\00H8\07\09w\00\00\80\10\\\08\0B\87\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\07\07G\00\00\00\10\1C\08\08\F7\0F\00\08\10\\\07\00w\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\08\00\87\00\80\07\98\\\06\07\F7\0F\00\80\D7[\07\07\F7\0F@\04\D8[\EF\1F\E0\FD\03<d\00\06\00g\00\80\07\98\\\07\00w\00\80\07\98\\\06\06\07\00\00\00\90\80\0F\19\E0\FD\03\BC\7F\00\06:g\00\00\00\E0\\\07\06\F7\01\00\00)8\06\00g\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\07\00w\00\80\07\98\\\07\06'\00\C0\03\F86\06\06'\00\00\00H8\EF\1F\E0\FD\03\BC\7F\00\02\02g\00\00\80\10\\\06\03w\00\00\08\10\\\03\00'\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\06\00g\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\03\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\06\02\07\00\00\00\90\80\EF\1F\E0\FD\03\BC\7F\00\03\0A\87\03\00\00\10\1C\00\00\F7\0F\00\08\10\\\03\007\00\80\07\98\\\EF\1F\E0\FD\03\BC\7F\00\00\00\07\00\80\07\98\\\02\03\F7\0F\00\80\D7[\03\03\F7\0F@\00\D8[\EF\1F\E0\FD\03<d\00\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\02\02\07\00\00\00\B0\80\EF\1F\E0\FD\03\BC\7F\00\07\00'\00\80\07\98\\\02\007\00\80\07\98\\\00\04'\00\C0\02\F86\EF\1F\E0\FD\03\BC\7F\00\03\04'\00\00\00H8\03\077\00\00\80\10\\\00\02\07\00\00\08\10\\\EF\1F\E0\FD\03\BC\7F\00\03\007\00\80\07\98\\\00\00\07\00\80\07\98\\\02\03\F7\0F\00\80\D7[\EF\1F\E0\FD\03\BC\7F\00\03\03\F7\0F@\00\D8[\02\00'\00\80\07\98\\\03\007\00\80\07\98\\\EF\19\E0\FD\03\BC\7F\00\06\02\07\00\00\00\90\A0\0F\00\07\00\00\00@\E2\0F\00\07\00\00\00\00\E3\FF\07\00\FC\00\80\1F\00\0F\00\07\FF\FF\0F@\E2\00\0F\07\00\00\00\B0P\00\0F\07\00\00\00\B0P\E0\07\00\FC\00\80\1F\00\00\0F\07\00\00\00\B0P\00\0F\07\00\00\00\B0P\00\0F\07\00\00\00\B0P\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00@\00\00\00\00\00\00\00}\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0B\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\BD\00\00\00\00\00\00\00\9D\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\13\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`\01\00\00\00\00\00\00\A8\00\00\00\00\00\00\00\02\00\00\00\05\00\00\00\08\00\00\00\00\00\00\00\18\00\00\00\00\00\00\00)\00\00\00\00\00\00p\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\08\02\00\00\00\00\00\000\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00>\00\00\00\00\00\00p\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\008\02\00\00\00\00\00\00\B4\00\00\00\00\00\00\00\03\00\00\00\07\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00i\00\00\00\01\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\EC\02\00\00\00\00\00\00\80\01\00\00\00\00\00\00\00\00\00\00\07\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\002\00\00\00\01\00\00\00\06\00\10\00\00\00\00\00\00\00\00\00\00\00\00\00\80\04\00\00\00\00\00\00@,\00\00\00\00\00\00\03\00\00\00\06\00\00\16 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00^\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\05\00\00\00\003\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\A8\00\00\00\00\00\00\00\A8\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\01\00\00\00\05\00\00\00\EC\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\C0-\00\00\00\00\00\00\C0-\00\00\00\00\00\00\08\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00\C00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\01\00\01\01H\00\00\00\E8\09\00\00\00\00\00\00\E6\09\00\00@\00\00\00\04\00\06\00=\00\00\00\00\00\00\00\00\00\00\00\11 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\FB#\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F0 \0A\0A\0A\0A.version 6.4\0A.target sm_61\0A.address_size 64.\00\FF\12global .align 1 .b8 threadIdx[1];#\00\03Tblock\22\00\F0\0B\0A.weak .func (.param .b32 \12\00\F5\07_retval0) cudaMalloc(\0A&\00'64\18\00\11_\16\00?_0, \00\0B\A61\0A)\0A{\0A.loc\98\00\118\98\00!__\15\00\A0_depot0[16\C1\002regI\00;%SP\0F\00\15L\10\00\8932 %r<2>!\00\D3rd<3>;\0A\0Amov.u2\00\1B,e\00b;\0Acvta\8D\00\04%\00\13,\\\00\22ld\C8\00\02\18\00nrd2, [\CE\00\1E])\00\1F1)\00\01a0];\0Ast#\00\81[%SP+0],,\00\0A\16\00\128\16\00\222;\B6\00\01\D8\00a1, 999(\00\02g\00\00\EF\00\18[\9E\01\03M\00\AF1;\0Aret;\0A\0A}\D6\01\1A\FE\02FuncGetAttributes\E1\01\0D#\00\0E\EC\01\0F+\00\06\0F\F7\01\1B\1F1\F7\01Q\1F1\F7\01!\0E\D9\00\0F\02\02\0F\0E8\01\0F\0D\02\8DhDevice\B4\00\0E\0E\02\0E$\00\0F\0F\02\00/32,\00\0B\1F1,\00\18\1F2<\02\13\1F2<\02\1F\1D4<\02\1F2<\02\0C\1F2<\02\13\01_\00\04;\02\0F\D9\00\07\1D]4\00\1F14\00\06\0Fp\02\10\0E\9A\01\0Fq\02\12(32q\02\0B\15\00!12\16\00\09\86\02\1F3\86\02\15\1F3\86\02#2Get\CB\00\0E}\02\05\1B\00\04\DA\00\0F\1C\02\13?3[8W\04.\0F\1B\02\0D\1F3W\04\19\04\B3\01\0D\D0\00\0F\AA\01\06\0F\05\04W\F0\04OccupancyMaxActiveB3\08\FE\03sPerMultiprocessor\9F\01\0F;\00\16\0EB\06\0FC\00%\0EJ\04\0FC\00\1E\1F2\86\00/\1F3\88\02\13O4[32\89\02\1C\1D3\89\02\1F4\89\02\0C\1F4\89\02\19\133\89\02\0F\F1\00\1E\0F\BC\04\00\0FK\00$/2]w\07\00\0FL\00$\0F\1F\05\01\0F\98\00%\0F\A7\07\1D\097\05\186M\05\04,\00\2224-\00\183\CF\03\1F2\CF\03\15\1F2\CF\03L\9FWithFlags\D8\03(\05D\00\0E\E1\03\0FL\00'\0F\EA\030\0CL\00\1F2\98\008\1F3\98\008\1F4H\04\13O5[40\EC\08.\0FH\04\0D\1F5\EC\08\1C\0F\F9\00+\1F]\9C\040\0D\9A\01\0F\A5\040\0D:\02\0F\AE\041\0D\DB\02\0F\B7\041\0D|\03\0F\C0\04I\08-\00\1F3$\0A6\F6\05visible .entry findK\8E\04\00\88\00\01\13\00\0E]\04\0C\1B\00\1F1\1B\00\07\1F2\1B\00\07\1F3\1B\00\07\1F4\1B\00\07\1F5\1B\00\07\1F6\1B\00\07\1F7\EA\03\13?6[8\EA\03\16\ABpred %p<7>\FC\03-16\FD\03?115\FF\03\0C\1F6G\08\19I8, [\DE\00\0F\D1\02\00\1B7$\00\1F6$\00\00\1B6$\00\1F5$\00\00\1B5$\00\0F;\04\01\1B4$\00\1F3_\04\04\09\19\02\0F\DA\03\04\09X\02\0F\A9\03\04\09\97\02\13]:\01#to\81\13\04*\00\119>\03\138\1F\00\0A\1C\00!10\1D\00\1F9<\00\05!11 \00\1F7=\00\03\122\DB\03\1F1>\00\06\113!\00\1F6>\00\03\124>\00\1F3>\00\06\115!\00\1F5>\00\03\126>\00\1F5>\00\06\117!\00\1F4>\00\03\128>\00\1F7>\00\06\149\A0\04\0F>\00\00\1225\01/19\EA\04\19\1A0\17\00)16\D5\04\0C\EC\04*18\18\00\03\ED\04:d16\18\00\144u\00\1B4\18\00\03w\00*12\18\00\135w\00+10\DC\0Dj%tid.xb\05$64\8F\05\098\0AO%cta-\00\00\1F8\8F\05\02\1A0&\00$72\7F\05\F2\01bra.uni LBB6_1;\0A\08\00\10:\E8\02\11s=\00Ed21,5\00\01\00\03\04\7F\01$2,q\01\B0;\0Asetp.ge.s\1C\004p1,9\00\01(\00\A3;\0A@%p1 brag\00\1B1x\00\132x\00'2:`\00455,\BB\01\08w\00556,\8C\01\17;\A7\00557,\02\01T;\0Ashl\EE\04458, \00\833;\0Aadd.s\19\00$9,Q\00\01'\00\08f\00 60N\00\00$\00\94];\0Amul.lo7\00461,\22\00I2068S\00462,\BB\00\01*\00\08\A1\00563,\D0\01\09\A1\00464, \00\1A2N\00'5,U\00\2264\A1\00\01\D3\01\127\9F\00j65+103\98\01\146!\01\1B4\09\01%67\09\01\0Bh\00$8,9\00\01'\00\07h\00\138h\00\158\E4\01\12t\D0\002p3,\87\001%r8\E0\01\163\E0\01\1B7\DF\01\133\DF\01\183\DF\01/69\DF\01\02/70\DF\01\03/71\DF\01\04472, \00\0A\DF\01473,Q\00\01'\00\09f\00\124\D8\00-73\DF\01475,\22\00\0D\DF\01476,\BB\00\01*\00\07)\01\189\DD\01$ad\B8\00\02\D9\0529, \9D\05\00I\00\05\D2\00\01=\01*10\CE\00\02\8B\01\1D7\A4\01779,\82\00'78{\00#11\CD\00\1E9\0D\02/80\0D\02\04%817\01\0Ai\00482,9\00\01'\00\08i\00\122i\00$82\0E\02#le\0E\02#4,\89\00\00&\00\01\10\02\1F4\10\02\07\134\10\02\184\10\02/83\10\02\02584,c\05\08\10\02/85\10\02\04486, \00\0A\10\02487,Q\00\01'\00\09f\00\03\E8\02-87\10\02\138\B8\07\1F8\10\02\00490,\BB\00\01*\00\08\A1\00/91\EF\03\04\129a\01\1D9z\01793,U\00)92N\00\03\B1\02I93+4 \01595,\CA\06\0C\87\05$5,;\00\01)\00\01\97\01\165\97\01\1B6\97\01\135\97\01\185\97\01/96\97\01\02/97\97\01\03/98\97\01\04499, \00\0A\97\01D100,R\00\01(\00\08g\00#10\DC\02=100\9A\01E102,%\00\0D\9C\01D103,\C1\00\02-\00\08\A8\00?104\9F\01\04E105,\22\00\1B2S\00(6,[\00:105T\00\147\AD\0086+4\80\0D\02\C0\00\13,%\00\0Bw\01\136w\01*6:\18\00\137\18\00\D87:\0Abar.sync 0\8E\03\0AP\06\00\FA\01\14n\8F\03#6,!\00\110\F5\01\166\F5\01\1B9~\00\138f\00)8:w\01\1F8\DF\01\03?109\E0\01\04\131\C3\0A\01\22\00\0B\E2\01\03\BE\0A#10\EF\09)10\E4\01\04W\04J111]\19\00\183\0C\06\09R\00%4,\22\00\04R\00\08n\01\141\C0\09+12\F0\00\139\F0\00\1A9V\01\0A\07\09\140\08\09'0:p\01\184\08\09\07\E3\05#5,\1E\00\1F1e\09\02/15f\09\05\181t\01\1F2\00\05\03/24\10\07\03\1F2\00\05\05\122\A4\02\1D2\00\05427,Q\00\01'\00\09f\00\03\00\05\1E2\00\05\132\83\0B\0F\00\05\01430,\BB\00\01*\00\08\A1\00\1F3\00\05\05\123\B6\03\1D3\00\05733,U\00'32\EC\02\03\FE\04.33\E2\06/34\E2\06\04%35\09\01\0Bh\00$6,9\00\01'\00\07h\00\135h\00\1D6R\03\222,\87\00\22%rH\05\172\CF\0A\0DG\0B\04\D0\0A\191\D1\0A\1434\05\1A2\C3\05/38\FA\01\02/39\FA\01\03/40\FA\01\04441, \00\0A\FA\01442,Q\00\01'\00\08f\00\2243\F3\00-42\FA\01444,\22\00\0D\FA\01445,\BB\00\01*\00\09\A1\00\1F6\FA\01\04\134\0C\0E\1C6\92\01748,U\00)47N\00\139\A1\00+8+O\00450,!\00\0AO\00451,p\01\01'\00\07\E1\01\136\D7\0B\0Aj\04552,\98\0D\0Ac\00\153S\01\0Bc\00$4,9\00\01'\00\07\FA\03\00\1D\00\01\F9\03\0C`\07$13\17\02\B03:\0Aret;\0A\0A}\0A\00\00\00", section ".nv_fatbin", align 8
|
|
@__cuda_fatbin_wrapper = internal constant { i32, i32, i8*, i8* } { i32 1180844977, i32 1, i8* getelementptr inbounds ([15913 x i8], [15913 x i8]* @0, i64 0, i64 0), i8* null }, section ".nvFatBinSegment", align 8
|
|
@__cuda_gpubin_handle = internal global i8** null, align 8
|
|
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* bitcast (void (i8*)* @__cuda_module_ctor to void ()*), i8* null }]
|
|
|
|
; Function Attrs: noinline optnone uwtable
|
|
define dso_local void @findK(i64 %height, %struct.knode* %knodesD, i64 %knodes_elem, %struct.record* %recordsD, i64* %currKnodeD, i64* %offsetD, i32* %keysD, %struct.record* %ansD) #0 {
|
|
entry:
|
|
%height.addr = alloca i64, align 8
|
|
%knodesD.addr = alloca %struct.knode*, align 8
|
|
%knodes_elem.addr = alloca i64, align 8
|
|
%recordsD.addr = alloca %struct.record*, align 8
|
|
%currKnodeD.addr = alloca i64*, align 8
|
|
%offsetD.addr = alloca i64*, align 8
|
|
%keysD.addr = alloca i32*, align 8
|
|
%ansD.addr = alloca %struct.record*, align 8
|
|
%grid_dim = alloca %struct.dim3, align 8
|
|
%block_dim = alloca %struct.dim3, align 8
|
|
%shmem_size = alloca i64, align 8
|
|
%stream = alloca i8*, align 8
|
|
%grid_dim.coerce = alloca { i64, i32 }, align 8
|
|
%block_dim.coerce = alloca { i64, i32 }, align 8
|
|
store i64 %height, i64* %height.addr, align 8
|
|
store %struct.knode* %knodesD, %struct.knode** %knodesD.addr, align 8
|
|
store i64 %knodes_elem, i64* %knodes_elem.addr, align 8
|
|
store %struct.record* %recordsD, %struct.record** %recordsD.addr, align 8
|
|
store i64* %currKnodeD, i64** %currKnodeD.addr, align 8
|
|
store i64* %offsetD, i64** %offsetD.addr, align 8
|
|
store i32* %keysD, i32** %keysD.addr, align 8
|
|
store %struct.record* %ansD, %struct.record** %ansD.addr, align 8
|
|
%kernel_args = alloca i8*, i64 8, align 16
|
|
%0 = bitcast i64* %height.addr to i8*
|
|
%1 = getelementptr i8*, i8** %kernel_args, i32 0
|
|
store i8* %0, i8** %1
|
|
%2 = bitcast %struct.knode** %knodesD.addr to i8*
|
|
%3 = getelementptr i8*, i8** %kernel_args, i32 1
|
|
store i8* %2, i8** %3
|
|
%4 = bitcast i64* %knodes_elem.addr to i8*
|
|
%5 = getelementptr i8*, i8** %kernel_args, i32 2
|
|
store i8* %4, i8** %5
|
|
%6 = bitcast %struct.record** %recordsD.addr to i8*
|
|
%7 = getelementptr i8*, i8** %kernel_args, i32 3
|
|
store i8* %6, i8** %7
|
|
%8 = bitcast i64** %currKnodeD.addr to i8*
|
|
%9 = getelementptr i8*, i8** %kernel_args, i32 4
|
|
store i8* %8, i8** %9
|
|
%10 = bitcast i64** %offsetD.addr to i8*
|
|
%11 = getelementptr i8*, i8** %kernel_args, i32 5
|
|
store i8* %10, i8** %11
|
|
%12 = bitcast i32** %keysD.addr to i8*
|
|
%13 = getelementptr i8*, i8** %kernel_args, i32 6
|
|
store i8* %12, i8** %13
|
|
%14 = bitcast %struct.record** %ansD.addr to i8*
|
|
%15 = getelementptr i8*, i8** %kernel_args, i32 7
|
|
store i8* %14, i8** %15
|
|
%16 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
|
|
%17 = load i64, i64* %shmem_size, align 8
|
|
%18 = load i8*, i8** %stream, align 8
|
|
%19 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
|
|
%20 = bitcast %struct.dim3* %grid_dim to i8*
|
|
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %19, i8* align 8 %20, i64 12, i1 false)
|
|
%21 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
|
|
%22 = load i64, i64* %21, align 8
|
|
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
|
|
%24 = load i32, i32* %23, align 8
|
|
%25 = bitcast { i64, i32 }* %block_dim.coerce to i8*
|
|
%26 = bitcast %struct.dim3* %block_dim to i8*
|
|
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %25, i8* align 8 %26, i64 12, i1 false)
|
|
%27 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
|
|
%28 = load i64, i64* %27, align 8
|
|
%29 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
|
|
%30 = load i32, i32* %29, align 8
|
|
%31 = bitcast i8* %18 to %struct.CUstream_st*
|
|
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i64, %struct.knode*, i64, %struct.record*, i64*, i64*, i32*, %struct.record*)* @findK to i8*), i64 %22, i32 %24, i64 %28, i32 %30, i8** %kernel_args, i64 %17, %struct.CUstream_st* %31)
|
|
br label %setup.end
|
|
|
|
setup.end: ; preds = %entry
|
|
ret void
|
|
}
|
|
|
|
declare dso_local i32 @__cudaPopCallConfiguration(%struct.dim3*, %struct.dim3*, i64*, i8**)
|
|
|
|
declare dso_local i32 @cudaLaunchKernel(i8*, i64, i32, i64, i32, i8**, i64, %struct.CUstream_st*)
|
|
|
|
; Function Attrs: argmemonly nounwind willreturn
|
|
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #1
|
|
|
|
; Function Attrs: noinline optnone uwtable
|
|
define dso_local void @kernel_gpu_cuda_wrapper(%struct.record* %records, i64 %records_mem, %struct.knode* %knodes, i64 %knodes_elem, i64 %knodes_mem, i32 %order, i64 %maxheight, i32 %count, i64* %currKnode, i64* %offset, i32* %keys, %struct.record* %ans) #0 {
|
|
entry:
|
|
%records.addr = alloca %struct.record*, align 8
|
|
%records_mem.addr = alloca i64, align 8
|
|
%knodes.addr = alloca %struct.knode*, align 8
|
|
%knodes_elem.addr = alloca i64, align 8
|
|
%knodes_mem.addr = alloca i64, align 8
|
|
%order.addr = alloca i32, align 4
|
|
%maxheight.addr = alloca i64, align 8
|
|
%count.addr = alloca i32, align 4
|
|
%currKnode.addr = alloca i64*, align 8
|
|
%offset.addr = alloca i64*, align 8
|
|
%keys.addr = alloca i32*, align 8
|
|
%ans.addr = alloca %struct.record*, align 8
|
|
%time0 = alloca i64, align 8
|
|
%time1 = alloca i64, align 8
|
|
%time2 = alloca i64, align 8
|
|
%time3 = alloca i64, align 8
|
|
%time4 = alloca i64, align 8
|
|
%time5 = alloca i64, align 8
|
|
%time6 = alloca i64, align 8
|
|
%numBlocks = alloca i32, align 4
|
|
%threadsPerBlock = alloca i32, align 4
|
|
%recordsD = alloca %struct.record*, align 8
|
|
%knodesD = alloca %struct.knode*, align 8
|
|
%currKnodeD = alloca i64*, align 8
|
|
%offsetD = alloca i64*, align 8
|
|
%keysD = alloca i32*, align 8
|
|
%ansD = alloca %struct.record*, align 8
|
|
%agg.tmp = alloca %struct.dim3, align 4
|
|
%agg.tmp32 = alloca %struct.dim3, align 4
|
|
%agg.tmp.coerce = alloca { i64, i32 }, align 4
|
|
%agg.tmp32.coerce = alloca { i64, i32 }, align 4
|
|
store %struct.record* %records, %struct.record** %records.addr, align 8
|
|
store i64 %records_mem, i64* %records_mem.addr, align 8
|
|
store %struct.knode* %knodes, %struct.knode** %knodes.addr, align 8
|
|
store i64 %knodes_elem, i64* %knodes_elem.addr, align 8
|
|
store i64 %knodes_mem, i64* %knodes_mem.addr, align 8
|
|
store i32 %order, i32* %order.addr, align 4
|
|
store i64 %maxheight, i64* %maxheight.addr, align 8
|
|
store i32 %count, i32* %count.addr, align 4
|
|
store i64* %currKnode, i64** %currKnode.addr, align 8
|
|
store i64* %offset, i64** %offset.addr, align 8
|
|
store i32* %keys, i32** %keys.addr, align 8
|
|
store %struct.record* %ans, %struct.record** %ans.addr, align 8
|
|
%call = call i64 @get_time()
|
|
store i64 %call, i64* %time0, align 8
|
|
%call1 = call i32 @cudaThreadSynchronize()
|
|
%0 = load i32, i32* %count.addr, align 4
|
|
store i32 %0, i32* %numBlocks, align 4
|
|
%1 = load i32, i32* %order.addr, align 4
|
|
%cmp = icmp slt i32 %1, 1024
|
|
br i1 %cmp, label %cond.true, label %cond.false
|
|
|
|
cond.true: ; preds = %entry
|
|
%2 = load i32, i32* %order.addr, align 4
|
|
br label %cond.end
|
|
|
|
cond.false: ; preds = %entry
|
|
br label %cond.end
|
|
|
|
cond.end: ; preds = %cond.false, %cond.true
|
|
%cond = phi i32 [ %2, %cond.true ], [ 1024, %cond.false ]
|
|
store i32 %cond, i32* %threadsPerBlock, align 4
|
|
%3 = load i32, i32* %numBlocks, align 4
|
|
%4 = load i32, i32* %threadsPerBlock, align 4
|
|
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str, i64 0, i64 0), i32 %3, i32 %4)
|
|
%call3 = call i64 @get_time()
|
|
store i64 %call3, i64* %time1, align 8
|
|
%5 = bitcast %struct.record** %recordsD to i8**
|
|
%6 = load i64, i64* %records_mem.addr, align 8
|
|
%call4 = call i32 @cudaMalloc(i8** %5, i64 %6)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
|
|
%7 = bitcast %struct.knode** %knodesD to i8**
|
|
%8 = load i64, i64* %knodes_mem.addr, align 8
|
|
%call5 = call i32 @cudaMalloc(i8** %7, i64 %8)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
|
|
%9 = bitcast i64** %currKnodeD to i8**
|
|
%10 = load i32, i32* %count.addr, align 4
|
|
%conv = sext i32 %10 to i64
|
|
%mul = mul i64 %conv, 8
|
|
%call6 = call i32 @cudaMalloc(i8** %9, i64 %mul)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0))
|
|
%11 = bitcast i64** %offsetD to i8**
|
|
%12 = load i32, i32* %count.addr, align 4
|
|
%conv7 = sext i32 %12 to i64
|
|
%mul8 = mul i64 %conv7, 8
|
|
%call9 = call i32 @cudaMalloc(i8** %11, i64 %mul8)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.3, i64 0, i64 0))
|
|
%13 = bitcast i32** %keysD to i8**
|
|
%14 = load i32, i32* %count.addr, align 4
|
|
%conv10 = sext i32 %14 to i64
|
|
%mul11 = mul i64 %conv10, 4
|
|
%call12 = call i32 @cudaMalloc(i8** %13, i64 %mul11)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.4, i64 0, i64 0))
|
|
%15 = bitcast %struct.record** %ansD to i8**
|
|
%16 = load i32, i32* %count.addr, align 4
|
|
%conv13 = sext i32 %16 to i64
|
|
%mul14 = mul i64 %conv13, 4
|
|
%call15 = call i32 @cudaMalloc(i8** %15, i64 %mul14)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.5, i64 0, i64 0))
|
|
%call16 = call i64 @get_time()
|
|
store i64 %call16, i64* %time2, align 8
|
|
%17 = load %struct.record*, %struct.record** %recordsD, align 8
|
|
%18 = bitcast %struct.record* %17 to i8*
|
|
%19 = load %struct.record*, %struct.record** %records.addr, align 8
|
|
%20 = bitcast %struct.record* %19 to i8*
|
|
%21 = load i64, i64* %records_mem.addr, align 8
|
|
%call17 = call i32 @cudaMemcpy(i8* %18, i8* %20, i64 %21, i32 1)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.6, i64 0, i64 0))
|
|
%22 = load %struct.knode*, %struct.knode** %knodesD, align 8
|
|
%23 = bitcast %struct.knode* %22 to i8*
|
|
%24 = load %struct.knode*, %struct.knode** %knodes.addr, align 8
|
|
%25 = bitcast %struct.knode* %24 to i8*
|
|
%26 = load i64, i64* %knodes_mem.addr, align 8
|
|
%call18 = call i32 @cudaMemcpy(i8* %23, i8* %25, i64 %26, i32 1)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.6, i64 0, i64 0))
|
|
%27 = load i64*, i64** %currKnodeD, align 8
|
|
%28 = bitcast i64* %27 to i8*
|
|
%29 = load i64*, i64** %currKnode.addr, align 8
|
|
%30 = bitcast i64* %29 to i8*
|
|
%31 = load i32, i32* %count.addr, align 4
|
|
%conv19 = sext i32 %31 to i64
|
|
%mul20 = mul i64 %conv19, 8
|
|
%call21 = call i32 @cudaMemcpy(i8* %28, i8* %30, i64 %mul20, i32 1)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.7, i64 0, i64 0))
|
|
%32 = load i64*, i64** %offsetD, align 8
|
|
%33 = bitcast i64* %32 to i8*
|
|
%34 = load i64*, i64** %offset.addr, align 8
|
|
%35 = bitcast i64* %34 to i8*
|
|
%36 = load i32, i32* %count.addr, align 4
|
|
%conv22 = sext i32 %36 to i64
|
|
%mul23 = mul i64 %conv22, 8
|
|
%call24 = call i32 @cudaMemcpy(i8* %33, i8* %35, i64 %mul23, i32 1)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0))
|
|
%37 = load i32*, i32** %keysD, align 8
|
|
%38 = bitcast i32* %37 to i8*
|
|
%39 = load i32*, i32** %keys.addr, align 8
|
|
%40 = bitcast i32* %39 to i8*
|
|
%41 = load i32, i32* %count.addr, align 4
|
|
%conv25 = sext i32 %41 to i64
|
|
%mul26 = mul i64 %conv25, 4
|
|
%call27 = call i32 @cudaMemcpy(i8* %38, i8* %40, i64 %mul26, i32 1)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.9, i64 0, i64 0))
|
|
%42 = load %struct.record*, %struct.record** %ansD, align 8
|
|
%43 = bitcast %struct.record* %42 to i8*
|
|
%44 = load %struct.record*, %struct.record** %ans.addr, align 8
|
|
%45 = bitcast %struct.record* %44 to i8*
|
|
%46 = load i32, i32* %count.addr, align 4
|
|
%conv28 = sext i32 %46 to i64
|
|
%mul29 = mul i64 %conv28, 4
|
|
%call30 = call i32 @cudaMemcpy(i8* %43, i8* %45, i64 %mul29, i32 1)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.10, i64 0, i64 0))
|
|
%call31 = call i64 @get_time()
|
|
store i64 %call31, i64* %time3, align 8
|
|
%47 = load i32, i32* %numBlocks, align 4
|
|
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %47, i32 1, i32 1)
|
|
%48 = load i32, i32* %threadsPerBlock, align 4
|
|
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp32, i32 %48, i32 1, i32 1)
|
|
%49 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
|
|
%50 = bitcast %struct.dim3* %agg.tmp to i8*
|
|
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %49, i8* align 4 %50, i64 12, i1 false)
|
|
%51 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
|
|
%52 = load i64, i64* %51, align 4
|
|
%53 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
|
|
%54 = load i32, i32* %53, align 4
|
|
%55 = bitcast { i64, i32 }* %agg.tmp32.coerce to i8*
|
|
%56 = bitcast %struct.dim3* %agg.tmp32 to i8*
|
|
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %55, i8* align 4 %56, i64 12, i1 false)
|
|
%57 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp32.coerce, i32 0, i32 0
|
|
%58 = load i64, i64* %57, align 4
|
|
%59 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp32.coerce, i32 0, i32 1
|
|
%60 = load i32, i32* %59, align 4
|
|
%call33 = call i32 @__cudaPushCallConfiguration(i64 %52, i32 %54, i64 %58, i32 %60, i64 0, i8* null)
|
|
%tobool = icmp ne i32 %call33, 0
|
|
br i1 %tobool, label %kcall.end, label %kcall.configok
|
|
|
|
kcall.configok: ; preds = %cond.end
|
|
%61 = load i64, i64* %maxheight.addr, align 8
|
|
%62 = load %struct.knode*, %struct.knode** %knodesD, align 8
|
|
%63 = load i64, i64* %knodes_elem.addr, align 8
|
|
%64 = load %struct.record*, %struct.record** %recordsD, align 8
|
|
%65 = load i64*, i64** %currKnodeD, align 8
|
|
%66 = load i64*, i64** %offsetD, align 8
|
|
%67 = load i32*, i32** %keysD, align 8
|
|
%68 = load %struct.record*, %struct.record** %ansD, align 8
|
|
call void @findK(i64 %61, %struct.knode* %62, i64 %63, %struct.record* %64, i64* %65, i64* %66, i32* %67, %struct.record* %68)
|
|
br label %kcall.end
|
|
|
|
kcall.end: ; preds = %kcall.configok, %cond.end
|
|
%call34 = call i32 @cudaThreadSynchronize()
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0))
|
|
%call35 = call i64 @get_time()
|
|
store i64 %call35, i64* %time4, align 8
|
|
%69 = load %struct.record*, %struct.record** %ans.addr, align 8
|
|
%70 = bitcast %struct.record* %69 to i8*
|
|
%71 = load %struct.record*, %struct.record** %ansD, align 8
|
|
%72 = bitcast %struct.record* %71 to i8*
|
|
%73 = load i32, i32* %count.addr, align 4
|
|
%conv36 = sext i32 %73 to i64
|
|
%mul37 = mul i64 %conv36, 4
|
|
%call38 = call i32 @cudaMemcpy(i8* %70, i8* %72, i64 %mul37, i32 2)
|
|
call void @checkCUDAError(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.12, i64 0, i64 0))
|
|
%call39 = call i64 @get_time()
|
|
store i64 %call39, i64* %time5, align 8
|
|
%74 = load %struct.record*, %struct.record** %recordsD, align 8
|
|
%75 = bitcast %struct.record* %74 to i8*
|
|
%call40 = call i32 @cudaFree(i8* %75)
|
|
%76 = load %struct.knode*, %struct.knode** %knodesD, align 8
|
|
%77 = bitcast %struct.knode* %76 to i8*
|
|
%call41 = call i32 @cudaFree(i8* %77)
|
|
%78 = load i64*, i64** %currKnodeD, align 8
|
|
%79 = bitcast i64* %78 to i8*
|
|
%call42 = call i32 @cudaFree(i8* %79)
|
|
%80 = load i64*, i64** %offsetD, align 8
|
|
%81 = bitcast i64* %80 to i8*
|
|
%call43 = call i32 @cudaFree(i8* %81)
|
|
%82 = load i32*, i32** %keysD, align 8
|
|
%83 = bitcast i32* %82 to i8*
|
|
%call44 = call i32 @cudaFree(i8* %83)
|
|
%84 = load %struct.record*, %struct.record** %ansD, align 8
|
|
%85 = bitcast %struct.record* %84 to i8*
|
|
%call45 = call i32 @cudaFree(i8* %85)
|
|
%call46 = call i64 @get_time()
|
|
store i64 %call46, i64* %time6, align 8
|
|
%call47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.13, i64 0, i64 0))
|
|
%86 = load i64, i64* %time1, align 8
|
|
%87 = load i64, i64* %time0, align 8
|
|
%sub = sub nsw i64 %86, %87
|
|
%conv48 = sitofp i64 %sub to float
|
|
%div = fdiv float %conv48, 1.000000e+06
|
|
%conv49 = fpext float %div to double
|
|
%88 = load i64, i64* %time1, align 8
|
|
%89 = load i64, i64* %time0, align 8
|
|
%sub50 = sub nsw i64 %88, %89
|
|
%conv51 = sitofp i64 %sub50 to float
|
|
%90 = load i64, i64* %time6, align 8
|
|
%91 = load i64, i64* %time0, align 8
|
|
%sub52 = sub nsw i64 %90, %91
|
|
%conv53 = sitofp i64 %sub52 to float
|
|
%div54 = fdiv float %conv51, %conv53
|
|
%mul55 = fmul contract float %div54, 1.000000e+02
|
|
%conv56 = fpext float %mul55 to double
|
|
%call57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.14, i64 0, i64 0), double %conv49, double %conv56)
|
|
%92 = load i64, i64* %time2, align 8
|
|
%93 = load i64, i64* %time1, align 8
|
|
%sub58 = sub nsw i64 %92, %93
|
|
%conv59 = sitofp i64 %sub58 to float
|
|
%div60 = fdiv float %conv59, 1.000000e+06
|
|
%conv61 = fpext float %div60 to double
|
|
%94 = load i64, i64* %time2, align 8
|
|
%95 = load i64, i64* %time1, align 8
|
|
%sub62 = sub nsw i64 %94, %95
|
|
%conv63 = sitofp i64 %sub62 to float
|
|
%96 = load i64, i64* %time6, align 8
|
|
%97 = load i64, i64* %time0, align 8
|
|
%sub64 = sub nsw i64 %96, %97
|
|
%conv65 = sitofp i64 %sub64 to float
|
|
%div66 = fdiv float %conv63, %conv65
|
|
%mul67 = fmul contract float %div66, 1.000000e+02
|
|
%conv68 = fpext float %mul67 to double
|
|
%call69 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.15, i64 0, i64 0), double %conv61, double %conv68)
|
|
%98 = load i64, i64* %time3, align 8
|
|
%99 = load i64, i64* %time2, align 8
|
|
%sub70 = sub nsw i64 %98, %99
|
|
%conv71 = sitofp i64 %sub70 to float
|
|
%div72 = fdiv float %conv71, 1.000000e+06
|
|
%conv73 = fpext float %div72 to double
|
|
%100 = load i64, i64* %time3, align 8
|
|
%101 = load i64, i64* %time2, align 8
|
|
%sub74 = sub nsw i64 %100, %101
|
|
%conv75 = sitofp i64 %sub74 to float
|
|
%102 = load i64, i64* %time6, align 8
|
|
%103 = load i64, i64* %time0, align 8
|
|
%sub76 = sub nsw i64 %102, %103
|
|
%conv77 = sitofp i64 %sub76 to float
|
|
%div78 = fdiv float %conv75, %conv77
|
|
%mul79 = fmul contract float %div78, 1.000000e+02
|
|
%conv80 = fpext float %mul79 to double
|
|
%call81 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.16, i64 0, i64 0), double %conv73, double %conv80)
|
|
%104 = load i64, i64* %time4, align 8
|
|
%105 = load i64, i64* %time3, align 8
|
|
%sub82 = sub nsw i64 %104, %105
|
|
%conv83 = sitofp i64 %sub82 to float
|
|
%div84 = fdiv float %conv83, 1.000000e+06
|
|
%conv85 = fpext float %div84 to double
|
|
%106 = load i64, i64* %time4, align 8
|
|
%107 = load i64, i64* %time3, align 8
|
|
%sub86 = sub nsw i64 %106, %107
|
|
%conv87 = sitofp i64 %sub86 to float
|
|
%108 = load i64, i64* %time6, align 8
|
|
%109 = load i64, i64* %time0, align 8
|
|
%sub88 = sub nsw i64 %108, %109
|
|
%conv89 = sitofp i64 %sub88 to float
|
|
%div90 = fdiv float %conv87, %conv89
|
|
%mul91 = fmul contract float %div90, 1.000000e+02
|
|
%conv92 = fpext float %mul91 to double
|
|
%call93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.17, i64 0, i64 0), double %conv85, double %conv92)
|
|
%110 = load i64, i64* %time5, align 8
|
|
%111 = load i64, i64* %time4, align 8
|
|
%sub94 = sub nsw i64 %110, %111
|
|
%conv95 = sitofp i64 %sub94 to float
|
|
%div96 = fdiv float %conv95, 1.000000e+06
|
|
%conv97 = fpext float %div96 to double
|
|
%112 = load i64, i64* %time5, align 8
|
|
%113 = load i64, i64* %time4, align 8
|
|
%sub98 = sub nsw i64 %112, %113
|
|
%conv99 = sitofp i64 %sub98 to float
|
|
%114 = load i64, i64* %time6, align 8
|
|
%115 = load i64, i64* %time0, align 8
|
|
%sub100 = sub nsw i64 %114, %115
|
|
%conv101 = sitofp i64 %sub100 to float
|
|
%div102 = fdiv float %conv99, %conv101
|
|
%mul103 = fmul contract float %div102, 1.000000e+02
|
|
%conv104 = fpext float %mul103 to double
|
|
%call105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.18, i64 0, i64 0), double %conv97, double %conv104)
|
|
%116 = load i64, i64* %time6, align 8
|
|
%117 = load i64, i64* %time5, align 8
|
|
%sub106 = sub nsw i64 %116, %117
|
|
%conv107 = sitofp i64 %sub106 to float
|
|
%div108 = fdiv float %conv107, 1.000000e+06
|
|
%conv109 = fpext float %div108 to double
|
|
%118 = load i64, i64* %time6, align 8
|
|
%119 = load i64, i64* %time5, align 8
|
|
%sub110 = sub nsw i64 %118, %119
|
|
%conv111 = sitofp i64 %sub110 to float
|
|
%120 = load i64, i64* %time6, align 8
|
|
%121 = load i64, i64* %time0, align 8
|
|
%sub112 = sub nsw i64 %120, %121
|
|
%conv113 = sitofp i64 %sub112 to float
|
|
%div114 = fdiv float %conv111, %conv113
|
|
%mul115 = fmul contract float %div114, 1.000000e+02
|
|
%conv116 = fpext float %mul115 to double
|
|
%call117 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.19, i64 0, i64 0), double %conv109, double %conv116)
|
|
%call118 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.20, i64 0, i64 0))
|
|
%122 = load i64, i64* %time6, align 8
|
|
%123 = load i64, i64* %time0, align 8
|
|
%sub119 = sub nsw i64 %122, %123
|
|
%conv120 = sitofp i64 %sub119 to float
|
|
%div121 = fdiv float %conv120, 1.000000e+06
|
|
%conv122 = fpext float %div121 to double
|
|
%call123 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.21, i64 0, i64 0), double %conv122)
|
|
ret void
|
|
}
|
|
|
|
declare dso_local i64 @get_time() #2
|
|
|
|
declare dso_local i32 @cudaThreadSynchronize() #2
|
|
|
|
declare dso_local i32 @printf(i8*, ...) #2
|
|
|
|
declare dso_local i32 @cudaMalloc(i8**, i64) #2
|
|
|
|
declare dso_local void @checkCUDAError(i8*) #2
|
|
|
|
declare dso_local i32 @cudaMemcpy(i8*, i8*, i64, i32) #2
|
|
|
|
declare dso_local i32 @__cudaPushCallConfiguration(i64, i32, i64, i32, i64, i8*) #2
|
|
|
|
; Function Attrs: noinline nounwind optnone uwtable
|
|
define linkonce_odr dso_local void @_ZN4dim3C2Ejjj(%struct.dim3* %this, i32 %vx, i32 %vy, i32 %vz) unnamed_addr #3 comdat align 2 {
|
|
entry:
|
|
%this.addr = alloca %struct.dim3*, align 8
|
|
%vx.addr = alloca i32, align 4
|
|
%vy.addr = alloca i32, align 4
|
|
%vz.addr = alloca i32, align 4
|
|
store %struct.dim3* %this, %struct.dim3** %this.addr, align 8
|
|
store i32 %vx, i32* %vx.addr, align 4
|
|
store i32 %vy, i32* %vy.addr, align 4
|
|
store i32 %vz, i32* %vz.addr, align 4
|
|
%this1 = load %struct.dim3*, %struct.dim3** %this.addr, align 8
|
|
%x = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 0
|
|
%0 = load i32, i32* %vx.addr, align 4
|
|
store i32 %0, i32* %x, align 4
|
|
%y = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 1
|
|
%1 = load i32, i32* %vy.addr, align 4
|
|
store i32 %1, i32* %y, align 4
|
|
%z = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 2
|
|
%2 = load i32, i32* %vz.addr, align 4
|
|
store i32 %2, i32* %z, align 4
|
|
ret void
|
|
}
|
|
|
|
declare dso_local i32 @cudaFree(i8*) #2
|
|
|
|
define internal void @__cuda_register_globals(i8** %0) {
|
|
entry:
|
|
%1 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i64, %struct.knode*, i64, %struct.record*, i64*, i64*, i32*, %struct.record*)* @findK to i8*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
|
|
ret void
|
|
}
|
|
|
|
declare dso_local i32 @__cudaRegisterFunction(i8**, i8*, i8*, i8*, i32, i8*, i8*, i8*, i8*, i32*)
|
|
|
|
declare dso_local i32 @__cudaRegisterVar(i8**, i8*, i8*, i8*, i32, i32, i32, i32)
|
|
|
|
declare dso_local i8** @__cudaRegisterFatBinary(i8*)
|
|
|
|
define internal void @__cuda_module_ctor(i8* %0) {
|
|
entry:
|
|
%1 = call i8** @__cudaRegisterFatBinary(i8* bitcast ({ i32, i32, i8*, i8* }* @__cuda_fatbin_wrapper to i8*))
|
|
store i8** %1, i8*** @__cuda_gpubin_handle, align 8
|
|
call void @__cuda_register_globals(i8** %1)
|
|
call void @__cudaRegisterFatBinaryEnd(i8** %1)
|
|
%2 = call i32 @atexit(void (i8*)* @__cuda_module_dtor)
|
|
ret void
|
|
}
|
|
|
|
declare dso_local void @__cudaRegisterFatBinaryEnd(i8**)
|
|
|
|
declare dso_local void @__cudaUnregisterFatBinary(i8**)
|
|
|
|
define internal void @__cuda_module_dtor(i8* %0) {
|
|
entry:
|
|
%1 = load i8**, i8*** @__cuda_gpubin_handle, align 8
|
|
call void @__cudaUnregisterFatBinary(i8** %1)
|
|
ret void
|
|
}
|
|
|
|
declare dso_local i32 @atexit(void (i8*)*)
|
|
|
|
attributes #0 = { noinline optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { argmemonly nounwind willreturn }
|
|
attributes #2 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #3 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
|
|
!llvm.module.flags = !{!0, !1}
|
|
!llvm.ident = !{!2}
|
|
|
|
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 10, i32 1]}
|
|
!1 = !{i32 1, !"wchar_size", i32 4}
|
|
!2 = !{!"clang version 10.0.1 (https://github.com/llvm/llvm-project.git ef32c611aa214dea855364efd7ba451ec5ec3f74)"}
|