spcl / smi Goto Github PK
View Code? Open in Web Editor NEWStreaming Message Interface: High-Performance Distributed Memory Programming on Reconfigurable Hardware
License: BSD 3-Clause "New" or "Revised" License
Streaming Message Interface: High-Performance Distributed Memory Programming on Reconfigurable Hardware
License: BSD 3-Clause "New" or "Revised" License
With the newer versions of the compiler (19.1 or 19.2) the II of loops is greater than 1.
This happens for both SMI device code as well as for loops in the user application.
For some collectives (broadcast, scatter, gather), v19+ internally fails in synthesis or in the generation of the report.
The message reported by the compiler is meaningless. For example, while generating broadcast report it fails with:
Stack dump:
0. Program arguments: /mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/linux64/bin/../../llvm/bin/aocl-opt -march=fpga -O3 -board /apps/ault/intelFPGA_pro/19.1/hld/board/bittware_pcie/hardware/p520_max_sg280l/b
oard_spec.xml -fp-relaxed=true -scheduler-fmax=480 -dbg-info-enabled --soft-elementary-math=false -pass-remarks-output=pass-remarks.yaml broadcast.fpga.bc -o broadcast.kwgid.bc
1. Running pass 'Function Pass Manager' on module 'broadcast.fpga.bc'.
2. Running pass 'Increase latency of critical loop variables' on function '@app'
#0 0x00007f2e9a0bd1da llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0xc1e1da)
#1 0x00007f2e9a0bb17c llvm::sys::RunSignalHandlers() (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0xc1c17c)
#2 0x00007f2e9a0bb2cc SignalHandler(int) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0xc1c2cc)
#3 0x00007f2e992925f0 __restore_rt (/lib64/libpthread.so.0+0xf5f0)
#4 0x00007f2e9b5156f0 (anonymous namespace)::LoopRecombine::findPathsAndConditions(llvm::Value*, (anonymous namespace)::LoopRecombine::TracingInfo&, llvm::SmallVector<std::pair<llvm::Value*, bool>, 2u>&) (/mnt/b
eegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0x20766f0)
#5 0x00007f2e9b515476 (anonymous namespace)::LoopRecombine::findPathsAndConditions(llvm::Value*, (anonymous namespace)::LoopRecombine::TracingInfo&, llvm::SmallVector<std::pair<llvm::Value*, bool>, 2u>&) (/mnt/b
eegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0x2076476)
#6 0x00007f2e9b5180db (anonymous namespace)::LoopRecombine::isValidForRecombine(llvm::PHINode*, llvm::Value*, llvm::Value*) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0x20790db
)
#7 0x00007f2e9b51a99a (anonymous namespace)::LoopRecombine::runOnFunction(llvm::Function&) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0x207b99a)
#8 0x00007f2e9a1f426e llvm::FPPassManager::runOnFunction(llvm::Function&) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0xd5526e)
#9 0x00007f2e9a1f4424 llvm::FPPassManager::runOnModule(llvm::Module&) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0xd55424)
#10 0x00007f2e9a1f51ec llvm::legacy::PassManagerImpl::run(llvm::Module&) (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/llvm/bin/../lib/libLLVM-8svn.so+0xd561ec)
#11 0x0000561092006b15 main (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/linux64/bin/../../llvm/bin/aocl-opt+0x29b15)
#12 0x00007f2e97bd6505 __libc_start_main (/lib64/libc.so.6+0x22505)
#13 0x00005610920076bd _start (/mnt/beegfs/apps/ault/intelFPGA_pro/19.1/hld/linux64/bin/../../llvm/bin/aocl-opt+0x2a6bd)
Error: Optimizer FAILED.
The test that works with Integermessage and user-defined synchrony degree, stalls.
It seems that a loop occurs in the generated routing table.
By removing channels from the topology and part of the test (in the .cl files) it completes.
Description
If in the same kernel there are 2+ SMI channels opened toward the same destination, if the message length is small (=1 network packet) the rendezvous mechanism could cause a stall
Example
SMI_Channel chan_send1=SMI_Open_send_channel(2, SMI_INT, my_rank+1, 0, comm);
SMI_Channel chan_send2=SMI_Open_send_channel(2, SMI_INT, my_rank+1, 1, comm);
for(int i=0;i<2;i++)
<push the data in the two channels>
On the receiver side symmetric operations are applied. This is broken in the following case:
Possible solution
Change tokens condition on push?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.