Memory Upgrades for 2019 Mac Pro - Save Up to 65% vs Factory Costs
Upgrade the memory of your 2018 Mac mini up to 64GB
Apple MacBook Pro 16.2" M1 Max 64GB/4TB
IN STOCK

Most Powerful MacBook Pro ever!.

Consult with Lloyd on what to buy!


√ B&H Photo PAYS THE SALES TAX FOR YOU More info...

Apple 16-inch MacBook Pro M1 Max Here Soon for Testing

re: Why a Desktop Computer is Often Better than a Laptop
re: Apple MacBook Pro M1

Consult with Lloyd for any kind of computer purchase, RAID setup, backup strategy, Photoshop optimization, etc.

Big thanks to B&H Photo for agreeing to send a loaner 16" MacBook Pro 10-core 64GB/4TB/32GPU (APMBP16SG26), expected to arrive here at MPG by Jan 20 for review/testing.

Use the B&H Payboo card to save the sales tax. Thanks for buying through this site!

CLICK TO VIEW: Apple MacBook Pro 16" with M1 Max chip

2021 MacBook Pro 16"
2021 MacBook Pro 16"

Real world testing is what should interest photographers

Test machine will be a high-end configuration, maxed-out except for 4TB SSD instead of 8TB.

MBP-16-SG-24 Apple 16.2" MacBook Pro with M1 Max Chip — 10 core / 64GB / 4TB SSD / 32 GPU cores

Benchmark results of raw computing power don’t mean much. They show potential peak improvements, but in the real world some tasks may race along and others might not, due to constraints on memory, software design, CPU vs GPU usage, etc. Still I have high hopes for the M1 Max chipset.

It has long been true that you pay more for less in a laptop, and it is unlikely for that to change in any meaningful way with the M1 laptops. Users who do not need a laptop should think carefully about waiting for a professional-grade M1 Max derivative in a desktop (or going with the current iMac 5K); see Why a Desktop is Often Better than a Laptop.

MPG’s testing of the MBP will focus on real-world performance including Photoshop, Lightroom, Zerene Stacker, Gigapixel AI, IntegrityChecker, and other demanding real-world applications, aimed mostly at photographers—similar to what was done for the 2019 MacBook Pro.

Please buy your Mac through the links on this site to B&H Photo, if at all feasible—both MPG and B&H thus benefit. And get your accessories and storage from OWC.

How will the Apple M1 Max chip fare against both my 2019 iMac 5K with 128GB memory, and the 2019 Mac Pro 28-core with 384GB memory? Super interesting to find out.

The MBP will have 64GB memory, but all tests fit comfortably within that, so we can get a sense of raw computing power vs my other machines on just about everything I commonly do. I do frequently process even larger files in Photoshop, so I can also see how that works out.

B&H Payboo pays sales tax!

I’m also keen to see how fast the Java runtime is, particularly with IntegrityChecker Java, and my local web server and development environment.

B&H pays the sales tax for you (most states)

When you buy at B&H Photo, you can use the B&H Payboo card to save the sales tax.

I’ve saved thousands of dollars with it because here in tax-pig California our sales tax is at 9.25%, amounting to $323 on a $3499 laptop.

CLICK TO VIEW: Add-on Storage from Large to Huge

CLICK TO VIEW: External SSD for backup or more space

 

OWC Accelsior 4M2 PCIe SSD
6000 MB/sec!
Mac or PC.


Ideal for Lightroom, Photoshop, video.
Capacity up to 16TB!

Reader Comment: Finder File Copying Data Loss... “catalyst that drove me off the platform”

re: Apple Core Rot
re: Apple Core Rot: macOS Finder Shows Bogus Files s Not Yet Copied 18 Hours Later
re: Apple Core Rot Metadata Loss: macOS Finder Destroys File Dates When Moving Files
re: Apple Core Rot: macOS Finder File Copying: Fails to Replace "dot files" When Replacing a folder = DATA LOSS
re: Finder Hangs While Copying
re: Apple’s Penchant for IGNORING Data Loss Risks Continues, Unabated: Finder Erroneously Shows Files as Zero Bytes
re: Copying Files with macOS Finder: Data Loss Bug
re: One more Finder File Copy Bug: Is it Even Safe to Count on the macOS Finder to Copy Files?

Bryan M writes:

