-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
OS, compiler minimum versions and minimum processor requirements for running Julia #34570
Comments
Also some of the installation and compilation related documentation in |
[EDIT: if this is just to build, not run Julia, just ignore my comment]
Is there a real need? 2/3 are on Windows 10, and the rest more or less on Windows 7. I'm not using Windows so don't care much personally, just seems premature. Next LTS will probably be Julia 1.5 right? Change after that? |
Julia being not supported on Windows 7, doesn't mean it'll stop working on Windows 7, just that it won't be supported by the Julia language team. |
At the moment it basically means that we can make assumptions about some minimum capabilities available by default - a reasonable version of powershell, maybe the windows terminal, etc. For Windows 7 users, they'll probably have to install some extra things or upgrades. |
#36123 updates the build dependencies |
Based on what @staticfloat said in #35215, we'll adopt the Core 2 instruction set as the minimum for Intel and Bulldozer for AMD. Is there something we should do for ARM? |
If anything that should at Most be what the official binary is compiled for and should not be the required feature. And there's also very little point of raising that requirement since basically no performance sensitive code is affected. Nothing should change for arm. |
It is the required minimum CPU - in that older than those may not work - as discussed in #35215. This is documenting the current practice -not setting a policy for a new practice. |
@yuyichao Clearly our binaries do not work on armv6 processors. So presumably there is something we need to say about what works and what does not. |
As I did mention in that issue, it is indeed a new practice. The old one was sse2, ie no additional requirements for x64. It was only broken recently. And that’s why I said nothing should change for arm, since the binary already says armv7a and nothing should have changed about it. Armv6 has always been partially supported for source build and the binary from respian. |
As far as I understand, that decision is deliberate. |
How?
AFAICT that means it's unintentional. |
My understanding is that all that was done to address performance issues with gmp and mpfr in the stock Julia distribution. @giordano and @staticfloat can say more. If you think this can be done without using SSSE3 instructions, and can provide a patch, that would be great. |
Not sure why that happened, probably @vchuravy can tell more |
Well, that is inconsisitent with the observation since the issue, as mentioned in the commenet i quoted above, is on the LLVM. Not gmp or mpfr. |
Yes, I think it was LLVM who ended up using a newer version of GCC, that's why I pinged Valentin |
Also, as for BigInt, |
In the past, within BB we compiled with a GCC that had no default architecture. That meant it never used anything other than the most very basic of CPU instructions. By applying a default architecture of As stated in the AMD SSSE3 support issue, while we had verbally stated that "core2" was the required minimum chip support, we hadn't explicitly written it down in easy to find places, so we're trying to rectify that here. Julia can be built to run on older architectures, but our binaries are not going to support that, because there's too much performance being left on the table for the vast majority of our users who have processors that support SSSE3. |
It shouldn't be needed for GMP, since they have dispatch. The issue linked does not seem to mention anything about GMP test result.
The point is that this is clearly not stated anywhere and it clearly affects real users. In fact, it was explicitly stated in codegen, and then later It's important to make things work correct first before making it fast. If no user actually uses the binary on old hardware it'll be somewhat different but given how quickly the issue got reported it is certainly not the case. And then after the correctness issue is fixed, i.e. lower the base requirement back to what it was, the performance issue can be figured out afterwards. It is not that hard to add target dispatch support for a library for a particular build. I've done it here for openlibm. A few caveated,
I can help with it for sure, but at any rate, this is an optimization problem and it should never get before correctness. |
And see https://github.com/yuyichao/arch-pkg/blob/be9b02aed257ba08c2160da9ae8dca4efc7ad06c/pkg/all/mpfr/target-h.patch and https://github.com/yuyichao/arch-pkg/blob/be9b02aed257ba08c2160da9ae8dca4efc7ad06c/pkg/all/mpfr/PKGBUILD#L22-L32 for the MPFR patch for testing. (be careful with quoting, see a few lines below, when passing in the target clone attribute). |
BTW, with GCC 10, I see no difference at all for the benchmark in #31759 with generic target or core2 as target. |
Based on local testing of the generic binaries and #35215 (comment) as well as bits from #31759 (comment) and #31759 (comment) it seems that.
So the best solution is to use GCC 7+. The comment from #35215 (comment)
is also misleading/wrong since the change from The reason for prefering (2) rather than the obviously better (1) appears to be
as well as wanting to use BB rather than source compilation, which is something completely internal and therefore should have the lowest priority. The correct action for mpfr/gmp/generic binary right now should be to revert to either gcc 4.8 + generic, if it is determined that using BB is more important, or to use 7+ + generic, if it is determined that performance is more important. As for the documentation, this and this are the minimum requirement (edit: effectively added in 930e6b5), which should include everything from pentium4+, including all x64 chips from AMD and Intel. This requirement is for ABI/IEEE floating point reason. (edit: which is basically also the reason for the minimum requirement on ARM.) Additionally, IIUC, the BB compiler change has caused all new BB binary to stop working on older systems. Therefore, once a fix of the BB compiler is implemented, all binaries built after the change in compiler version should be rebuilt to remove the bad binaries. Edit: and if you want to stick to BB and 4.8, I recommend trying to specify |
It's been a while since we bumped minimum OS requirements and compiler versions.
OSes for running:
CPUs for running:
E.g. Julia 1.4 fails on startup (AMD Phenom on Linux) #35215 for AMD phenompentium 4 for x86)For building:
The text was updated successfully, but these errors were encountered: