HNHacker News
TopNewBestAskShowJobs

simondanisch

520 karma · joined April 9, 2016

Posting about Julia, GPU computing and makie.org! Contact: info@makie.org
submissionscomments
simondanisch··on [dead]
Using: https://github.com/facebookresearch/segment-anything/ https://github.com/MakieOrg/Tyler.jl https://docs.makie.org/
simondanisch··on Asteroid Impact 66M Years Ago visualized in 3D
Asteroid Impact - 66 Million Years Ago. The next 48 hours after impact. You can also explore this using JuliaLang and Makie.jl. See the code (simplified version) here: https://beautiful.makie.org/dev/extinction_event/
simondanisch··on Modeling a Wealth Tax
This seems pretty relevant:

>Watch how the ultra-wealthy in America gradually raised the taxes of the poor and eventually bent the curve downward until they paid the lowest tax rate of all

https://twitter.com/nick_kapur/status/1260645957651185665

simondanisch··on Giving up on Julia (2016)
In the case for Julia it's true though, since It's compiled at runtime very similarly to C via LLVM. In all my years I've never seen any C/C++ code, where Julia couldn't match performance after some tweaking - often with much simpler code.
simondanisch··on Swift for Tensorflow 0.3.1
Btw, the argument "If it compiles, I don't need to be afraid about run time errors anymore" is also pretty foreign to me.

I just run my code in small batches while developing it, so at every point I already know that it works. This helps writing code that nicely separates into small chunks of functionality, and you basically automatically write tests for it while at it.

This is especially nice when refactoring a large code base. I can already run many small and usable tests in the middle of a refactor (while the program wouldn't even compile in a static language).

In my experience, this greatly helps to improve the quality of the refactor, and makes it much easier to see problems in your refactoring approach very early on.

In a static language, you'd only get these crucial insights after you're done with fixing all compilation errors - which is usually when you're already done with the whole refactor... and after that, you might still have lots of errors in it that you can only find with real tests ;)

simondanisch··on Swift for Tensorflow 0.3.1
>Swift has clearly an advantage in that domain, as has C++, C#. In an enterprise setting such as Google no one actually wants speed and dynamism out of a language (C++ programmers are not allowed to use rtti for example), rather consistently boring, predictable, statically guaranteed results with as minimal fuzz as possible (Go, Java, C++) and enough competent programmers in that language.

That's a pretty weird statement, considering how hard it is to write a complex C++ program error free. I suppose Swift is much better in this regard - But compared to C++, Julia is a bliss and one can easily write huge applications error free, while I had my absolute worst debugging experiences in C++, where it's very easy to create obscure and hard to find bugs.

If you really need to get predictable results and actually know those results - you won't get away with a static type checker anyways, but will have to write & run tests, which then pretty much make it irrelevant whether your language is dynamic or not.

simondanisch··on DiffEqFlux.jl – A Julia Library for Neural Differential Equations
https://nextjournal.com/ pretty much tries to establish this kind of paper writing - all fully reproducable and runnable in a docker container :) It also blurs the line between normal blog posts, jupyter like IDE and papers ;)
simondanisch··on Julia Language Co-Creators Win James H. Wilkinson Prize for Numerical Software
that may be your impression, because you dont know julia's powerful, no overhead indexing abstractions yet ;) i also write lots of graphics low level code, and i couldn't be more glad that i don't need to do those error ridden indexing calculations anymore, since they're simply not needed... note, that you can also seamlessly create new array types that store 0 indices into other arrays - and because of julia's great composability, i can make them work with my indexing agnostic algorithms while being 0 overhead compatible with opengl's memory layout :)
simondanisch··on High Performance Numeric Programming with Swift: Explorations and Reflections
And sorry for hijacking your perfectly fine comment - of course it would help python to embrace modern compiler technologies! ;) It's just always a bit maddening to see how much effort and money is spent on creating imense projects for python, just to catch up with Julia - while turning python pretty much into a jitted frankenstein monster, to cover use cases it was never designed for ;)
simondanisch··on High Performance Numeric Programming with Swift: Explorations and Reflections
Yeah, I'm just trying to point out, that not much would be won by that.