In 2017 you wrote a blog post on Finder failing to copy the contents of files and followed up with a piece in 2018 suggesting it may be related to Spotlight or one of its daemons. I’m curious if you have been able to reproduce this bug in more recent versions of MacOS.

In 2015-16 or so, I ran into this very same issue when copying the contents of memory cards to an SMB network share. What I observed was Finder would pre-allocate the files on the server, then go back and copy the file contents, but at some point along the way Finder would silently fail and give up, but not alert the user that the copy process had terminated. It wasn’t until weeks later that I discovered a majority of those files were empty and destroyed since those memory cards were reused.

Like you, I found this design to be completely unacceptable and was the catalyst that drove me off the platform. I’ve been contemplating coming back to the Mac, but would like some assurance this bug has been resolved before it’s even a consideration.

Hope you’re well and thank you in advance.

MPG: I don’t know if it is fixed, but I assume not.

These sorts of software bugs are a compelling reason to use IntegrityChecker Java, which runs on macOS, Windows, Linux, NAS, etc.

View all handpicked deals...

FUJIFILM GFX 50R Medium Format Mirrorless Camera
$4499 $2999
SAVE $1500

Kudos to Apple for its Mail Privacy Protection Feature

re: security
re:phishing

Apple’s Private Relay feature is a good idea

