
рдкрд░рд┐рдЪрдп
рдПрдореВ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░рд╕реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдпрдорд┐рдд рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдПрдореБ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕, рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рднреА рджрд┐рдЦрд╛рдПрдВрдЧреЗред
рд╕реНрдерд╛рдкрдирд╛
- рдЖрдк рдЬрд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реЗ рдмрд╛рд╣рд░реА рдУрдкрдирд╕реАрдПрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкрд╛рда рдХреЗ
Cargo.toml
рдХрд░реЗрдВред рдпрд╣ рдирд╡реАрдирддрдо рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛ (рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп *
рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓реЗрдВ):
[dependencies] em = "*" // Emu ocl = "*" // OpenCL
рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕
рдПрдореБ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдХреЗрд╡рд▓ рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдУрдкрдирд╕реАрдПрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИред
рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
рдПрдореБ рднрд╛рд╖рд╛ рдореЗрдВ рдиреМ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рд░рд╕реНрдЯ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:
рдЪрд░
рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд▓реЗрдЯрд░ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдХреЛрд▓рди, рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк, рдмрд░рд╛рдмрд░ рд╕рд╛рдЗрди, рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдорд╛рди рдФрд░ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред
let age: i32 = 54; let growth: f32 = 179.432; let married: bool = true;
рд░реВрдкрд╛рдВрддрд░рдг
рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж, рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ рднреА рдорд╛рдк рдХреА рдПрдХ рдЗрдХрд╛рдИ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЕрдЧрд▓рд╛ рднрд╛рдЧ рджреЗрдЦреЗрдВ):
let width: i16 = 324; let converted_width: i64 = width as i64;
рдорд╛рдк рдХреА рдЗрдХрд╛рдЗрдпреЛрдВ
рдПрдореВ рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдорд╛рдк рдХреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЧрдгрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪрд░ рдХреА length
рд╢реБрд░реВ рдореЗрдВ рдореАрдЯрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдорд╛рдк рдХреА рдЕрдиреНрдп рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:
let length: f32 = 3455.345;
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ
рдПрдореБ рдореЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдиреАрдЪреЗ рдЗрд╕реА рддрд╛рд▓рд┐рдХрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдпреБрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╢рд░реНрдд рдмрдпрд╛рди
рдПрдореБ рд╕рд╢рд░реНрдд рдмрдпрд╛рди рд░рд╕реНрдЯ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
let number: i32 = 2634; let satisfied: bool = false; if (number > 0) && (number % 2 == 0) { satisfied = true; }
рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП
рдлрд╝реЙрд░ рд▓реВрдк рдХреЗ рд╣реЗрдбрд░ рдХреЛ for NUM in START..END
рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдБ NUM
рдПрдХ рдЪрд░ рд╣реИ рдЬреЛ рд╕реАрдорд╛ рд╕реЗ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ - [START; END)
рдЗрдХрд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ [START; END)
ред
let sum: u64 = 0; for i in 0..215 { sum += i; }
рдЬрдмрдХрд┐ рд▓реВрдк
рдЬрдмрдХрд┐ рд▓реВрдк рдХрд╛ рд╢реАрд░реНрд╖рдХ рдЙрд╕ while (CONDITION)
рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ CONDITION
рд▓реВрдк рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рд╢рд░реНрдд рд╣реИред рдпрд╣ рдХреЛрдб рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ:
let sum: u64 = 0; let idx: i32 = 0; while (idx < 215) { sum += idx; idx += 1; }
рдЕрдВрддрд╣реАрди рдЫреЛрд░реЛрдВ
рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ loop
рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ break
рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдпрд╛ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрдпрд╛рди continue
(рдЕрдиреНрдп рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЫреЛрд░реЛрдВ рдХреА рддрд░рд╣)ред
let collapsed: u64 = 1; let idx: i32 = 0; loop { if idx % 2 == 0 { continue; } sum *= idx; if idx == 12 { break; } }
рд╕рдорд╛рд░реЛрд╣ рд╕реЗ рд▓реМрдЯреЗрдВ
рдЕрдиреНрдп рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣, return
рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рднреА рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ) рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
let result: i32 = 23446; return result;
рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░
- рдЙрдкрд▓рдмреНрдз рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░:
=
, +=
, -=
, *=
, /=
, %=
, &=
, ^=
, <<=
, >>=
; - рд╕реВрдЪрдХрд╛рдВрдХ рдСрдкрд░реЗрдЯрд░
[IDX]
; - рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ -
(ARGS)
; - рдпреВрдирд┐рд░реА рдСрдкрд░реЗрдЯрд░реНрд╕:
*
рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП; рдмреВрд▓рд┐рдпрди рдбреЗрдЯрд╛ рдХреЛ рдкрд▓рдЯрдирд╛, -
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛; - рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░:
+
, -
, *
, /
, %
, &&
, ||
, &
, |
, ^
, >>
, <<
, >
, <
, >=
, <=
, ==
, ==
!=
ред
рдХрд╛рд░реНрдпреЛрдВ
рдПрдореБ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддреАрди рднрд╛рдЧ рд╣реИрдВ: рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдорд┐рд▓рдХрд░ред рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
add(left f32, right f32) f32 { return left + right; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ f32
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рдкрд╛рд░рд┐рдд рджреЛ рддрд░реНрдХреЛрдВ рдХрд╛ рдпреЛрдЧ рджреЗрддрд╛ рд╣реИред
рдкрддрд╛ рд╕реНрдерд╛рди
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ __private__
рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред
рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧреЛрдВ global_
рдФрд░ local_
рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдкрддреЗ рдХреА рдЬрдЧрд╣ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рднреА рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП global_
рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдХрд░рдиреЗ рдХреА рдирд╣реАрдВред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп
рдПрдореВ рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рди (рдУрдкрдирд╕реАрдПрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛) рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ GPU рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
get_work_dim()
- рдЖрдпрд╛рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;get_global_size()
- рджрд┐рдП рдЧрдП рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;get_global_id()
- рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;get_global_size()
- рджрд┐рдП рдЧрдП рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;get_local_id()
- рджрд┐рдП рдЧрдП рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╕рдореВрд╣ рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;get_num_groups()
- рджрд┐рдП рдЧрдП рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;get_group_id()
- рдХрд╛рд░реНрдпрд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреЗрддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрдкрдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ get_global_id(0)
, рдЬреЛ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╡реЗрдХреНрдЯрд░ рддрддреНрд╡ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЖрдкрдХреЗ рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди
рдирд┐рдпрдорд┐рдд рд░рд╕реНрдЯ рдХреЛрдб рд╕реЗ рдПрдореБ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдПрдХ рд╕рджрд┐рд╢ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рджрд┐рдП рдЧрдП рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ:
use em::emu; emu! { multiply(global_vector [f32], scalar f32) { global_vector[get_global_id(0)] *= scalar; } }
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрдкрдирд╕реАрдПрд▓ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдореИрдХреНрд░реЛ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ build!
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
use em::build;
рд░рд╕реНрдЯ рдХреЛрдб рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЗрдореВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
fn main() { let vector = vec![0.4445, 433.245, 87.539503, 2.0]; let result = multiply(vector, 2.0).unwrap(); dbg!(result); }
рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг
рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдХреЗрд▓рд░ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдореНрди рддрд░реНрдХреЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
use em::{build, emu};
рдЖрдк cargo run -- 3 2.1 3.6 6.2
рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдореА рдирд┐рд╖реНрдХрд░реНрд╖ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ:
[src/main.rs:33] result = [ 6.2999997, 10.799999, 18.599998, ]
OpenCL рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдореБ рдУрдкрдирд╕реАрдПрд▓ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдореВрд░реНрдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдУрдХреНрд▓ рдХреНрд░реЗрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрдВрдбрд╛рд░ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :
use em::emu;
рд╕рдорд╛рдкрди
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд▓реЗрдЦ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛ред рдЖрдк рд░реВрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рд░реВрд╕реНрдд ( рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг ) рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рддреНрд╡рд░рд┐рдд рдЬрд╡рд╛рдм рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред