【发布时间】:2019-10-25 07:21:28
【问题描述】:
我正在使用 float2 向量填充 MTLBuffer。缓冲区的创建和填充如下:
struct Particle {
var position: float2
...
}
let particleCount = 100000
let bufferSize = MemoryLayout<Particle>.stride * particleCount
particleBuffer = device.makeBuffer(length: bufferSize)!
var pointer = particleBuffer.contents().bindMemory(to: Particle.self, capacity: particleCount)
pointer = pointer.advanced(by: currentParticles)
pointer.pointee.position = [x, y]
在我的 Metal 文件中,缓冲区的访问方式如下:
struct Particle {
float2 position;
...
};
kernel void compute(device Particle *particles [[buffer(0)]], … )
我需要在我的 Metal 计算内核中使用半精度浮点数。在 Metal 方面,只需为数据类型指定 half2 即可。
在 CPU 方面,用半精度浮点数填充缓冲区的最佳方法是什么?
【问题讨论】:
-
我知道你包含了
swift4标签,但是如果你可以使用 Swift 5.3(从 Apple 下载 XCode 12.2 测试版),那么他们现在显然有Float16。欢呼! hackingwithswift.com/articles/218/whats-new-in-swift-5-3
标签: swift swift4 metal half-precision-float