Avatar
func testRoundArray() { var array = [Double](repeating: 1.1, count: 3840*2160*4) measure { // 56ms for i in 0..<array.count { array[i] = floor(array[i]) } XCTAssertEqual(array.last!, 1) } } func testRoundSIMDCast() { var array = [Double](repeating: 1.1, count: 3840*2160*4) measure { // 29ms array.withUnsafeMutableBufferPointer { bp in bp.baseAddress!.withMemoryRebound(to: SIMD4<Double>.self, capacity: bp.count/4) { var p = $0 for _ in 0..<bp.count/4 { p.pointee = floor(p.pointee) p += 1 } } } XCTAssertEqual(array.last!, 1) } } 昨日SILみた段階でそんな感じがしてましたがfloorのsimd最適化はされないみたいですね。 simdにfloorceilだけ定義されててroundその他が無いのも謎……