рдЕрдореВрд░реНрдд
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдПрд╕рдПрд╕рдПрд╕рдкреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рддреНрд╡рд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдирд╛ред рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рддреНрд╡рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ,
рдХреЗрдкрд▓рд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ GTX рдЯрд╛рдЗрдЯрди рдХрд╛рд░реНрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд░рд┐рдЪрдп
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рддреНрд╡рд░рдХ (рдЬреАрдкреАрдпреВ) рдЧреИрд░-рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛ рд░рд╣реЗ рд╣реИрдВред рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрдирдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЙрдЪреНрдЪ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдФрд░ рдХрдо рд▓рд╛рдЧрдд рдХреЗ рдХрд╛рд░рдг рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, GPU рдкрд░, рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЧреНрд░рд┐рдб рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдорд╛рдирддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдбрд╝реА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЧреИрд░-рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЧреНрд░рд┐рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рд╕рд┐рдВрдЧрд▓ рд╢реЙрд░реНрдЯреЗрд╕реНрдЯ рд╕реЛрд░реНрд╕ рдкрд╛рде рдкреНрд░реЙрдмреНрд▓рдо (SSSP) - рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рд╕рднреА рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдл рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред рд╕реАрдкреАрдпреВ рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рджреЛ рдкреНрд░рд╕рд┐рджреНрдз рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ: рдбреЗрд╕реНрдЯреНрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдлреЛрд░реНрдб-рдмреЗрд▓рдореИрди рдПрд▓реНрдЧреЛрд░рд┐рдердоред GPU рдкрд░ Deystra рдФрд░ Ford-Bellman рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИрдВред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рд▓реЗрдЦ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- CUDA, рдкрд╡рди рд╣рд░реАрд╢ рдФрд░ PJ рдирд╛рд░рд╛рдпрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GPU рдкрд░ рдмрдбрд╝реЗ рдЧреНрд░рд╛рдлрд╝ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рддреНрд╡рд░рд┐рдд рдХрд░рдирд╛
- рд╕рдмрд╕реЗ рдХрдо рдкрде рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЬреАрдкреАрдпреВ-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╣реЗрдХреНрдЯрд░ рдСрд░реНрдЯреЗрдЧрд╛-рдЕрд░реЗрдВрдЬ, рдпреВрд░реА рдЯреЙрд░реЗрд╕, рдбрд┐рдПрдЧреЛ рдЖрд░ред рд▓рд▓рдиреЛрд╕ рдФрд░ рдЖрд░реНрдЯреБрд░реЛ рдЧреЛрдВрдЬрд╛рд▓реЗрдЬ-рдПрд╕реНрдХреНрд░рд┐рдмрд╛рдиреЛ
рдЕрдиреНрдп рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рд▓реЗрдЦ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рд▓реЗрдЦреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдбреЗрд╕реНрдЯреНрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ред рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдлреЛрд░реНрдб-рдмреЗрд▓рдореИрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрдкреНрд▓рд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдлрд╛рдпрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреАрдкреАрдпреВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рддрд╛рдирд╛ (рддрд╛рдирд╛), рдХреЛрдбрд╛ рдмреНрд▓реЙрдХ, рдПрд╕рдПрдордПрдХреНрд╕ рдФрд░ рдХреНрдпреВрдбрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдЕрдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЗрдВ рдкрд╛рдардХ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг
рд╣рдо рдПрдХ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдл рдХреА рднрдВрдбрд╛рд░рдг рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЧреНрд░рд╛рдл рд╕рдВрдХреБрдЪрд┐рдд рд╕реАрдПрд╕рдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░рд┐рд╕ рдФрд░ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрди рдХреЛрдиреЗ рдФрд░ рдПрдо рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП, рддреАрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: xadj, adjncy, рднрд╛рд░ред Xadj рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ N + 1 рд╣реИ, рдЕрдиреНрдп рджреЛ 2 * M рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдЙрдиреНрдореБрдЦ рдЧреНрд░рд╛рдл рдореЗрдВ рд╕реАрдзрд╛ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдЖрд░реНрдХреНрд╕ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЧреНрд░рд╛рдл рдХреЛ рд╕рдВрдЪрдп рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЗрдВрдбреЗрдХреНрд╕ xadj [I] рд╕реЗ xadj [I + 1] рддрдХ рд╡рд░реНрдЬрди I рдХреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдЗрд╕рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ I. рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд╡рдЬрди рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдИрдВ рдУрд░ рдХрд╛ рдЖрдВрдХрдбрд╝рд╛ рдЖрд╕рдиреНрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП 5 рдХреЛрдиреЗ рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдл рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реАрдПрд╕рдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджрд╛рдИрдВ рдУрд░ред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ GPU рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрдирдкреБрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ (SMX) рдкрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓реЛрдб рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рд╕рдордиреНрд╡рдп рдкреНрд░рд╛рд░реВрдк (рд╕реАрдУрдУ) рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдЖрд░ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░
- COO рдкреНрд░рд╛рд░реВрдк рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ
рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реАрдПрд╕рдЖрд░ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рд╣рдо рдПрдХ рдФрд░ рд╢реБрд░реБрдЖрдд рд╕рд░рдгреА рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЖрд░реНрдХ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ adjncy array рдореЗрдВ рдЙрдирдХреЗ рд╕рд┐рд░реЗ рд╕реНрдЯреЛрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЖрд░реНрдХреНрд╕ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рдкреНрд░рд╛рдкреНрдд рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА (рдпреВ, рд╡реА) рдареАрдХ рдПрдХ рдмрд╛рд░ рд╣реЛред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдХрд┐рдирд╛рд░реЗ (рдпреВ, рд╡реА) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, GPU рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рд╕реЗ рдЗрд╕ рдмрдврд╝рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдПрдХ рдХрд┐рдирд╛рд░реЗ (рд╡реА, рдпреВ) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдХреЛрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛрд░
GPU рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЖрдзрд╛рд░ Ford-Bellman рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо GPU рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рдЬрди рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ GPU рдХреА рдореЗрдореЛрд░реА рдмреИрдВрдбрд╡рд┐рдбреНрде рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
int k = blockIdx.x * blockDim.x + threadIdx.x; if(k < maxV) { double w = weights[k]; unsigned en = endV[k]; unsigned st = startV[k]; if(dist[st] > dist[en] + w)
рдЗрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рджреЛ рдХрд┐рдирд╛рд░реЛрдВ (рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рджреВрд░реА рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рд╕рд╛рде рдмреНрд▓реЙрдХ рдХреА рджреЛрдиреЛрдВ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлреЛрд░реНрдб-рдмреЗрд▓рдореИрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, GPU-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ, рдкреНрд░рд╡рд╛рд╣ рдХреА "рджреМрдбрд╝" рдХреА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ - рдЬрдм рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╡рд╛рд╣ рд╕рдорд╛рди рджреВрд░ [I] рд╕реЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рд╣реА рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рджреЛ рдереНрд░реЗрдб K1 рдФрд░ K2 рд╣реИрдВ рдЬреЛ рд╕реЗрд▓ рдбрд┐рд╕реНрдЯ [I] рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╢рд░реНрдд (*) рдпрд╛ (**) рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИред рджреЛ рдорд╛рдорд▓реЗ рд╕рдВрднрд╡ рд╣реИрдВред рдкрд╣рд▓реЗ - рджреЛ рдзрд╛рдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдорд╛рди рджрд░реНрдЬ рдХрд┐рдпрд╛ред рдлрд┐рд░ рдЗрди рджреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рд╕реНрдерд┐рддрд┐ рдЧрд▓рдд рд╣реЛрдЧреА, рдФрд░ рд╕реЗрд▓ рдбрд┐рд╕реНрдЯ [I] рдореЗрдВ рдореВрд▓реНрдп рдиреНрдпреВрдирддрдо рд╣реЛрдЧрд╛ред рджреВрд╕рд░рд╛ - рджреЛ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдлрд┐рд░, рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╕реНрдерд┐рддрд┐ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдЧреА, рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЭреВрдареА рд╣реЛрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд░рд┐рдгрд╛рдо рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
Ford-Bellman рдХрд▓рди рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рдХрд┐рд╕реА рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╡рд┐рдХреГрдд рд╕рд░рдгреА рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реБрдП рдереЗ, рддреЛ рдЖрдЧреЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдкреАрдпреВ рдкрд░ рдореЙрдбрд┐рдлрд╝ рдЪрд░ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдиреЗ рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рд┐рдЦреА рдереАред
рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ - рдПрдХ рдХрд░реНрдиреЗрд▓ рд▓реЙрдиреНрдЪред рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕реАрдкреАрдпреВ рдкрд░ рд╣рдо рдХрд░реНрдиреЗрд▓ рдХреЛ рдПрдХ рд▓реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдореЙрдбрд┐рдлрд╝ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░, рдпрджрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рдбрд┐рд╕реНрдЯ рдЕрд░реЗрдВрдЬ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрддреНрддрд░ рдЕрдиреНрдп рд╕рднреА рдХреЛ рджрд┐рдП рдЧрдП рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЕрдиреБрдХреВрд▓рди
рдЕрдЧрд▓рд╛, рд╣рдо рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЬреНрдЮрд╛рди рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдзреБрдирд┐рдХ рд╕реАрдкреАрдпреВ рдореЗрдВ рддреАрди-рд╕реНрддрд░реАрдп рдХреИрд╢ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ рдЖрдХрд╛рд░ 64K рд╣реИ рдФрд░ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рдирд┐рд╣рд┐рдд рд╣реИред рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ рдЖрдХрд╛рд░ 1 рд╕реЗ 2 рдПрдордмреА рддрдХ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХрд╛ рдХреИрд╢ рдкреВрд░реЗ рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 12-15 рдПрдордмреА рд╣реИред
рдЖрдзреБрдирд┐рдХ рдЬреАрдкреАрдпреВ рдореЗрдВ рджреЛ-рд╕реНрддрд░реАрдп рдХреИрд╢ рд╣реИред рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ рдЖрдХрд╛рд░ 64KB рд╣реИред рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП 48KB рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдпреВрдирд┐рдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ 1.5 рдПрдордмреА рд╣реИ рдФрд░ рдкреВрд░реЗ рдЬреАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИред GPU рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрдзреБрдирд┐рдХ GPU GK110 рдЪрд┐рдк рдореЗрдВ 15 рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ рд▓рдЧрднрдЧ 48KB рдФрд░ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХрд╛ 102KB рдПрдХ рдмреНрд▓реЙрдХ рдкрд░ рдЖрддреЗ рд╣реИрдВред рд╕реАрдкреАрдпреВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреАрдкреАрдпреВ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рд╕реЗ рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреЗрдВрджреНрд░реАрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдореБрдЦреНрдп рдореЗрдореЛрд░реА рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЗрдкрд▓рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд░реАрдб-рдУрдирд▓реА рдЯреЗрдХреНрд╕рдЪрд░ рдХреИрд╢ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдмрдВрдзрд┐рдд рдФрдкрдЪрд╛рд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдкрд╣рд▓реЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ const __restrict рдЬреЛрдбрд╝реЗрдВред
рдмрдирд╛рд╡рдЯ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рдЖрдкрдХреЛ рджреВрд░рд╕реНрде рджреВрд░реА рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд░рдгреА рдЬреАрдкреАрдЖрд░ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рдЖрд░реНрдХ рдФрд░ рдЙрдирдХреЗ рд╡рдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рдЬрдЧрд╣ рд▓реЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2 20 (рд▓рдЧрднрдЧ 1 рдорд┐рд▓рд┐рдпрди) рдХреЗ рд╡рд░реНрдЯрд┐рд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдЯреИрдВрдЯ рдЕрд░реЗрдВрдЬ 8 MB рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЗрд╕ рд╕рд░рдгреА рддрдХ рдкрд╣реБрдВрдЪ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ GPU рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рддрд╛рдирд╛ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд╛рдЙрдирд▓реЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐ рддрд╛рдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ L2 рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛, рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рддрд╛рдирд╛ рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдХреИрд╢ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕рдорд╛рди рджреВрд░реА рдХреЗ рд╕рдорд╛рди рд╕рд░рдгреА рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд┐рдВрдХ рджрд░реНрдЬ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб:
__global__ void relax_ker (const double * __restrict dist, double *dist1, тАж тАж) { int k = blockIdx.x * blockDim.x + threadIdx.x + minV; if(k < maxV) { double w = weights[k]; unsigned en = endV[k]; unsigned st = startV[k]; if(dist[st] > dist[en] + w) { dist1[st] = dist[en] + w; modif[0] = iter; } else if(dist[en] > dist[st] + w) { dist1[en] = dist[st] + w; modif[0] = iter; } } }
рдирддреАрдЬрддрди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рд░реАрдб рдСрдкрд░реЗрд╢рди рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди dist рдФрд░ dist1 рд▓рд┐рдВрдХ рджреЛрдиреЛрдВ рдПрдХ рд╣реА GPU рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдмреЗрд╣рддрд░ рдХреИрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ L2 рдХреИрд╢ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣реЛред рдбрд┐рд╕реНрдЯ рд╕рд░рдгреА рдХреЛ рдПрдВрдбреАрд╡реА рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯ рд╡реА рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбрд┐рд╕реНрдЯ рд╕рд░рдгреА рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреА рддрддреНрд╡ред рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рдл рдореЗрдВ рдПрди рд╡рд░реНрдЯрд┐рдХрд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЧрдореЗрдВрдЯ (рдПрди / рдкреА + 1) рдорд┐рд▓рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдЗрди рдЦрдВрдбреЛрдВ рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЙрд░реНрдЯ рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдореЗрдВ, рд╣рдо рдЙрди рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд┐рд░реЗ рд╢реВрдиреНрдп рдЦрдВрдб рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рд╢реБрд░реБрдЖрдд - рдкрд╣рд▓реЗ рд╢реВрдиреНрдп рдореЗрдВ, рдлрд┐рд░ рдкрд╣рд▓реЗ рдореЗрдВ рдЖрджрд┐ред рджреВрд╕рд░реЗ рд╕рдореВрд╣ рдореЗрдВ, рд╣рдо рдЙрди рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдЫреЛрд░ рдкрд╣рд▓реЗ рдЦрдВрдб рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рд╢реБрд░реБрдЖрдд - рдкрд╣рд▓реЗ рд╢реВрдиреНрдп рдореЗрдВ, рдлрд┐рд░ рдкрд╣рд▓реЗ рдореЗрдВ рдЖрджрд┐ред
рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЗрд╕ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдбрд┐рд╕реНрдЯ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдорд╛рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдореЗрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдореЗрдВ рдереНрд░реЗрдб рд╢реВрдиреНрдп рдЦрдВрдб рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ рдЕрдВрдд рдЫреЛрд░реЛрдВ рдФрд░ рд╢реВрдиреНрдп, рдкрд╣рд▓реЗ, рдЖрджрд┐ред рд╢реБрд░реБрдЖрддреА рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдереНрд░реЗрдбреНрд╕ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрдВрдбреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗред
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЧреИрд░ - рдЙрдиреНрдореБрдЦ рдЖрд░рдПрдордПрдЯреА рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЬреЛ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореЙрдбрд▓ рдХрд░рддреЗ рд╣реИрдВред рд░реЗрдЦрд╛рдВрдХрди рдХреА рдФрд╕рдд рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА 32 рд╣реИ, рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реИред рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдЙрди рд░реЗрдЦрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИ рдЬрд┐рдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ 2 ^ рдПрди | рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ | рдЪрд╛рдк рдХреА рд╕рдВрдЦреНрдпрд╛ | MB рдореЗрдВ рд╡рд┐рдХреГрдд рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ | рдПрдордмреА рдореЗрдВ рдкрд╕рд▓рд┐рдпреЛрдВ рдФрд░ рд╡рдЬрди рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ |
14 | 16 384 | 524288 | 0,125 | 4 |
15 | 32768 | 1048576 | 0,250 | 8 |
16 | 65536 | 2 097 152 | 0,500 | 16 |
17 | 131 072 | 4 194 304 | 1 | 32 |
18 | 262 144 | 8 388 608 | 2 | 64 |
19 | 524288 | 16 777 216 | 4 | 128 |
20 | 1048576 | 33 554 432 | 8 | 256 |
21 | 2 097 152 | ремред резреж 108ремрек | 16 | 512 |
22 | 4 194 304 | 134 217 728 | 32 | 1024 |
23 | 8 388 608 | 268 435 456 | 64 | 2048 |
24 | 16 777 216 | 536 870 912 | 128 | 4096 |
рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 2 18 рдпрд╛ рдЕрдзрд┐рдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП рджреВрд░реА рджреВрд░реА рд╕рд░рдгреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ GPU рдкрд░ L2 рдХреИрд╢ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдирд┐рд╡рд┐рдбрд┐рдпрд╛ рдЬреАрдЯреАрдПрдХреНрд╕ рдЯрд╛рдЗрдЯрди рдЬреАрдкреАрдпреВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ 14 рдПрд╕рдПрдордпреВ 192 рдХреНрдпреВрдбрд╛ рдХреЛрд░ (рдХреБрд▓ 2688) рдФрд░ 3.4 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рдФрд░ 8 рдПрдордмреА рдХреИрд╢ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рддреАрд╕рд░реА рдкреАрдврд╝реА рдХрд╛ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ рдЖрдИ 7 рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИред рд╕реАрдкреАрдпреВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдХреВрд▓рд┐рдд рдбрд┐рдХреНрдЬрд╕реНрдЯреНрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реАрдкреАрдпреВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдордп рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рджрд░реНрд╢рди рд╕реВрдЪрдХ рд╕рдордп рдХреА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕рдВрд╕рд╛рдзрд┐рдд рдЖрд░реНрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЧреНрд░рд╛рдл рдореЗрдВ рдЖрд░реНрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕рдордп рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд╕рддрди 32 рдЕрдВрдХ рд▓рд┐рдП рдЧрдПред рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рднреА рдХреА рдЧрдИ рдереАред
рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП, 13 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ NVCC CUDA 5.5 рдХреЗ рд╕рд╛рде рдЭрдВрдбреЗ -O3 тАУarch = sm_35 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдпрд╣ рдЧреНрд░рд╛рдлрд╝ рдирд┐рдореНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдкреНрд░рджрд░реНрд╢рди рдШрдЯрддрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
- рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдХреИрд╢ рдФрд░& рдкрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд - GPU рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
- рдХреИрд╢ рдСрдл - рдмреЗрд╣рддрд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреНрд░рдордЪрдп рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд┐рдП рдмрд┐рдирд╛ GPU рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
- рдмрдирд╛рд╡рдЯ рдХреИрд╢ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд┐рдирд╛ - GPU рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВ
- рдХреИрд╢ рдФрд░& рдмрдВрдж рдХрд░реЗрдВ - рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛ рдореВрд▓ GPU рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
- рд╕реАрдкреАрдпреВ - рд╕реАрдкреАрдпреВ рдкрд░ рдмреБрдирд┐рдпрд╛рджреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ const __restrict рдЕрдиреБрдХреВрд▓рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рддреНрд╡рд░рдг рдЗрд╕ рдЧреНрд░рд╛рдл рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЧреНрд░рд╛рдлрд╝ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐, рд╕реАрдкреАрдпреВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреАрдкреАрдпреВ рдореЗрдВ рдФрд╕рдд рд╕реЗ рд╡рд┐рдЪрд▓рди рдХреА рдПрдХ рдмрдбрд╝реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рдХреА рдПрдХ "рджреМрдбрд╝" рдХреЗ рд░реВрдк рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдХреЗ рдХрд╛рд░рдг рд╣реИ, рд╢реБрд░реВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╣рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, SSSP рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдПрдХ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рд░рд╛рд╕реНрддреЛрдВ рдХреА рдЦреЛрдЬред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╢реАрд░реНрд╖ рд╕реЗ рдЕрдиреНрдп рд╕рднреА рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рджреВрд░реА рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЬреАрдЯреАрдПрдХреНрд╕ рдЯрд╛рдЗрдЯрди рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЧреНрд░рд╛рдлрд╝реЛрдВ рдореЗрдВ, рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд░реЗрдЦрд╛рдВрдХрди рджреНрд╡рд╛рд░рд╛ 2 21 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд▓рдЧрднрдЧ 1100 рдорд┐рд▓рд┐рдпрди рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдбред рдЕрдзрд┐рдХрддрдо рдФрд╕рдд рддреНрд╡рд░рдг рдЬреЛ 1 рд╕реЗ 4 рдорд┐рд▓рд┐рдпрди рддрдХ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рдлрд╝ рдкрд░ рд▓рдЧрднрдЧ 40 рдерд╛ред
рд╕рд╛рд╣рд┐рддреНрдп
- CUDA
- рд░рд╛рдЬрд╛
- рдлреЛрд░реНрдб рдмреЗрд▓рдореИрди рдПрд▓реНрдЧреЛрд░рд┐рдердо
- рджрд┐рдЬреНрдХреНрд╕реНрддреНрд░ рдХрд╛ рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо