Initial project import
This commit is contained in:
commit
b14b3622f5
16 files changed
+619
No files matched your search
@@ -0,0 +1,61 @@
|
||||
program AgxComputeDemo;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
uses
|
||||
SysUtils, AgxOpenTypes, AgxOpenRuntime;
|
||||
|
||||
const
|
||||
N = 8;
|
||||
|
||||
type
|
||||
TFloatArray = array[0..N - 1] of Single;
|
||||
|
||||
procedure VectorAdd(const Inputs, Outputs: array of TAgxBuffer;
|
||||
const ElementCount: NativeUInt);
|
||||
var
|
||||
A, B, C: TFloatArray;
|
||||
I: NativeUInt;
|
||||
begin
|
||||
Inputs[0].Download(@A[0], ElementCount * SizeOf(Single));
|
||||
Inputs[1].Download(@B[0], ElementCount * SizeOf(Single));
|
||||
for I := 0 to ElementCount - 1 do
|
||||
C[I] := A[I] + B[I];
|
||||
Outputs[0].Upload(@C[0], ElementCount * SizeOf(Single));
|
||||
end;
|
||||
|
||||
var
|
||||
Device: TAgxDevice;
|
||||
ABuffer, BBuffer, CBuffer: TAgxBuffer;
|
||||
Kernel: TAgxKernel;
|
||||
A, B, C: TFloatArray;
|
||||
I: Integer;
|
||||
begin
|
||||
for I := 0 to N - 1 do
|
||||
begin
|
||||
A[I] := I;
|
||||
B[I] := I * 10;
|
||||
end;
|
||||
|
||||
Device := TAgxDevice.Create;
|
||||
ABuffer := nil; BBuffer := nil; CBuffer := nil; Kernel := nil;
|
||||
try
|
||||
Device.CreateBuffer(SizeOf(A), agxBufferStorage, ABuffer);
|
||||
Device.CreateBuffer(SizeOf(B), agxBufferStorage, BBuffer);
|
||||
Device.CreateBuffer(SizeOf(C), agxBufferStorage, CBuffer);
|
||||
ABuffer.Upload(@A[0], SizeOf(A));
|
||||
BBuffer.Upload(@B[0], SizeOf(B));
|
||||
Device.CreateCPUKernel('vector_add', @VectorAdd, Kernel);
|
||||
Kernel.Dispatch([ABuffer, BBuffer], [CBuffer], N);
|
||||
CBuffer.Download(@C[0], SizeOf(C));
|
||||
|
||||
for I := 0 to N - 1 do
|
||||
WriteLn(Format('%0.0f + %0.0f = %0.0f', [A[I], B[I], C[I]]));
|
||||
finally
|
||||
Kernel.Free;
|
||||
CBuffer.Free;
|
||||
BBuffer.Free;
|
||||
ABuffer.Free;
|
||||
Device.Free;
|
||||
end;
|
||||
end.
|
||||
Reference in new issue
Block a user