Skip to content

Commit

Permalink
Optimize MatrMlt
Browse files Browse the repository at this point in the history
  • Loading branch information
SunSerega committed Dec 8, 2023
1 parent b5c9144 commit e119ea4
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 34 deletions.
32 changes: 17 additions & 15 deletions Samples/OpenCLABC/0Простейшие примеры/MatrMlt.pas
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@
// Подготовка очередей выполнения

var Calc_C_Q :=
// Можно передавать результаты .ThenWriteArray2
// вместо "A" и "B" в "MatrMltMatr", но тогда
// они будут тратить лишние ресурсы на параллельность
A.MakeCCQ.ThenWriteArray2(A_Matr) +
B.MakeCCQ.ThenWriteArray2(B_Mart) +
// Выделяем ядра в форме квадрата, всего W*W ядер
code['MatrMltMatr'].MakeCCQ.ThenExec2(W, W,
A.MakeCCQ.ThenWriteArray2(A_Matr),
B.MakeCCQ.ThenWriteArray2(B_Mart),
C,
W
// DiscardResult не обязательно, но желательно
A, B, C, W
// .DiscardResult не обязателен, но желателен
// чтобы не использовать результат случайно
).DiscardResult;

Expand All @@ -64,11 +66,9 @@
end, false).DiscardResult;

var Calc_V2_Q :=
V1.MakeCCQ.ThenWriteArray(V1_Arr) +
code['MatrMltVec'].MakeCCQ.ThenExec1(W,
C,
V1.MakeCCQ.ThenWriteArray(V1_Arr),
V2,
W
C, V1, V2, W
).DiscardResult;

var Otp_V2_Q :=
Expand All @@ -78,17 +78,19 @@
'Вектор V2 = C*V1:'.Println;
V2_Arr.Println;
Println;
// Единственный DiscardResult, меняющий поведение очереди:
// С ним не выделяются ресурсы на то, чтобы передать V2_Arr
// Из результата ThenGetArray1 в результат SyncInvoke
// Единственный .DiscardResult, меняющий поведение очереди:
// С ним не выделяются ресурсы на передачу V2_Arr
// Из результата .ThenGetArray1 в результат SyncInvoke
end, false).DiscardResult;

// Выполнение всего и сразу асинхронный вывод

CLContext.Default.SyncInvoke(

Calc_C_Q +
Calc_V2_Q * Otp_C_Q + // Считать V2 и выводить C можно одновременно, поэтому тут *, т.е. параллельное выполнение
// Считать V2 и выводить C можно одновременно,
// поэтому тут *, т.е. параллельное выполнение
Calc_V2_Q * Otp_C_Q +
Otp_V2_Q

);
Expand All @@ -101,8 +103,8 @@
V1.Dispose;
V2.Dispose;
except
// except позволяет получать список ошибку,
// возникшую при выполнении SyncInvoke
// except позволяет получать список ошибок,
// возникших при выполнении SyncInvoke
on ae: System.AggregateException do
foreach var e in ae.InnerExceptions do
Println(e);
Expand Down
36 changes: 17 additions & 19 deletions Samples/OpenCLABC/0Простейшие примеры/MatrMlt.td
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,26 @@ OpenCLABC_implementation______.InvokeParamsFunc<T> = function(enq_c: integer; o_
final = ErrHandlerBranchCombinator#0: CLArrayCommandGetArrayAutoSize<real> origin+par+enq union
branch#0/2 = ErrHandlerInitial#1: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchCombinator#2: CLTaskGlobalData.ParallelInvoke branches union
origin = ErrHandlerBranchCombinator#3: CLKernelCommandExec2 origin+par+enq union
branch#0/3 = ErrHandlerInitial#4: ExecuteEnqFunc container
branch#1/3 = ErrHandlerInitial#5: ExecuteEnqFunc container
branch#2/3 = ErrHandlerInitial#6: ExecuteEnqFunc container
branch#0/2 = ErrHandlerBranchCombinator#7: CLKernelCommandExec1 origin+par+enq union
branch#0/3 = ErrHandlerInitial#8: ExecuteEnqFunc container
branch#1/3 = ErrHandlerBranchBud#9: branch invoke
origin = ErrHandlerBranchCombinator#3: CLKernelCommandExec2 origin+par+enq union
branch#2/3 = ErrHandlerInitial#10: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchCombinator#11: CLArrayCommandGetArray2<real> origin+par+enq union
branch#0/2 = ErrHandlerInitial#12: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchBud#13: branch invoke
origin = ErrHandlerBranchCombinator#3: CLKernelCommandExec2 origin+par+enq union
(total 14 handlers)
[EventDebug]: 13 event's created
[QueueDebug]: 3 queue's created
origin = ErrHandlerInitial#3: ExecuteEnqFunc container
branch#0/2 = ErrHandlerBranchCombinator#4: CLKernelCommandExec1 origin+par+enq union
branch#0/2 = ErrHandlerInitial#5: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchCombinator#6: CLArrayCommandWriteArrayAutoSize<real> origin+par+enq union
branch#0/2 = ErrHandlerInitial#7: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchBud#8: branch invoke
origin = ErrHandlerInitial#3: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchCombinator#9: CLArrayCommandGetArray2<real> origin+par+enq union
branch#0/2 = ErrHandlerInitial#10: ExecuteEnqFunc container
branch#1/2 = ErrHandlerBranchBud#11: branch invoke
origin = ErrHandlerInitial#3: ExecuteEnqFunc container
(total 12 handlers)
[EventDebug]: 10 event's created
[QueueDebug]: 2 queue's created
[ExecDebug]: 2 cache entries created
[QueueResNil]: 20
[QueueRes<T>]: 15
[QueueResNil]: 23
[QueueRes<T>]: 12
QueueResValDirect<array [,] of real>: 3
QueueResValDirect<array of real>: 2
QueueResValDirect<CLArray<real>>: 5
QueueResValDirect<CLArray<real>>: 2
QueueResValDirect<integer>: 5

#ReqModules
Expand Down

0 comments on commit e119ea4

Please sign in to comment.