News for hackers. Stuff that matters.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by randomNumber7 on Wednesday November 18, 2020 @10:40AM (#25137971)
I think it's sad that AMD doesn't support ROCm (AMD's equivalent to CUDA) for those graphics cards.

On the other hand NVIDIA supports cuda on basically every gpu...

If you want to expiriment with gpu programming there is (sadly) no way around nvidia

Re:AMD Radeon RX 6800 and RX 6800 XT Review by zucker42 on Wednesday November 18, 2020 @11:01AM (#25138294)
This is incorrect according to this Phoronix article. Rocm opencl supposedly works on the 6800. https://www.phoronix.com/scan.php?page=article&item=amd-rx68... It might take a while for it to be available through standard distro distribution channels.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by randomNumber7 on Wednesday November 18, 2020 @11:15AM (#25138498)
According to this issue in the ROCm repo there is no ROCm for those gpus

https://github.com/RadeonOpenCompute/ROCm/issues/1180

I think the article you mention only says tha openCL works on those cards.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by zucker42 on Wednesday November 18, 2020 @11:29AM (#25138697)
The article pretty clearly says ROCm OpenCL. As I understand, support is not all or nothing, so it's possible it works without being officially supported. However, I think you're correct we'll have to see what Phoronix and others report about the level of support and see what works.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by rfvrgvegbegn on Wednesday November 18, 2020 @12:17PM (#25139425)
https://www.phoronix.com/scan.php?page=article&item=amd-rx68...

> " While Radeon Open eCosystem (ROCm) support wasn't a focus for the initial Radeon RX 5000 "Navi" graphics cards by AMD engineers, that is fortunately changing for both the RX 5000/6000 series moving forward. "

Rocm seems to be supported, works with PlaidML, I wonder if PyTorch works ? That's the main framework I really need ..

Re:AMD Radeon RX 6800 and RX 6800 XT Review by bgorman on Wednesday November 18, 2020 @12:59PM (#25140008)
Apparently not

https://github.com/RadeonOpenCompute/ROCm#hardware-and-softw...

The best way to get Pytorch working is to use the rocm provided docker images: https://hub.docker.com/r/rocm/pytorch. Unfortunately it doesn't seem like the latest GPUs are supported (yet?)

Re:AMD Radeon RX 6800 and RX 6800 XT Review by BadInformatics on Wednesday November 18, 2020 @12:02PM (#25139211)
In addition to what the sibling comment said, OpenCL runs on the ROCm stack for RDNA1/2. That means all the low-level plumbing, drivers and software should be in place.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by irishsultan on Wednesday November 18, 2020 @11:08AM (#25138401)
Counterpoint: https://github.com/RadeonOpenCompute/ROCm/issues/1271#issuec...

Of course that's just for this year (which is ending soon), but there is also no commitment at all to ever supporting NAVI.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by n0nc3 on Wednesday November 18, 2020 @11:27AM (#25138664)
You are right for now, but Julia already has an experimental ROCm stack. Rolling out full featured ROCm support could be a huge win for Julia user growth (and AMD).

https://juliagpu.org/

Re:AMD Radeon RX 6800 and RX 6800 XT Review by ArtWomb on Wednesday November 18, 2020 @11:59AM (#25139173)
NVidia toolchain and profilers are mature. But CUDA will experience lots of viable competition. DPC++ / SYCL could emerge:

https://github.com/Apress/data-parallel-CPP

https://github.com/codeplaysoftware

Re:AMD Radeon RX 6800 and RX 6800 XT Review by dwardu on Wednesday November 18, 2020 @10:56AM (#25138228)
I was going to wait for an AMD card for that, however im feeling somewhat happier that i ended up getting the 3080 rtx
Re:AMD Radeon RX 6800 and RX 6800 XT Review by Pet_Ant on Wednesday November 18, 2020 @10:46AM (#25138057)
Isn't OpenCL still available?
Re:AMD Radeon RX 6800 and RX 6800 XT Review by SXX on Wednesday November 18, 2020 @10:56AM (#25138225)
Most of software on market doesn't support OpenCL. ROCm worked quite well, but again AMD decide not to invest into software.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by BadInformatics on Wednesday November 18, 2020 @12:13PM (#25139377)
People were (rightfully) complaining about OpenCL the most because of applications like Blender, so it's not surprising they highlighted it. Since the OpenCL implementation on question is built on ROCm, it may be that other ROCm-related stuff works as well.

My impression from the various comments left by devs on Phoronix and elsewhere is that they've just managed to right the boat on the GPU side of things and are getting enough from their enterprise/HPC offerings (which they were solely focused on, to the detriment of all us consumers) to have some bandwidth to start tackling consumer compute support. I really hope they do so, because all the ROCm ecosystem could use some major TLC. Who knows, maybe this time next year you'll be able to install PyTorch with AMD GPU support OOTB.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by SXX on Wednesday November 18, 2020 @01:15PM (#25140232)
One big reason why I buy AMD hardware is John Bridgman who actively participate in discussions about their hardware and drivers as well as long-term vision toward open source. So I believed in AMD and supported them for years (and actually made nice profit on their shares growth).

To be honest I don't really need compute all that much other than for my own hobby projects. And for gaming I only play few games what suite my taste as well as tons of older or indie games that would work on any GPU. So why not, AMD open source drivers are decent anyway.

Unfortunately it's hard to really recommend AMD GPUs when it's come to the real world experience. Modern gamers actually want all these lock-in features even if Nvidia gonna abandon them in couple of years. Then people who need compute for their work just want their software to work and it's simply too much of mess on non-Nvidia hardware.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by Const-me on Wednesday November 18, 2020 @11:34AM (#25138783)
On Windows, DirectCompute is supported by both, and even Intel.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by sharpneli on Wednesday November 18, 2020 @11:55AM (#25139102)
That's just compute shaders in DirectX. They also support compute shaders in Vulkan and OpenGL.

It's not exactly the same as Cuda and OpenCL. Especially the numerical precision requirements are way off on graphics apis. And by way off I mean they're not always even specified what they should be.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by Const-me on Wednesday November 18, 2020 @12:02PM (#25139213)
Have a link? In my experience, the precision in DirectCompute is the same as on CPUs, specifically it's traditional 32-bit IEEE floats. Same for FP64.
Re:AMD Radeon RX 6800 and RX 6800 XT Review by sharpneli on Wednesday November 18, 2020 @12:17PM (#25139427)
Basic fp ops like +-*/ are fine generally. It's more about the ability to prevent reodering of instructions (so that Kahan summation etc is not screwed up), and having well defined spec for the precision of things like transcendental functions. HLSL is bit better at controlling this than GLSL is.

It has also improved greatly. Using workgroup shared memory is now a thing. And also one can use subgroup ops that have been in Cuda for years.

Some of the other things like commandqueues are in Vulkan and DirectX12. But oh boy those are pain to program in compared to OpenCL or Cuda. Usability matters too.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by Const-me on Wednesday November 18, 2020 @12:48PM (#25139831)
> to prevent reodering of instructions

GPUs don’t reorder, their EUs are way too simple for that. Are you certain GPU drivers reorder instructions while recompiling DXBC into their microcode?

> HLSL is bit better at controlling this than GLSL is.

BTW, if you compile acos() in HLSL and disassemble the output DXBC, you’ll see a really strange sequence of 10 instructions (mad, mad, mad, add, lt, sqrt, mul, mad, and, mad) . The precision is indeed lost that way. Still, if you really need that, you can implement full-precision stuff on top of what’s available.

> Using workgroup shared memory is now a thing

Was always there. CUDA 1.0 was released in 2007, D3D 11 in 2008.

> But oh boy those are pain to program in compared to OpenCL or Cuda.

D3D 12 is a pain to program in general, too low level. But for GPGPU, I personally never needed command queues, I’m quite happy with old-school D3D 11. Despite the API is mostly single threaded, with some care you can do stuff in parallel. Things like ID3D11DeviceContext::CopyResource are asynchronous, you can go quite far with deeply pipelined commands without doing it manually like you have to in D3D12.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by sharpneli on Wednesday November 18, 2020 @01:14PM (#25140206)
Compiler does the reordering. Not the GPU itself. Even in OoO CPU’s the ordering by HW doesn’t affect FP results. As a rule of thumb shaders in graphics are compiled as if one had passed -ffast-math to the compiler. Works perfectly in most cases, but not everywhere.

Nowadays MS has actually published the spec for DX that was closed previously. See https://microsoft.github.io/DirectX-Specs/d3d/archive/D3D11_... for differences of strict IEEE behaviour. In Cuda and OpenCL one can get way closer. As an example for performance reasons one might want to flush denorms to zero. But DX mandates that. So no denormals for you. In CL and Cuda they’re usable by default.

As for the command queues. I’ve often used them in Cuda. Just to get overlap between kernel executions. In DX12 one can do that by omitting barriers. DX11 allows no such feat.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by Const-me on Wednesday November 18, 2020 @01:58PM (#25140843)
> Compiler does the reordering.

It does, but you can always disassemble the DXBC and see what happened to your HLSL code.

> DX11 allows no such feat.

ID3D11DeviceContext::Dispatch is asynchronous just like CopyResource. Dispatch multiple shaders, and unless they have data dependencies (i.e. same buffer written by one as UAV and read by the next one as SRV) they'll happily run in parallel. No need for manual shenanigans with command queues.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by sharpneli on Wednesday November 18, 2020 @02:09PM (#25140989)
> It does, but you can always disassemble the DXBC and see what happened to your HLSL code.

And you can always disasm X86 code and see what -ffast-math did. Doesn't mean that everyone would be fine with just mandating it everywhere with no option to disable it.

Even then the DX functional spec gives some leeway. As an example if you write x*y+z it will compile it into mad instruction. And that's just specified as that the precision must not be worse as the worst possible ordering of separate instructions. So which it is? Depends on the vendor. This is completely fine for graphics, but not fine for all workloads.

> No need for manual shenanigans with command queues

Unless you do access same buffer from multiple places in a way that's still spec conformant, just in a way that the DX11 implementation cannot detect.

Re:AMD Radeon RX 6800 and RX 6800 XT Review by Const-me on Wednesday November 18, 2020 @02:33PM (#25141312)
> Doesn't mean that everyone would be fine with just mandating it everywhere

Practically speaking, often I enable it everywhere even on CPU (or similar options in visual C++). When more precision is needed, FP64 is the way to go. Apart from rare edge cases, you won't be getting many useful mantissa bits in these denormals, or with better rounding order.

> So which it is? Depends on the vendor.

Yeah, but on the same nVidia GPU, I'm pretty sure mad in DXBC does precisely the same thing as fma in CUDA PTX.

> just in a way that the DX11 implementation cannot detect

It doesn't detect much. If you want to allow shaders to arbitrarily read and write the same buffer, bind that buffer as UAV and you'll be able to run many of these shaders in parallel, despite a single queue.

P.S. AFAIK the main use case for these queues is high-end graphics, to send relatively cheap GPU tasks at huge rate (like 1MHz of them), from many CPU cores in parallel. In GPU compute, at least in my experience, the tasks tend to be much larger.