SIMD is Single Instruction, Multiple Data. Up-to-date CPU designs include SIMD instructions to improve the performance of 3D graphics and multimedia. Touching your question, the main difference between SCNVector3 and SIMD3<Float> structs is in their initializers. SCNVector3 supports:
Float, Double, CGFloat, Int, SIMD3<Float> and SIMD3<Double> types
for X, Y and Z elements. As you know, SIMD3<Float> and its simd_float3 typealias supports only 32-bit Float. By the way, SIMD3<Float> is actively used in RealityKit.
So, in SceneKit you can use both SCNVector3 and SIMD3<Float> depending on what type needed for particular instance property. Here's eight examples, showing how you can scale a SCNNode. In all these examples we use the same scaling values (x=5, y=2, z=5).
1.
let node = SCNNode()
node.scale = SCNVector3(5, 2, 5)
node.simdScale = simd_float3(5, 2, 5)
node.simdScale = SIMD3<Float>(5, 2, 5)
node.transform.m11 = 5
node.transform.m22 = 2
node.transform.m33 = 5
node.transform = SCNMatrix4( m11: 5, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 2, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 5, m34: 0,
m41: 0, m42: 0, m43: 0, m44: 1 )
node.simdTransform.columns.0.x = 5
node.simdTransform.columns.1.y = 2
node.simdTransform.columns.2.z = 5
node.simdTransform = simd_float4x4(diagonal: SIMD4<Float>(5, 2, 5, 1))
node.simdTransform = .init( SIMD4<Float>(5, 0, 0, 0),
SIMD4<Float>(0, 2, 0, 0),
SIMD4<Float>(0, 0, 5, 0),
SIMD4<Float>(0, 0, 0, 1) )
If you need more info about 4x4 matrices and simd_float4x4 type, read my Medium story.