Xilinx / gemx

Matrix Operation Library for FPGA https://xilinx.github.io/gemx/
Other
63 stars 21 forks source link

multiple definition of `kernelOpLow' #3

Open luckyteddy opened 6 years ago

luckyteddy commented 6 years ago

I build the hw failed. So I tried cpu_emu. make run_cpu_em SDA_FLOW=sw_em GEMX_ddrWidth=32 GEMX_argInstrWide=1 GEMX_gemmMBlocks=8 GEMX_gemmKBlocks=8 GEMX_gemmNBlocks=8 GEMX_numKernels=4 GEMX_runGemv=0 GEMX_runTransp=0 GEMX_runGemm=1 GEMX_part=ku115 GEMX_kernelHlsFreq=250 GEMX_kernelVivadoFreq=300 GEMX_useURAM=1 GEMX_vivadoFlow=EXP XILINX_SDX=/opt/Xilinx/SDx/2017.2

And here is the error info in linking.

** xocc v2017.2_sdx (64-bit) ** SW Build 1972098 on Wed Aug 23 11:34:38 MDT 2017 Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.

INFO: [XOCC 60-629] Linking for software emulation target INFO: [XOCC 60-895] Target platform: /opt/Xilinx/SDx/2017.2/platforms/xilinx_xil-accel-rd-ku115_4ddr-xpr_4_0/xilinx_xil-accel-rd-ku115_4ddr-xpr_4_0.xpfm INFO: [XOCC 60-423] Target device: xilinx:xil-accel-rd-ku115:4ddr-xpr:4.0 WARNING: [XOCC 60-889] User-specified kernel frequency for ID 0 is the same as the default frequency 300 MHz, so it will be ignored INFO: [XOCC 60-694] Validating user connections (map_connect)... INFO: [XOCC 60-690] User connection 'kernel|gemxKernel_0|M_AXI_GMEMM' is valid INFO: [XOCC 60-690] User connection 'core|OCL_REGION_0|M00_AXI' is valid INFO: [XOCC 60-690] User connection 'kernel|gemxKernel_1|M_AXI_GMEMM' is valid INFO: [XOCC 60-690] User connection 'core|OCL_REGION_0|M01_AXI' is valid INFO: [XOCC 60-690] User connection 'kernel|gemxKernel_2|M_AXI_GMEMM' is valid INFO: [XOCC 60-690] User connection 'core|OCL_REGION_0|M02_AXI' is valid INFO: [XOCC 60-690] User connection 'kernel|gemxKernel_3|M_AXI_GMEMM' is valid INFO: [XOCC 60-690] User connection 'core|OCL_REGION_0|M03_AXI' is valid INFO: [XOCC 60-645] kernel flags are '-g -D GMEM_M=0 -D TEST_SDX=1 -D GEMX_dataType=short -D GEMX_dataEqIntType=short -D GEMX_ddrWidth=32 -D GEMX_argInstrWidth=1 -D GEMX_numInstr=16 -D GEMX_gemvkVectorBlocks=512 -D GEMX_gemvmVectorBlocks=512 -D GEMX_gemvmGroups=1 -D GEMX_gemmMBlocks=8 -D GEMX_gemmKBlocks=8 -D GEMX_gemmNBlocks=8 -D GEMX_fracBitsIn=0 -D GEMX_fracBitsOut=0 -D GEMX_macBits=32 -D GEMX_transpBlocks=1 -D GEMX_spmvWidth=8 -D GEMX_spmvkVectorBlocks=2048 -D GEMX_spmvMacGroups=4 -D GEMX_spmvColAddIdxBits=2 -D GEMX_spmvPadA=1 -D GEMX_spmvNumCblocks=1024 -D GEMX_spmvFloatPerDesc=4 -D GEMX_idxType=int32_t -D GEMX_nnzBlocks=8 -D GEMX_spmvKmaxBlocks=32768 -D GEMX_spmvMmaxBlocks=32768 -D GEMX_argPipeline=2 -D GEMX_part=ku115 -D GEMX_useURAM=1 -D GEMX_splitMesh=0 -D GEMX_runGemv=0 -D GEMX_runGemm=1 -D GEMX_runTransp=0 -D GEMX_runSpmv=0 -D GEMX_numKernels=4 -D GEMX_kernelId=3 -I /home/sdx/sdx/gemx/gemx/src -std=c++0x -g' INFO: [XOCC 60-645] kernel flags are '-g -D GMEM_M=0 -D TEST_SDX=1 -D GEMX_dataType=short -D GEMX_dataEqIntType=short -D GEMX_ddrWidth=32 -D GEMX_argInstrWidth=1 -D GEMX_numInstr=16 -D GEMX_gemvkVectorBlocks=512 -D GEMX_gemvmVectorBlocks=512 -D GEMX_gemvmGroups=1 -D GEMX_gemmMBlocks=8 -D GEMX_gemmKBlocks=8 -D GEMX_gemmNBlocks=8 -D GEMX_fracBitsIn=0 -D GEMX_fracBitsOut=0 -D GEMX_macBits=32 -D GEMX_transpBlocks=1 -D GEMX_spmvWidth=8 -D GEMX_spmvkVectorBlocks=2048 -D GEMX_spmvMacGroups=4 -D GEMX_spmvColAddIdxBits=2 -D GEMX_spmvPadA=1 -D GEMX_spmvNumCblocks=1024 -D GEMX_spmvFloatPerDesc=4 -D GEMX_idxType=int32_t -D GEMX_nnzBlocks=8 -D GEMX_spmvKmaxBlocks=32768 -D GEMX_spmvMmaxBlocks=32768 -D GEMX_argPipeline=2 -D GEMX_part=ku115 -D GEMX_useURAM=1 -D GEMX_splitMesh=0 -D GEMX_runGemv=0 -D GEMX_runGemm=1 -D GEMX_runTransp=0 -D GEMX_runSpmv=0 -D GEMX_numKernels=4 -D GEMX_kernelId=2 -I /home/sdx/sdx/gemx/gemx/src -std=c++0x -g' INFO: [XOCC 60-645] kernel flags are '-g -D GMEM_M=0 -D TEST_SDX=1 -D GEMX_dataType=short -D GEMX_dataEqIntType=short -D GEMX_ddrWidth=32 -D GEMX_argInstrWidth=1 -D GEMX_numInstr=16 -D GEMX_gemvkVectorBlocks=512 -D GEMX_gemvmVectorBlocks=512 -D GEMX_gemvmGroups=1 -D GEMX_gemmMBlocks=8 -D GEMX_gemmKBlocks=8 -D GEMX_gemmNBlocks=8 -D GEMX_fracBitsIn=0 -D GEMX_fracBitsOut=0 -D GEMX_macBits=32 -D GEMX_transpBlocks=1 -D GEMX_spmvWidth=8 -D GEMX_spmvkVectorBlocks=2048 -D GEMX_spmvMacGroups=4 -D GEMX_spmvColAddIdxBits=2 -D GEMX_spmvPadA=1 -D GEMX_spmvNumCblocks=1024 -D GEMX_spmvFloatPerDesc=4 -D GEMX_idxType=int32_t -D GEMX_nnzBlocks=8 -D GEMX_spmvKmaxBlocks=32768 -D GEMX_spmvMmaxBlocks=32768 -D GEMX_argPipeline=2 -D GEMX_part=ku115 -D GEMX_useURAM=1 -D GEMX_splitMesh=0 -D GEMX_runGemv=0 -D GEMX_runGemm=1 -D GEMX_runTransp=0 -D GEMX_runSpmv=0 -D GEMX_numKernels=4 -D GEMX_kernelId=0 -I /home/sdx/sdx/gemx/gemx/src -std=c++0x -g' INFO: [XOCC 60-645] kernel flags are '-g -D GMEM_M=0 -D TEST_SDX=1 -D GEMX_dataType=short -D GEMX_dataEqIntType=short -D GEMX_ddrWidth=32 -D GEMX_argInstrWidth=1 -D GEMX_numInstr=16 -D GEMX_gemvkVectorBlocks=512 -D GEMX_gemvmVectorBlocks=512 -D GEMX_gemvmGroups=1 -D GEMX_gemmMBlocks=8 -D GEMX_gemmKBlocks=8 -D GEMX_gemmNBlocks=8 -D GEMX_fracBitsIn=0 -D GEMX_fracBitsOut=0 -D GEMX_macBits=32 -D GEMX_transpBlocks=1 -D GEMX_spmvWidth=8 -D GEMX_spmvkVectorBlocks=2048 -D GEMX_spmvMacGroups=4 -D GEMX_spmvColAddIdxBits=2 -D GEMX_spmvPadA=1 -D GEMX_spmvNumCblocks=1024 -D GEMX_spmvFloatPerDesc=4 -D GEMX_idxType=int32_t -D GEMX_nnzBlocks=8 -D GEMX_spmvKmaxBlocks=32768 -D GEMX_spmvMmaxBlocks=32768 -D GEMX_argPipeline=2 -D GEMX_part=ku115 -D GEMX_useURAM=1 -D GEMX_splitMesh=0 -D GEMX_runGemv=0 -D GEMX_runGemm=1 -D GEMX_runTransp=0 -D GEMX_runSpmv=0 -D GEMX_numKernels=4 -D GEMX_kernelId=1 -I /home/sdx/sdx/gemx/gemx/src -std=c++0x -g' ERROR: [XOCC 17-1309] Gcc: /home/sdx/sdx/gemx/gemx/out_cpu_emu/_xocc_link_gemx_gemx.dir/impl/kernels/gemxKernel_2/gemxKernel_2/cpu_sources/gemx_kernel.cpp:50: multiple definition of kernelOpLow' ERROR: [XOCC 17-1309] Gcc: gemxKernel_3/gemxKernel_3.csim_cu.a(gemx_kernel.o):/home/sdx/sdx/gemx/gemx/out_cpu_emu/_xocc_link_gemx_gemx.dir/impl/kernels/gemxKernel_3/gemxKernel_3/cpu_sources/gemx_kernel.cpp:50: first defined here ERROR: [XOCC 17-1309] Gcc: /home/sdx/sdx/gemx/gemx/out_cpu_emu/_xocc_link_gemx_gemx.dir/impl/kernels/gemxKernel_0/gemxKernel_0/cpu_sources/gemx_kernel.cpp:50: multiple definition ofkernelOpLow' ERROR: [XOCC 17-1309] Gcc: gemxKernel_3/gemxKernel_3.csim_cu.a(gemx_kernel.o):/home/sdx/sdx/gemx/gemx/out_cpu_emu/_xocc_link_gemx_gemx.dir/impl/kernels/gemxKernel_3/gemxKernel_3/cpu_sources/gemx_kernel.cpp:50: first defined here ERROR: [XOCC 17-1309] Gcc: /home/sdx/sdx/gemx/gemx/out_cpu_emu/_xocc_link_gemx_gemx.dir/impl/kernels/gemxKernel_1/gemxKernel_1/cpu_sources/gemx_kernel.cpp:50: multiple definition of kernelOpLow' ERROR: [XOCC 17-1309] Gcc: gemxKernel_3/gemxKernel_3.csim_cu.a(gemx_kernel.o):/home/sdx/sdx/gemx/gemx/out_cpu_emu/_xocc_link_gemx_gemx.dir/impl/kernels/gemxKernel_3/gemxKernel_3/cpu_sources/gemx_kernel.cpp:50: first defined here ERROR: [XOCC 60-398] g++ failed ERROR: [XOCC 60-626] Kernel link failed to complete ERROR: [XOCC 60-703] Failed to finish linking make[1]: *** [out_cpu_emu/gemx.xclbin] Error 1 make[1]: Leaving directory/home/sdx/sdx/gemx/gemx' make: warning: Clock skew detected. Your build may be incomplete.

luckyteddy commented 6 years ago

BTW, the platform is ku115 with 2017.2

lisaliu1 commented 6 years ago

Hello, for sw_emu, it doesn't support multiple kernels. That's because the same kernel top modules are used multiple times. If you use hw_emu flow, it should work.