You either need to change the semantic of the language (CPython) or live with a slow JIT for some of the most used features of the language... And changing the semantic of the language is pretty terrible - it fragments your libraries introduces unbreakable borders prohibiting cross package optimizations and extensability, and much worse, CPython is now basically a language that combines the bad stuff of python and C ;) I know, that's a bit too cynical, but coming from a well designed language for JIT (Julia), that's how CPython starts looking to me. You will simply never reach the elegance of a language that was designed from scratch for this.

What I want to point out is, that the whole topic is bigger than "JIT my one slow function and make it fast"! A good read about this topic is: http://www.stochasticlifestyle.com/why-numba-and-cython-are-...

simondanisch··on High Performance Numeric Programming with Swift: Explorations and Reflections
They do, there have been several high profile projects to make a JIT for python... The problem isn't, that JITs aren't taken seriously - the problem is, that python isn't designed for a JIT, so it's very hard to get the advantages of using one
simondanisch··on How to run Julia in the Browser
Hey hacker news, I’m the author of the article. If you want to play with the article you can sign up for a nextjournal account using the invite code julia1.0 and remix the article. I'm happy to discuss any questions about how to compile Julia for the browser via wasm/javascript!
simondanisch··on An Introduction to GPU Programming in Julia
That's how you do it:

https://github.com/JuliaGPU/GPUArrays.jl/blob/master/src/lin...

Or directly with cuda shfl intrinsics: https://github.com/JuliaGPU/CUDAnative.jl/blob/b249dfd145501...

simondanisch··on An Introduction to GPU Programming in Julia
Or just directly edit the article ;) That will also give you a K80 and you can directly run the code inside the article
simondanisch··on Faster R with FastR
If anyone wants to reproduce the benchmarks, I put them into a reproducible article and added a Julia baseline: https://nextjournal.com/sdanisch/fastr-benchmark
simondanisch··on The Julia Language Challenge
Guess I wrote my answer more ambiguous than I thought: the exact opposite is the case... Julia Base is huge and includes much more than most other languages I know - and that's what gets loaded on start, whether you like it or not ;)
simondanisch··on The Julia Language Challenge
> if you didn't have the import from Base, what can you not do?

So the part that gets loaded when you load the language/compiler is what is referred to as Base. So, it's kind of impossible to not have it and it is part of the language. So it's somewhat like asking, what can you do without "importing" integers? (ok, that's a hyperbole, but you get the idea ;) ) But, the source code does get shipped, so you might actually go in there and change stuff if you want, and Julia will pick up those changes - even, to get back to that hyperbole, how integers are defined, since they're implemented in pure Julia. I'm not a 100% sure what you're aiming at, but does that answer your question? ;)

simondanisch··on The Julia Language Challenge
>Actually, your sample "solution" is (was?) also a much used pattern in Julia - especially before we had such a powerful broadcast implementation.

To add some more historical facts to this: before broadcast, we mostly used maps & zips in Julia. Which is not very elegant if you want to write down your math. Even with broadcast, some math nuts still complain that it isn't close enough to the actual math :D So consider, that those people are Julia's user base ;)

And then, someone pretty much implemented broadcast in their freetime and added it as a PR to the Julia language. This is how the language grows, and a large part of that is possible, because it takes relatively little time to come up with a performant implementation of such a difficult problem.

And now we have broadcasting in the language, and maps + zips are indeed less idiomatic... Because anyone who started using the new broadcast immediately thought it was an improvement to "the old ways".

simondanisch··on The Julia Language Challenge
Well, it imports from Base - Anyways, too many people got hung up on this rule, so I deleted it... It wasn't very important anyways, as long as the core implementation is somewhat from scratch.
simondanisch··on The Julia Language Challenge
>There wouldn’t need to be a library providing this “broadcast” functionality

