I have actually studied this issue and the much greater overhead in the SAMD21 vs the ARM based Arduino boards. See my blog post but if TL;DR the minimum pulse width you can create with the SAMD21 (at 48MHz) is 1.5µs using digitalWrite(pin,1); digitalWrite(pin,0). Writing directly to the port the width is 20ns which is 70 times faster.
It doesn't really fare well compared to the AVR microcontrollers, which can do this sort of thing far more efficiently. Just changing the pin value takes 5 instructions because values must be loaded into registers before actually writing to the port. So it takes 100ns to change a pin value. With the Arduino Nano Every (ATmega4809) it can be done in a single instruction taking 62ns. Minimum pulse width is 1.2µs using digitalWrite and 62ns accessing the port directly.
If you are doing this yourself remember to access using PORT_IOBUS otherwise you end up wit h wait states being added and it takes 4x longer to execute.