From 4af61e2296a49876c2d9e7cf192ae825302a83de Mon Sep 17 00:00:00 2001 From: Sai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:55:30 -0400 Subject: Added support for differentiating out and inout parameters. (#2323) * Added out/inout tests * Added support for out and inout parameters. Still untested * Fixed and tested support for out and inout types * Removed some comments --- tests/autodiff/inout-parameters-jvp.slang | 30 ++++++++++++++++++++++ .../inout-parameters-jvp.slang.expected.txt | 5 ++++ tests/autodiff/out-parameters-jvp.slang | 28 ++++++++++++++++++++ .../autodiff/out-parameters-jvp.slang.expected.txt | 5 ++++ 4 files changed, 68 insertions(+) create mode 100644 tests/autodiff/inout-parameters-jvp.slang create mode 100644 tests/autodiff/inout-parameters-jvp.slang.expected.txt create mode 100644 tests/autodiff/out-parameters-jvp.slang create mode 100644 tests/autodiff/out-parameters-jvp.slang.expected.txt (limited to 'tests') diff --git a/tests/autodiff/inout-parameters-jvp.slang b/tests/autodiff/inout-parameters-jvp.slang new file mode 100644 index 000000000..989e56c02 --- /dev/null +++ b/tests/autodiff/inout-parameters-jvp.slang @@ -0,0 +1,30 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +__differentiate_jvp void h(float x, float y, inout float z) +{ + float m = x + y; + float n = x - y; + z = z + m * n + 2 * x * y; +} + + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + float x = 2.0; + float y = 3.5; + float z = 1.0; + float dx = 1.0; + float dy = 0.5; + float dz = 2.5; + + __jvp(h)(x, y, z, dx, dy, dz); + + outputBuffer[0] = dz; // Expect: 12.0 + outputBuffer[1] = z; // Expect: 1.0 + +} \ No newline at end of file diff --git a/tests/autodiff/inout-parameters-jvp.slang.expected.txt b/tests/autodiff/inout-parameters-jvp.slang.expected.txt new file mode 100644 index 000000000..d8a590c0e --- /dev/null +++ b/tests/autodiff/inout-parameters-jvp.slang.expected.txt @@ -0,0 +1,5 @@ +type: float +12.0 +1.0 +0.0 +0.0 \ No newline at end of file diff --git a/tests/autodiff/out-parameters-jvp.slang b/tests/autodiff/out-parameters-jvp.slang new file mode 100644 index 000000000..58c6cfeb0 --- /dev/null +++ b/tests/autodiff/out-parameters-jvp.slang @@ -0,0 +1,28 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +__differentiate_jvp void h(float x, float y, out float result) +{ + float m = x + y; + float n = x - y; + result = m * n + 2 * x * y; +} + + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + float x = 2.0; + float y = 3.5; + float dx = 1.0; + float dy = 0.5; + + float dresult = 0.0f; + __jvp(h)(x, y, dx, dy, dresult); + + outputBuffer[0] = dresult; // Expect: 9.5 + +} \ No newline at end of file diff --git a/tests/autodiff/out-parameters-jvp.slang.expected.txt b/tests/autodiff/out-parameters-jvp.slang.expected.txt new file mode 100644 index 000000000..555935fc4 --- /dev/null +++ b/tests/autodiff/out-parameters-jvp.slang.expected.txt @@ -0,0 +1,5 @@ +type: float +9.5 +0.0 +0.0 +0.0 \ No newline at end of file -- cgit v1.2.3