Actually, your sample "solution" is (was?) also a much used pattern in Julia - especially before we had such a powerful broadcast implementation.

So in Julia there is no need either, since it is already implemented much better in Base. I think you're overlooking the actual point of my challenge: it's not that we need a broadcast package, but that a lot of other scientific libraries will need to use similar patterns, to write new packages with new algorithms!

The point is also, that I can go into the Julia repository, and without a lot of time & effort, can improve the current implementation of our broadcast - because it is not that much code and pretty easy to follow.

So, an equivalent in your example would be, if you can quickly implement something like repa or folds in a similar minimal example like my Julia implementation.

If you don't like the details of my challenge, feel free to make a minimal folds implementation from scratch, and show me that the result is fast and composable ;)

simondanisch··on The Julia Language Challenge
I think a lot of people had prepared articles, packages etc for the 1.0 release - and now they're slowly getting released ;) If you're a Julia developer, the release definitely motivates you to put in the extra work and try to release your material around the same time!
simondanisch··on The Julia Language Challenge
Well, that'd be comparing apples and oranges... But fun fact: Julia actually has excellent GPU support! I will soon update the challenge with a GPU accelerated version. Spoiler: it won't need much more than 5 lines of code to get it to the GPU. Good luck trying to beat that with pure CUDA C++ ;)
simondanisch··on The Julia Language Challenge
The rule is about the implementation itself, but the other one is part of the benchmarking code. You'll need to be able to use the implementation, that doesn't rely much on external libraries, with types from other packages. If you read the article, you'll find Julia is all about composing functionalities from different packages. Its a major driving factor behind the ecosystem - and usually not possible if your language relies on c libraries to do the heavy lifting.
simondanisch··on The Julia Language Challenge
Makes sense. I will try to update the article! Feel free to use whatever library that helps you to compose your program nicely. It would be nice though, if those libraries were in a set of standard libraries ;) If you need to implement all helpers yourself, my point "in Julia, you can just sit down and start implementing a pretty difficult problem" would become a bit watered down... First of all, Julia is also pretty multi-purpose - and secondly, if you put it to the extreme, you could just write a DSL that you parse in C++ that is perfectly tailored to the problem, and consider the challenge as won :P
simondanisch··on The Julia Language Challenge
Ok fair enough - maybe this is just my bad english, let me know if you have a better way to phrase it.

I do think, that it is quite showing, that google + tensorflow don't believe in the mix of python + c/c++. I've been working quite closely on the challenges that faces machine learning libraries at the moment, and I can totally see where they're coming from when they're unhappy with the current solution and want to rewrite it in swift. How should I express this in a better way?

simondanisch··on The Julia Language Challenge
as i said, if it makes sense, i'd totally allow using external libraries! maybe i should make that clearer since quite a few people get hung up on that
simondanisch··on The Julia Language Challenge
What is the point?
simondanisch··on The Julia Language Challenge
I must admit, that I find your sentiment very understandable! It is an egoistic challenge, after all. For me the problems I describe are highly relevant, and I'm very curious about any solution that isn't written in Julia. And I do think, that those challenges are also highly relevant for a large part of the scientific computing community. So whatever language excels at those should get proper recognition;) And I do believe, that if you can implement a hard problem efficiently with little effort and not that much code and still have it composable, that it will very quickly influence the quality and user experience for the end user.
simondanisch··on The Julia Language Challenge
>If depicting usage for the amateur was the main point of the article

You understood that right, it is not :) That's why I wrote, that I'd probably need years to create the same implementation in any other language.

I do think it does have a widespread implication for the ecosystem though, and therefore at some point will also be relevant to newcomers.

simondanisch··on The Julia Language Challenge
that's exactly why I made that point debatable ;) Feel free to use Numpy, I'd consider that as the Python base array library anyways;) Note though, that this challenge is aimed at the people, that need to implement libraries like Numpy ;) But if Numpy is a good enough basis to actually create such a new flexible implementation, consider me impressed!
← PreviousPage 2 of 3Next →