It is complimented by the new Mail Privacy Protection feature of Apple Mail (weh. Good work, Apple! Give us more.

Apple.com: Mail Privacy Protection

Emails you receive may include remote content that allows the email’s sender to learn information about you. When you open an email, information about your Mail activity can be collected by the sender without transparency and an ability to control what information is shared. Email senders may learn when and how many times you opened their email, whether you forwarded the email, your Internet Protocol (IP) address, and other data that can be used to build a profile of your behavior and learn your location.

...continues...

   
Apple Mail in macOS: Protect Mail Activity
       
Apple Mail in iOS: Protect Mail Activity

...

Protect Mail Activity helps protect your privacy by preventing email senders, including Apple, from learning information about your Mail activity. When you receive an email in the Mail app, rather than downloading remote content when you open an email, Protect Mail Activity downloads remote content in the background by default — regardless of whether you engage with the email. Apple does not learn any information about the content.

In addition, Protect Mail Activity routes all remote content downloaded by Mail through two separate relays operated by different entities. The first knows your IP address, but not the remote Mail content you receive. The second knows the remote Mail content you receive, but not your IP address, instead providing a generalized identity to the destination. This way, no single entity has the information to identify both you and the remote Mail content you receive. Senders can’t use your IP address as a unique identifier to connect your activity across websites or apps to build a profile about you.

You can disable Protect Mail Activity at any time in iOS and iPadOS by going to Settings > Mail > Privacy Protection, then tapping to turn off Protect Mail Activity. On Mac, go to Mail > Preferences > Privacy, then deselect Protect Mail Activity.

If you choose to disable Protect Mail Activity, the Hide IP Address feature will still mask your IP address using the same two-separate-internet-relays design. You can disable Hide IP Address at any time in iOS and iPadOS by going to Settings > Mail > Privacy Protection, then tapping to turn off Hide IP Address. On Mac, go to Mail > Preferences > Privacy, then deselect Hide IP Address.

By using these features, you agree and consent to Apple’s and its subsidiaries’ and agents’ transmission, collection, maintenance, processing, and use of this information as described above.

At all times, information collected by Apple will be treated in accordance with Apple’s Privacy Policy, which can be found at www.apple.com/privacy.


Up to 1527MB/s sustained performance

Kudos to Apple for its New “Private Relay” Feature

re: security
re:phishing

I’m not sure it it really helps me, but I like the idea of more privacy.

Apple is also doing smart stuff in Apple Mail, namely the Mail Privacy Protection feature.

Apple.com: About iCloud Private Relay

Normally when you browse the web, information contained in your web traffic, such as your DNS records and IP address, can be seen by your network provider and the websites you visit. This information could be used to determine your identity and build a profile of your location and browsing history over time.

iCloud Private Relay is designed to protect your privacy by ensuring that when you browse the web in Safari, no single party—not even Apple—can see both who you are and what sites you're visiting.

When Private Relay is enabled, your requests are sent through two separate, secure internet relays. Your IP address is visible to your network provider and to the first relay, which is operated by Apple. Your DNS records are encrypted, so neither party can see the address of the website you’re trying to visit. The second relay, which is operated by a third-party content provider, generates a temporary IP address, decrypts the name of the website you requested and connects you to the site. All of this is done using the latest internet standards to maintain a high-performance browsing experience while protecting your privacy.

See also article at EclecticLight.com: Inside iCloud+ Private Relay: can it be trusted?

   
Memory cost for Apple iMac 5K: Apple vs OWC
Pricing as of 2022-01-10
OWC Thunderblade Thunderbolt SSD

Blazing fast, up to 32TB.

YEE HAH!



√ No more slow and noisy hard drives!

Huge Price Savings for 128GB Memory for iMac 5K and Other Macs

re: recommended Macs for photographers and videographers
re: 2020 iMac 5K: Recommended Models and Accessories.

The 2020 iMac 5K accepts the same memory modules as the 2019 iMac 5K.

Both support 128GB memory. Certain other Macs like Intel-based Mac mini also take the same memory.

  1. Buy your 2020 iMac 5K or 2019 iMac 5K with 8GB memory.
  2. Buy 64GB or 128GB OWC memory for massive savings.

No brainer! Save $2000 on 128GB.

CLICK TO VIEW: Recommended Memory, Storage,etc

CLICK TO VIEW: Recommended iMac 5K (buy OWC memory separately)

   
Memory cost for Apple iMac 5K: Apple vs OWC
Pricing as of 2022-01-10
OWC Thunderblade Thunderbolt SSD

Blazing fast, up to 32TB.

YEE HAH!



√ No more slow and noisy hard drives!

REVIEWED: 2020 iMac 5K vs 2019 iMac 5K vs 2019 Mac Pro

re: recommended Macs for photographers and videographers
re: 2020 iMac 5K: Recommended Models and Accessories.

The 2020 iMac 5K will be the last Intel-based Mac that I ever review, so far as I can tell. I expect that Apple will release at least a 10-core if not 20-core Apple Silicon iMac 5K/6K in 2022.

2020 iMac 5K

Review

Vew current Mac wishlist and all current OWC wishlists.

My 16-page review of the 2020 iMac 5K evaluates it for its real-world value versus two existing Macs that I already own, the 2019 iMac 5K (my travel Mac), and the 2019 Mac Pro (my desktop when at home).

This review is heavily focused on photographers and their use cases.

REVIEWED: Apple 2020 iMac 5K (October 2020)

Unsure of what to get? Consult with Lloyd.

Please buy your gear at B&H Photo and OWC/MacSales.com using any link from this site.

CLICK TO VIEW: Recommended Memory, Storage,etc

CLICK TO VIEW: Recommended iMac 5K (buy OWC memory separately)



Upgrade the memory of your 2020 iMac up to 128GB

Upgraded to macOS Monterey — an Unexpectedly Good Result — So Far

re: Apple Core Rot

I upgraded my 2019 Mac Pro to macOS Monterey last night. I feared the worst might happen, but having tried it on a temporarily-purchased-to-be-returned 2020 iMac 5K and finding it worked pretty well, I decided to give it a try.

And wonder of wonders! Apple finally fixed one longstanding headache: the failure to mount volumes specified in synthetic.conf until logging in (a disaster when running a server). Now my local web server starts up just fine after a reboot. Hooray! Actually, I got this wrong somehow—still broken.

And a 2nd bonus: Microsoft Excel 2016 still runs fine, so I can keep using that without having to fork over $100 a year.

It’s not all good—I keep getting a “Photos Library.photoslibrary” zero-byte file appearing in my Pictures folder—very annoying since I don’t use Photos.app and it cannot be removed. Some daemon process I guess. I also see badly blurred text in Spotlight search—weird.

So far, I’ve not run into significant new bugs, which is unprecedented in 5-6 years. Maybe I’ll find some more issues, but so far it has been OK after a day of running Photoshop.

I’m like most other people: I don’t care too much about other people’s bugs, just my own! So I have little doubt there are plenty of bugs, but if Monterey deals me a good hand this time finally, then great.

Don H writes:

It’s good to hear that you’ve had some success with Monterey - it’s about f’n time we had a decent release. But it might be too soon to say; Howard Oakley is observing problems with Time Machine, particularly backing up folders with lots of small files. Beware of this situation if you encounter itself.

That aside, in my own experience I have noticed that the more recent stable Mac OS releases that I gravitate towards happen to start with ‘M’. Way back when Snow Leopard was the gold standard of a solid ‘maintenance’ release; not a lot of glitzy new features but the existing ones got more refined. Then Apple released the dreadful Lion (which was supposed to be the pinnacle of the ‘cat’ versions), followed by the cleanup Mountain Lion, but it wasn’t until Mavericks that things seemed to really gel again.

I pretty much skipped over the next four (I call them the ‘mountain' releases), partly from reading your experiences with them, but then the Mavericks version of Safari stopped working at a lot of web sites and other software pressures forced an upgrade. Mojave turned out to be pretty decent once it settled down (I’m still running it on my main machine). But once again Apple broke what didn’t need fixing and gave us the ‘coastal’ releases, which does include Monterey, but I feel like that one might be another plateau to rest upon.

(I also dread what Apple might have up their sleeves next, given the ever-tighter coupling of iOS and macOS. Yet more over-simplification of the user interface until all utility is erased in a wave of winking emojis?)

So for me the big jumps have been Mavericks > Mojave > Monterey (potentially). When can I expect another stable release - Marin? Malibu? Mecca?

MPG: macOS Merced, around XMAS next year?

I did see see some serious user input problems on the 2020 iMac 5K (nothing but beeps!), but they went away after quitting restarting apps.

Shammeer M writes:

Very good chance the next macOS will be macOS Mammoth: Apple renews ‘Mammoth’ trademark, hinting at potential name for macOS 13 - 9to5Mac

MPG: I vote for Merced ("mercy") as in Merced River. But things are already mammoth in size (12+GB for an OS upgrade... wow).


IntegrityChecker Java (icj) Version 2.02 Now Available

re: IntegrityChecker Java
re:data integrity
re: Validating Data Transfer/Copy Before Deleting the Source/Original Data: diglloydTools IntegrityChecker
re: Detecting Corruption / Validating Data Integrity Over Time and Across Drives and Backup/Restore
re: Reader Question on diglloydTools IntegrityChecker: “verify terabytes of content back and forth between the cloud and other local RAID drives I have”
re: Apple Core Rot: macOS Finder File Copying: Fails to Replace "dot files" When Replacing a folder = DATA LOSS
re: Detecting Data Corruption Caused by Bit Rot or Bad Drives or Software Bugs with diglloydTools IntegrityChecker

diglloydTools IntegrityChecker Java version 2.0 runs on any computer with Java—Mac, Windows, Linux, etc.

Buy diglloydTools

More about IntegrityChecker and why every professional should be using it.

IntegrityChecker Java (icj) version 2.0.2

License and download page...

IntegrityChecker Java version 2.0.2 is now available for download. This release is a minor update.

  • 2022-01-02 Updated installJava.sh to install JDK 17.0.1, including choosing the Intel or Apple Silicon variant automatically.
  • 2022-01-01 Changed the 'sha' command to test hashing speed for a variety of thread counts, emitting a summary table when done. Can be used to characterize performance on different machines and/or tune performance expectations.
  • 2021-12-20 Added SHOW_RECENT_THROUGHPUT flag, which governs whether to show throughput over the past 5000 I/O requests, typically 3-5 seconds on fast SSD.
  • 2021-10-26 Changed the purge code (if invoked with 'sudo') to purge *at least* every N seconds rather than waiting N seconds after the prior purge. Better steady-state purging results. Added milliseconds to the "P" suffix when purges occur.

Documentation/help

See the online help for IntegrityChecker java.

If you need support, please copy/paste the text from the Terminal window—don’t send screen shots as they are very large and frequently contain too little information.

More about IntegrityChecker and why every professional should be using it.

Installation

For macOS users: run the install-icj.sh script. This will install icj and optionally also install Java. Please 'cd' to the directory containing the script first.

Or follow these instructions drag-n-drop instructions:

1. Open a Terminal window
2. Type "cd " (include the space after cd)
3. Drag the install folder to Terminal. It should now look something like this:
cd /Users/lloyd/Desktop/out/2022-0102-icj2_0_2
4. Press the RETURN key.
5. Enter the following, then press the RETURN key:
./install-icj.sh
6. Respond to the install questions, etc.

Installing on macOS — security permissions 

For macOS Catalina, macOS Big Sur, macOS Monterey, the icj installer will fail unless Terminal has full disk access. So first give Terminal full disk access, as shown here:

How to give Terminal full disk access

After Java is installed, Java must ALSO be given full disk access. The 'java' binary application will be found here after installation:

/Library/Java/JavaVirtualMachines/openjdk-16.0.2.jdk/Contents/Home/bin/java


Up to 1527MB/s sustained performance

IntegrityChecker Java (icj): Suppressing Innocuous HASHES_MATCH_DATE_CHANGED Warnings

re: IntegrityChecker Java
re: data integrity

Reader Tony V writes:

Would it be possible to configure icj to not inform about the change of dates ?

If I read the documentation correctly, it appears that I can only ignore a bundle formed of 'change of date' 'change of size' 'change of date+change of size' ... but I would basically like to ignore only 'change of date' for * (all files).

For example:

/Volumes/NO NAME/1.mp3 HASHES_MATCH_DATE_CHANGED stored "2022-01-02 17:01:25.360" now "2022-01-02 17:01:24.000" GMT-0 /Volumes/NO NAME/2.mp3 HASHES_MATCH_DATE_CHANGED stored "2022-01-02 17:01:31.950" now "2022-01-02 17:01:30.000" GMT-0

MPG: the warnings stem from the use of the FAT32 file system, which cannot capture dates the same way as macOS file system, hence the data change warnings. Other metadata is also lost by backing up to FAT32; in general backing macOS files up to a non-macOS file system is not an ideal solution (but it also won’t matter for most types of files).

One way to deal with the output is to remove strip-out the unwanted messages via grep:

icj verify ... | grep -v HASHES_MATCH_DATE_CHANGED

Example for Tony V

There is no global flag for suppressing these innocuous messages everywhere.

However, the [output.suppressInnocuousChanges] section of ~/.icj_prefs_customized preferences file can do so, although it also suppresses other innocuous messages (not just HASHES_MATCH_DATE_CHANGED).

The line shown in blue will suppress all such messages on the volume "NO NAME". In theory one could suppress the message on all volumes by using "/Volumes/**".

###############################################################################################################
[output.suppressInnocuousChanges]
###############################################################################################################
# Paths for folders or files for which innocuous change messages are suppressed.
# Auto-globbing: NO
# Innocuous changes are:  {SIZE_CHANGED, DATE_CHANGED, HASHES_MATCH_DATE_CHANGED, HASH_CHANGED_DATE_CHANGED}
# output of verbose or debug disables this feature.
/Volumes/NO NAME/**

Another example

Here is a more complete example, one I use myself.

###############################################################################################################
[output.suppressInnocuousChanges]
###############################################################################################################
# Paths for folders or files for which innocuous change messages are suppressed.
# Auto-globbing: NO
# Innocuous changes are:  {SIZE_CHANGED, HASHES_MATCH_DATE_CHANGED, HASH_CHANGED_DATE_CHANGED}
# output of verbose or debug disables this feature.
# noisy photo libraries
**.photoslibrary**
**.aplibrary**
**Previews.lrdata**
# suppress huge numbers of nuisance files caused by  Apple crapware 
**/Users/*/Library/**
# maven: suppress messages for build folders and repository changes
**/target/{classes,test-classes,surefire-reports,generated-sources,maven-archiver}**
**/.m2/**

Up to 1527MB/s sustained performance

IntegrityChecker Java (icj): How to Eliminate the WARN_IO_STALL Messages

re: IntegrityChecker Java
re: data integrity

The macOS file system has a weird bug for some years now (one of many Apple Core Rot problems).

On slow drives (hard drives and similar), macOS barfs with a deep I/O queue as used by IntegrityChecker Java (many outstanding I/O requests, up to 96 at a time). This works great on SSDs to improve throughput, but something internal to macOS cannot handle it on slow drives such as hard drives.

Locking up the I/O queue

Symptoms: at regular intervals, macOS locks up all I/O activity for many seconds (10 to 30 seconds). This lockup is not java-specific since all other I/O requests in other applications also stall.

Since icj queues up many requests at a time, every one of those I/O request stalls, and you’ll see a slew of warnings, something like this:

WARN_IO_STALL: delay of 11634ms buf24-33554432 started 1641220236703 now 1641220248337. This delay is a behavioral problem with macOS.
WARN_IO_STALL: delay of 11834ms buf30-33554432 started 1641220236741 now 1641220248575. This delay is a behavioral problem with macOS.
WARN_IO_STALL: delay of 11925ms buf31-33554432 started 1641220236742 now 1641220248667. This delay is a behavioral problem with macOS.
WARN_IO_STALL: delay of 11883ms buf5-33554432 started 1641220236902 now 1641220248785. This delay is a behavioral problem with macOS.
WARN_IO_STALL: delay of 12383ms buf8-33554432 started 1641220237092 now 1641220249475. This delay is a behavioral problem with macOS.
...

Workaround #1 — tell icj to optimize for hard drives

When operating on slow drives (hard drives and similar), cut the threads way down by telling icj to optimize for slow drives using "--optimize HDD" , like this (for verify):

icj verify --optimize HDD

or alternately one can tailor threads and buffers explicitly:

icj verify --threads 2 --large-buffers 4 --small-buffers 4

Edit default settings

This option is not recommended because it affects operations on all drives, even SSDs, cutting performance drastically on fast SSDs. But it could be useful in some scenarios.

Edit the icj file using a plain-text editor and configure these three things to suit:

export NUM_THREADS=2
export LARGE_BUFFERS=4
export SMALL_BUFFERS=4

SHA-512 Hashing Speed in Java: 2019 Mac Pro, 2019 iMac 5K, 2020 iMac 5K, 2021 MacBook Pro M1 Max

re: Apple M1 Macs: Not a Mature Solution for General Usage eg Java Virtual Machine

The Apple MacBook Pro M1 Max is apaprently a speed demon so long as the software gets it right. But since B&H Photo has been as yet unable to deliver a test unit, I’ve not been able to see just how well it performs. Figures below from a remote tester.

But at least one area of functionality is not well supported: hashing speed in Java, not even with a native JDK.

I tested hashing speed on 4 top-end Macs ("icj sha")—pure memory hashing, no I/O involved.

  • The 28-core 2019 Mac Pro kicks butt versus the other machines, as it ought to. But neither it nor the other Mac scale linearly with threads, which is probably a memory bandwidth throttling effect.
  • The 2020 iMac 5K performs marginally better than the 2019 iMac 5K using 8 cores, and its 10 cores offer quite a bit higher throughput vs 8 cores. But in real-world tests with IntegrityChecker Java, it is actually no faster, apparently due to slower read speeds from its SSD.
  • The MacBook Pro M1 Max is pitiably slow at the SHA-512 hash (and all hash functions)—slower than even the 2015 MacBook Pro 4-core (MBP M1 Max needs 6 cores to slightly beat 4 cores!). It’s unclear if this is due to lack of native support for hashing, or whether (unlike Intel), support for hashing is just poor on the M1 CPU. Below, the red line is the MacBook Pro M1 Max. Its two efficiency cores have only ~12% to add over the eight performance cores.

The foregoing is not a suggestion that the MacBook Pro M1 Max is slower than these Macs in general (quite the reverse). But it shows that in at least one context it can be a grossly inferior performer.

SHA-512 Hashing Throughput vs Thread Count; 2019 Mac Pro, 2019 iMac 5K, 2020 iMac 5K, 2021 MacBook Pro M1 Max
SHA-512 Hashing Throughput vs Thread Count
2019 Mac Pro, 2019 iMac 5K, 2020 iMac 5K, 2021 MacBook Pro M1 Max

Up to 1527MB/s sustained performance

MacOS Big Sur Dec 14 Update: Reboots 2019 Mac Pro Continually

re: Apple Core Rot

Apple software updates keep getting scarier (inscrutable progress, multiple reboots), and taking long and longer, even for minor updates.

So far my 2019 Mac Pro has rebooted four or five times. I don’t yet know if the update has destroyed my boot drive, or whether it will succeed. It’s doing something now yet again (“8 minutes remaining”). Another reboot and maybe it will be OK?

UPDATE: it ultimately worked.

Surely Apple indicate with each reboot that it’s not just in an endless bugfest loop.

I would pay to be able to run macOS Mojave on my Mac Pro instead of macOS Big Sur—, since every day I still deal with bugs that were there when it was first released.


Up to 1527MB/s sustained performance

Apple M1 Macs: Not a Mature Solution for General Usage eg Java Virtual Machine

re: Java for Apple M1 Macs
re: SHA-512 Hashing Speed in Java: 2019 Mac Pro, 2019 iMac 5K, 2020 iMac 5K, 2021 MacBook Pro M1 Max

Those using email and a web browser and a few apps... all good, so it seems.

But Apple M1 Macs are not a mature solution for some uses.

Take Java, used by IntegrityChecker Java and Zerene Stacker and certain other specialty software. While there is a native Java virtual machine for Apple ARM (M1, M1 Max, M1 Pro) machines, that does not mean it has robust support for optimal performance.

It’s not terrible; IntegrityChecker Java can still do 2.6GB/sec on an 8+2 core Apple MacBook Pro M1 Max. But that compares to 3.3GB/sec on my 2019 iMac 5K 8-core.

Reader Adam S did some nice research on just how much native-code support there is in the ARM Java for M1 Macs.

Poor Java native-code support for math libraries for M1 Mac

openjdk % find . -name macroAssembler_arm\*.cpp
./jdk/src/hotspot/cpu/arm/macroAssembler_arm.cpp <=== single source file vs 14 for Intel

openjdk % find . -name macroAssembler_x86\*.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_log10.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_arrayCopy_avx3.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_cos.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sin.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_aes.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_adler.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_md5.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_log.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_exp.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_tan.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_pow.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86.cpp
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp

Poor Java native-code support for SHA-512 for M1 Mac

Intel CPUs have strong support for the SHA-512 hash; see Fast SHA512 Implementations ® Architecture Processors.

Feels like the ARM JDK is just immature.

I grepped the OpenJDK source for the ARM SHA-512 update instruction. There are some hits, but I’m not sure what they mean yet.

openjdk % git clone https://git.openjdk.java.net/jdk/
openjdk % find . -type f -exec grep -iH SHA512H "{}" \;
./jdk/test/hotspot/gtest/aarch64/asmtest.out.h:    __ sha512h(v14, __ T2D, v3, v25);                  //       sha512h         q14, q3, v25.2D
./jdk/test/hotspot/gtest/aarch64/asmtest.out.h:    __ sha512h2(v8, __ T2D, v27, v21);                 //       sha512h2                q8, q27, v21.2D
./jdk/test/hotspot/gtest/aarch64/aarch64-asmtest.py:generate(SHA512SIMDOp, ["sha512h", "sha512h2", "sha512su0", "sha512su1"])
./jdk/src/hotspot/cpu/aarch64/assembler_aarch64.hpp:  INSN(sha512h,   0b100000);
./jdk/src/hotspot/cpu/aarch64/assembler_aarch64.hpp:  INSN(sha512h2,  0b100001);
./jdk/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp:      __ sha512h(v##i3, __ T2D, v6, v7);                                             \
./jdk/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp:      __ sha512h2(v##i3, __ T2D, v##i1, v##i0);                                      \

A wild guess is that they’re testing that you can assemble SHA512H (from C?) and that an SHA512H actually comes out. That’s different than calling the instruction in JDK SHA code, obviously. Intel SHA instructions get a lot more love:

adam@Adams-MacBook-Pro openjdk % find . -type f -exec grep -iH sha512_sse4 "{}" \;
adam@Adams-MacBook-Pro openjdk % find . -type f -exec grep -iH sha512_avx "{}" \;
./jdk/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp:    __ sha512_AVX2(msg, state0, state1, msgtmp0, msgtmp1, msgtmp2, msgtmp3, msgtmp4,
./jdk/src/hotspot/cpu/x86/stubRoutines_x86.cpp:// used in MacroAssembler::sha512_AVX2
./jdk/src/hotspot/cpu/x86/macroAssembler_x86.hpp:  void sha512_AVX2_one_round_compute(Register old_h, Register a, Register b, Register c, Register d,
./jdk/src/hotspot/cpu/x86/macroAssembler_x86.hpp:  void sha512_AVX2_one_round_and_schedule(XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7,
./jdk/src/hotspot/cpu/x86/macroAssembler_x86.hpp:  void sha512_AVX2(XMMRegister msg, XMMRegister state0, XMMRegister state1, XMMRegister msgtmp0,
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:void MacroAssembler::sha512_AVX2_one_round_compute(Register  old_h, Register a, Register b, Register c,
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:void MacroAssembler::sha512_AVX2_one_round_and_schedule(
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:void MacroAssembler::sha512_AVX2(XMMRegister msg, XMMRegister state0, XMMRegister state1, XMMRegister msgtmp0,
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    //Schedule 64 input dwords, by calling sha512_AVX2_one_round_and_schedule
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm4, xmm5, xmm6, xmm7, a, b, c, d, e, f, g, h, 0);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm4, xmm5, xmm6, xmm7, h, a, b, c, d, e, f, g, 1);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm4, xmm5, xmm6, xmm7, g, h, a, b, c, d, e, f, 2);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm4, xmm5, xmm6, xmm7, f, g, h, a, b, c, d, e, 3);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm5, xmm6, xmm7, xmm4, e, f, g, h, a, b, c, d, 0);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm5, xmm6, xmm7, xmm4, d, e, f, g, h, a, b, c, 1);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm5, xmm6, xmm7, xmm4, c, d, e, f, g, h, a, b, 2);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm5, xmm6, xmm7, xmm4, b, c, d, e, f, g, h, a, 3);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm6, xmm7, xmm4, xmm5, a, b, c, d, e, f, g, h, 0);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm6, xmm7, xmm4, xmm5, h, a, b, c, d, e, f, g, 1);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm6, xmm7, xmm4, xmm5, g, h, a, b, c, d, e, f, 2);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm6, xmm7, xmm4, xmm5, f, g, h, a, b, c, d, e, 3);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm7, xmm4, xmm5, xmm6, e, f, g, h, a, b, c, d, 0);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm7, xmm4, xmm5, xmm6, d, e, f, g, h, a, b, c, 1);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm7, xmm4, xmm5, xmm6, c, d, e, f, g, h, a, b, 2);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_and_schedule(xmm7, xmm4, xmm5, xmm6, b, c, d, e, f, g, h, a, 3);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(a, a, b, c, d, e, f, g, h, 0);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(h, h, a, b, c, d, e, f, g, 1);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(g, g, h, a, b, c, d, e, f, 2);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(f, f, g, h, a, b, c, d, e, 3);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(e, e, f, g, h, a, b, c, d, 0);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(d, d, e, f, g, h, a, b, c, 1);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(c, c, d, e, f, g, h, a, b, 2);
./jdk/src/hotspot/cpu/x86/macroAssembler_x86_sha.cpp:    sha512_AVX2_one_round_compute(b, b, c, d, e, f, g, h, a, 3);
adam@Adams-MacBook-Pro openjdk % find . -type f -exec grep -iH sha512_avx2_rorx "{}" \;

Thunderbolt 4 Dock

Thunderbolt 4 hub and ports!

Any Mac with Thunderbolt 3.


USA Taxes: Section 179 for Small Business Owners (Accelerated Depreciation): Deduct if In-Service by End Of Year

This site is not a tax adviser, this is FYI ONLY. Consult your own tax adviser. See also Section 179.org.

For a small business owner, the US federal tax code contains a benefit: Section 179 of the internal revenue code. Section 179 at a Glance for 2020, as per Section179.org:

  • 2020 Deduction Limit = $1,040,000
  • 2020 Spending Cap on equipment purchases = $2,620,000
  • Bonus Depreciation: 100% for 2021

In essence, you can write off (fully deduct) depreciable assets acquired and put into service in 2021 as expenses (no depreciation schedule).

See also: Apple MacBook Pro M1 Pro/Max: Hard to Come By, but Some are In Stock.

Any small business that needs a new computer, office gear, camera, or any normally depreciable asset might consider making those purchases and putting them into service by Dec 31.

Need help deciding on a computing or photographic upgrade and/or new system. Lloyd offers consulting.

See my OWC / MacSales.com Wishlists and B&H Photo wishlists.


Up to 1527MB/s sustained performance

diglloyd.com | Terms of Use | PRIVACY POLICY
Contact | About Lloyd Chambers | Consulting | Photo Tours
Mailing Lists | RSS Feeds | Twitter
Copyright © 2020 diglloyd Inc, all rights reserved.
Display info: __RETINA_INFO_STATUS__