## Where communities thrive

• Join over 1.5M+ people
• Join over 100K+ communities
• Free without limits
##### Activity
Snektron
@snektron:matrix.org
[m]
You could calculate normals when ray marching using automatic differentiation
Troels Henriksen
@athas
Yeah, I'll certainly do that, but that's more of a fun toy than something people need, I think.
Snektron
@snektron:matrix.org
[m]
I'm running into this situation where my program uses 8.4 GB vram using the opencl backend, but only 5 using the cuda backend (running on different machines)
are they using different kinds of allocators?
Troels Henriksen
@athas
They shouldn't, but the amount of exploited parallelism can vary.
They do not interrogate the hardware about its needs in the same way.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
I think I have a one use where AD would be useful. I have some interaction models for rigid bodies that are in scalar form (aka a potential energy) but finding the gradient seems really awkward for. What does it work on at this point?
Troels Henriksen
@athas
Scalar funtions with control flow, but no loops.
Also some sequential use of arrays.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
so no multivariate stuff yet?
ok
Troels Henriksen
@athas
Depends on your definition. It works fine with records and tuples, and you can have maps on top. But it'll be a week or two before we can handle most parallelism.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
tuples are fine, in my case anyway
I'll probably try it later. Is everything based on analytical gradients?
Troels Henriksen
@athas
What do you mean?
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Maybe the word is different in english, but I mean like D(sin x) -> cos x
not using numerical diffrentiation
I mean you could use (f(x+h)-f(x) )/h numerically
My understanding of AD is that it works based known gradients of the 'basic' functions at compile time. And the compiler makes an expression of the gradient of the composed function.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
But I don't know if that's the case for all cases.
A quick look at the wikipedia page for AD tells me that everything is indeed 'analytical', which is nice.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
It's mostly just fancy use of the chain rule as far as I can tell.
Orestis
@omhepia:matrix.org
[m]
Well its much more than that. Finite difference are incredibly less accurate and much more prone to numerical error.
And by numerical I mean the limited accuracy of computing machines as well as discretization errors.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Mostly at least. I guess there are some edgecases.
It would have saved me a lot of time if Futhark had this feature a year ago. Really nice to see it coming anyhow.
Troels Henriksen
@athas
AD is not numerical differentiation, but neither is it completely analytical. It is regarded as a mix. Operationally, it's analytical gradients at the primitive, combined with the chain rule.
It tends to have excellent numerical properties; typically as good as the original computation.
Snektron
@snektron:matrix.org
[m]
I spent some more time optimizing and improving the parser stuff, on a 2080 TI it now parses and constructs an inverted parse tree in 401us for a 5.1 KB input, 28ms for 18 MB and 143 ms for 92 MB. For reference, the cpp parser which only validates the input requires about 19us, 62ms and 334ms respectively (running on a Ryzen 3700X), so thats pretty promesing :)
The grammar i tested with is relatively simple, though that shouldn't have a lot of impact
Troels Henriksen
@athas
I still think Futhark is an odd choice for a parser, but I am happy whenever it is faster than C++.
Snektron
@snektron:matrix.org
[m]
Beats writing cuda/opencl by hand
Wasnt that the intended purpose?
Troels Henriksen
@athas
Indeed! And soon it will also beat writing gradients by hand.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Does Futhark have a specified 'endianess'? I came to think of it in the context of image encoding, as done in futhark literate. I wanted to do a similar interpretation of []u32 in Haskell, but the library I used read the pixel values in big-endian order. This was of course easy to fix, but is this behaviour hardware dependent?
Troels Henriksen
@athas
Futhark assumes that the host and device will have the same endianness. The binary data format always uses little endian.
And I guess futhark literate does the same. I actually didn't give it any thought, and it probably isn't documented.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Ok, I guess it's probably a non-issue in most cases since most modern hardware is either little-endian or bi-endian. I think the Haskell library read it as a byte-array of rgbargba... and since I don't think about endianness that often this gave me some rather confusing results...
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab

I think I've encountered this before but wasn't bothered enough to report it. Unless it is by design for some reason, I think I've found a parsing error, that I assume would be relatively easy to fix.

let a = 0i32
-- |>  id

commenting the second line results in a parsing error, this appears to be the case for the |> operator in particular, not + for example. I find it annoying when I comment a filter for example. A second -- removes the error.

Troels Henriksen
@athas
That is because -- | starts a documentation comment.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Ah, so that's why. a bit unfortunate, since |> is a pretty common start of a line
Troels Henriksen
@athas
Just put the line comment further to the left. This is intentional behaviour based on my Haskell experience, where you might accidentally put in doc comments in invalid places (GHC doesn't care), but then the doc generation tool will issue a parse error.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
So it's specifically one space?
Troels Henriksen
@athas
Yes.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Ok that makes it easier to deal with
Troels Henriksen
@athas
If the parser was less bad at reporting errors, it would tell you explicitly that a doc comment marker cannot be put there.
But Happy does not make it particularly easy to report nice errors.
Now that the grammar has stabilised, I've been wondering whether we should re-implement the parser with Megaparsec.
Gusten Theodor Isfeldt
@Gusten_Isfeldt_gitlab
Yes, I think for slightly wider adoption, better parser errors would be high priority
With good error messages, now with futhark literate I think it could actually be pretty good for general engineering students.