the main thing that makes fortran preferable to C is the way it handles arrays and vectors. due to different pointer semantics, they can be laid out more efficiently in memory, meaning less operations need to be done for a given calculation.
Interesting. Is this a fundamental limitation of C or is it just more preferable and easier to use FORTRAN when implementing it?
Meaning could the same performance be achieved in C but most optimized libraries are already written so why bother? Or basically C can’t achieve the memory optimization at all?
you can get the same performance by using the restrict keyword in C.
basically, C allows pointer aliasing while fortran does not, which means C programs need to be able to handle cases when a value is accessed from multiple locations. fortran does not, so a lot of accesses can be optimized into immediates, or unrolled without guards.
restrict is a pinky-promise to the compiler that no overlapping takes place, e.g. that a value will only be accessed from one place. it’s basically rust ownership semantics without enforcement.
the main thing that makes fortran preferable to C is the way it handles arrays and vectors. due to different pointer semantics, they can be laid out more efficiently in memory, meaning less operations need to be done for a given calculation.
Interesting. Is this a fundamental limitation of C or is it just more preferable and easier to use FORTRAN when implementing it?
Meaning could the same performance be achieved in C but most optimized libraries are already written so why bother? Or basically C can’t achieve the memory optimization at all?
you can get the same performance by using the
restrict
keyword in C.basically, C allows pointer aliasing while fortran does not, which means C programs need to be able to handle cases when a value is accessed from multiple locations. fortran does not, so a lot of accesses can be optimized into immediates, or unrolled without guards.
restrict
is a pinky-promise to the compiler that no overlapping takes place, e.g. that a value will only be accessed from one place. it’s basically rust ownership semantics without enforcement.