diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/MatrMlt.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/MatrMlt.pas index 5cf0be3b7..b3a3693a2 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/MatrMlt.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/MatrMlt.pas @@ -52,14 +52,14 @@ begin var Calc_C_Q := code['MatrMltMatr'].NewQueue.AddExec2(MatrW, MatrW, // Выделяем ядра в форме квадрата, всего MatrW*MatrW ядер - A.NewQueue.AddWriteArray2&(A_Matr), // Тип в &<> надо указывать явно, потому что компилятор не может вычислить его из типа элементов массива - B.NewQueue.AddWriteArray2&(B_Mart), + A.NewQueue.AddWriteArray2(A_Matr), + B.NewQueue.AddWriteArray2(B_Mart), C, W ); var Otp_C_Q := - C.NewQueue.AddReadArray2&(A_Matr) + + C.NewQueue.AddReadArray2(A_Matr) + HPQ(()-> begin 'Матрица С = A*B:'.Println; @@ -70,13 +70,13 @@ begin var Calc_V2_Q := code['MatrMltVec'].NewQueue.AddExec1(MatrW, C, - V1.NewQueue.AddWriteArray1&(V1_Arr), + V1.NewQueue.AddWriteArray1(V1_Arr), V2, W ); var Otp_V2_Q := - V2.NewQueue.AddReadArray1&(V1_Arr) + + V2.NewQueue.AddReadArray1(V1_Arr) + HPQ(()-> begin 'Вектор V2 = C*V1:'.Println; diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas index b2f92b1e3..b437e9432 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas @@ -1,27 +1,22 @@ -uses OpenCLABC; +## uses OpenCLABC; -begin +// Чтение и компиляция .cl файла + +var prog := new ProgramCode(Context.Default, ReadAllText('SimpleAddition.cl')); + +// Подготовка параметров + +var A := new CLArray(10); + +// Выполнение + +prog['TEST'].Exec1(10, // Используем 10 ядер - // Чтение и компиляция .cl файла + // Заполняем весь массив значениями (1), прямо перед выполнением + A.NewQueue.AddFillValue(1) - var prog := new ProgramCode(Context.Default, ReadAllText('SimpleAddition.cl')); - - // Подготовка параметров - - var A := new CLArray(10); - - // Выполнение - - prog['TEST'].Exec1(10, // Используем 10 ядер - - // Заполняем весь массив значениями (1), прямо перед выполнением - //TODO Разобраться почему надо KernelArg.From - KernelArg.FromCLArrayCQ(A.NewQueue.AddFillValue(1)) - - ); - - // Чтение и вывод результата - - A.GetArray.Println; // Читаем всё содержимое как одномерный массив - -end. \ No newline at end of file +); + +// Чтение и вывод результата + +A.GetArray.Println; // Читаем всё содержимое как одномерный массив \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas index 6641d61df..dfcedfae2 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas @@ -25,15 +25,22 @@ begin var E1 := NamedQ('E1'); var E2 := NamedQ('E2'); - // Дерево выполнения из данной программы может решать задачу такого типа: - // > Два парралельных процесса выполняются последовательно и иногда взаимодействуют - // Его можно расписать без Wait, к примеру как "A1*A2 + B1 + C1*C2 + D2 + E1*E2" - // И результат будет тот же, но такое дерево уже не похоже по форме на изначальную задачу - // Если между деревом и задачей сложно провести параллели - программу будет сложно улучшать - // (то есть будет сложно понять что делает что в очереди) Context.Default.SyncInvoke( ( A1 + B1 + C1 + Dw + E1 ) * ( A2 + Bw + C2 + D2 + E2 ) ); + Writeln('='*30); + // Дерево выполнения из данной программы может решать задачу такого типа: + // > Два парралельных процесса выполняются последовательно и иногда взаимодействуют + // Его можно расписать без Wait, к примеру: + var B1s := (A1+B1).Multiusable; + var D2s := ((B1s()*A2)+C2+D2).Multiusable; + Context.Default.SyncInvoke( + ( (B1s()+C1) * D2s() + E1 ) * + ( D2s() + E2 ) + ); + // И результат будет тот же, но такое дерево уже не похоже по форме на изначальную задачу + // Если между деревом и задачей сложно провести параллели - программу будет сложно улучшать + // (то есть будет сложно понять что делает что в очереди) end. \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/NamedQData.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/NamedQData.pas index 89ab493f7..1ce24e48f 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/NamedQData.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/NamedQData.pas @@ -5,9 +5,9 @@ uses OpenCLABC; function NamedQ(name: string; delay: integer := 1000) := HPQ(()-> begin - lock output do Writeln($'Очередь {name} начала выполнятся'); + lock output do Writeln($'{Milliseconds} Очередь {name} начала выполнятся'); Sleep(delay); - lock output do Writeln($'Очередь {name} выполнилась'); + lock output do Writeln($'{Milliseconds} Очередь {name} выполнилась'); end); end. \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Игра жизнь/Игра жизнь.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Игра жизнь/Игра жизнь.pas index 6521058fd..b7a91d687 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Игра жизнь/Игра жизнь.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Игра жизнь/Игра жизнь.pas @@ -35,7 +35,7 @@ try //TODO Использовать CLArray2 когда будет var B := new MemorySegment(W*W*sizeof(byte)); - B.WriteArray2&(MatrGen(W,W, (x,y)->byte(Random(2)))); + B.WriteArray2(MatrGen(W,W, (x,y)->byte(Random(2)))); var B_temp := new MemorySegment(B.Size); var code := new ProgramCode(ReadAllText('Игра жизнь.cl')); @@ -51,12 +51,11 @@ try var Q_Otp := B.NewQueue .AddGetArray2&(W,W) - .ThenConvert&(field-> + .ThenUse(field-> begin // Если уже слишком далеко вперёд насчитали - можно немного отдохнуть while field_states_q.Count=16 do Sleep(1000 div fps); field_states_q.Enqueue(field); - Result := field; end) ; diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas index 5cd0d07dd..37e9083a9 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas @@ -15,8 +15,7 @@ begin prog['TEST'].Exec1(10, // Используем 10 ядер - //TODO Разобраться почему надо KernelArg.From - KernelArg.FromCLArrayCQ(A.NewQueue.AddFillValue(1)) + A.NewQueue.AddFillValue(1) ); diff --git a/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html b/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html index c3da9dcbc..370a0bd44 100644 --- a/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html +++ b/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html @@ -496,16 +496,16 @@ const code_words_color = { "pas": { "keyword": [ "###", "##", "program", "unit", "library", "namespace", - "begin","end", "var", "uses", "as", "new", "try", "except", "on", "do", "const", + "begin","end", "var", "uses", "as", "new", "try", "except", "on", "do", "finally", "const", "procedure", "function", "lock", "type", "class","record", "sizeof","typeof", "external", "static", "array", "where", "or","and", "public","private", "property","constructor", "default", "of", "if","then","else", "div","mod", "extensionmethod", "while", ], "build-in": [ - "nil", "self", "true", "false", + "nil", "self", "true", "false", "value", "string","char", "object", "pointer", "single","real", - "shortint", "smallint", "integer", "int64", - "byte", "word", "longword", "cardinal", "uint64", + "shortint", "smallint", "integer", "int64", + "byte", "word", "longword", "cardinal", "uint64", ], "red": ["ToDo"], }, @@ -912,7 +912,7 @@ window.onload = ()=>{ на случай если вы хотите использовать OpenGL и/или OpenCL, но хотите написать свою высоко-уровневую оболочку. Возможно, ради опыта. Возможно, ради особых оптимизаций. И т.п.

Если вы будете использовать только модули OpenGLABC и OpenCLABC - данная справка вам не нужна, -потому что они специально созданы так, чтоб отстранить программиста от всех сложностей +потому что они специально созданы так, чтобы отстранить программиста от всех сложностей работы с неуправляемыми .dll и предоставить привычный ООП интерфейс со всевозможными удобствами.


Багтрагер

@@ -968,13 +968,13 @@ window.onload = ()=>{

Log

Log содержит логи последней сборки соответствующего модуля.

-

Они в основном используются чтоб было проще увидеть на что именно +

Они в основном используются чтобы было проще увидеть на что именно повлияли ваши изменения и как (используя проверку изменений git'а).

Но файл FinalFuncOverloads.log так же особо полезен перед -началом чистки, чтоб увидеть какие перегрузки уже есть.

+началом чистки, чтобы увидеть какие перегрузки уже есть.


Чтоб применить фиксеры и посмотреть на что они влияют - вызывайте Pack Most.pas.

-

Ну а чтоб полностью собрать модули - вызывайте PackAll.exe в корне репозитория.
+

Ну а чтобы полностью собрать модули - вызывайте PackAll.exe в корне репозитория.
(или .bat файлы там же, для сборки отдельных компонентов)

@@ -1112,7 +1112,7 @@ gl.BeginQuery(QueryTarget.VERTICES_SUBMITTED, name); // Все адреса и экземпляры делегатов создаются в конструкторе // В "<>" указывается имя платформы -// Можете написать "Pl" и нажать Ctrl+пробел, чтоб получить список платформ +// Можете написать "Pl" и нажать Ctrl+пробел, чтобы получить список платформ var gl := new OpenGL.gl<PlWin>; while true do @@ -1137,7 +1137,7 @@ glDebugOutputAMD.DebugMessageEnableAMD(...);

В модуле OpenGL так же есть особые классы, wgl, gdi и glx:

  • gdi содержит несколько методов библиотеки gdi32.dll. На этой библиотеке основано всё в System.Windows.Forms.
    -Подпрограммы включённые в класс gdi - это то, что может понадобиться вам, чтоб настроить и подготовить форму для рисования на ней с помощью OpenGL.

    +Подпрограммы включённые в класс gdi - это то, что может понадобиться вам, чтобы настроить и подготовить форму для рисования на ней с помощью OpenGL.

  • wgl содержит методы для подключения OpenGL к окну Windows.

  • @@ -1245,7 +1245,7 @@ var v2: Vec3i; (v1-v2).Println;

    Чтоб применить 1 из этих операций к 2 векторам - их типы должны быть одинаковые.
    -Если это не так - 1 из них (или оба) надо явно преобразовать, так чтоб типы были одинаковые:

    +Если это не так - 1 из них (или оба) надо явно преобразовать, так чтобы типы были одинаковые:

    var v1: Vec3d;
     var v2: Vec2i;
     ...
    @@ -1475,7 +1475,7 @@ m.Println; // Вывод матрицы
     // s присвоит ту же строку, что выводит .Println
     var s := m.ToString;
     
    -

    Для того чтоб матрица выведенная 1 из этих методов выглядела красиво надо +

    Для того чтобы матрица выведенная 1 из этих методов выглядела красиво надо использовать моноширный шрифт и поддерживать юникод (потому что для матриц используются символы псевдографики).

    Обычно это не проблема для .Println, потому что и консоль, и окно вывода в IDE имеют моноширный шрифт и поддерживают юникод.

    @@ -1524,7 +1524,7 @@ var s := m.ToString;
- -