added memory
This commit is contained in:
parent
048dc00f25
commit
307e7e6c46
|
|
@ -0,0 +1,50 @@
|
|||
|
||||
import MetalKit
|
||||
|
||||
let device = MTLCreateSystemDefaultDevice()!
|
||||
let queue = device.makeCommandQueue()
|
||||
let count = 1500
|
||||
var myVector = [Float](repeating: 0, count: count)
|
||||
var length = count * MemoryLayout<Float>.size
|
||||
//print(length)
|
||||
var outBuffer = device.makeBuffer(bytes: myVector, length: length, options: [])
|
||||
for (index, value) in myVector.enumerated() { myVector[index] = Float(index) }
|
||||
var inBuffer = device.makeBuffer(bytes: myVector, length: length, options: [])
|
||||
|
||||
let path = Bundle.main.path(forResource: "memory", ofType: "metal")
|
||||
let input = try String(contentsOfFile: path!, encoding: String.Encoding.utf8)
|
||||
let library = try device.makeLibrary(source: input, options: nil)
|
||||
let function = library.makeFunction(name: "compute")!
|
||||
let computePipelineState = try! device.makeComputePipelineState(function: function)
|
||||
|
||||
let commandBuffer = queue.makeCommandBuffer()
|
||||
let encoder = commandBuffer.makeComputeCommandEncoder()
|
||||
encoder.setComputePipelineState(computePipelineState)
|
||||
encoder.setBuffer(inBuffer, offset: 0, at: 0)
|
||||
encoder.setBuffer(outBuffer, offset: 0, at: 1)
|
||||
let size = MTLSize(width: count, height: 1, depth: 1)
|
||||
encoder.dispatchThreadgroups(size, threadsPerThreadgroup: size)
|
||||
encoder.endEncoding()
|
||||
commandBuffer.commit()
|
||||
|
||||
let result = outBuffer.contents().bindMemory(to: Float.self, capacity: count)
|
||||
var data = [Float](repeating:0, count: count)
|
||||
for i in 0 ..< count { data[i] = result[i] }
|
||||
data.map { $0 }
|
||||
|
||||
import ModelIO
|
||||
|
||||
guard let url = Bundle.main.url(forResource: "teapot", withExtension: "obj") else { fatalError() }
|
||||
let asset = MDLAsset(url: url)
|
||||
let voxelArray = MDLVoxelArray(asset: asset, divisions: 10, patchRadius: 0)
|
||||
if let data = voxelArray.voxelIndices() {
|
||||
data.withUnsafeBytes { (voxels: UnsafePointer<MDLVoxelIndex>) -> Void in
|
||||
let count = data.count / MemoryLayout<MDLVoxelIndex>.size
|
||||
var voxelIndex = voxels
|
||||
for _ in 0..<count {
|
||||
let position = voxelArray.spatialLocation(ofIndex: voxelIndex.pointee)
|
||||
print(position)
|
||||
voxelIndex = voxelIndex.successor()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
|
||||
#include <metal_stdlib>
|
||||
using namespace metal;
|
||||
|
||||
kernel void compute(const device float *inVector [[ buffer(0) ]],
|
||||
device float *outVector [[ buffer(1) ]],
|
||||
uint id [[ thread_position_in_grid ]])
|
||||
{
|
||||
outVector[id] = 1.0 / (1.0 + exp(-inVector[id]));
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='macos'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Timeline
|
||||
version = "3.0">
|
||||
<TimelineItems>
|
||||
<LoggerValueHistoryTimelineItem
|
||||
documentLocation = "#CharacterRangeLen=2&CharacterRangeLoc=1415&EndingColumnNumber=14&EndingLineNumber=32&StartingColumnNumber=12&StartingLineNumber=32&Timestamp=515338097.885755"
|
||||
selectedRepresentationIndex = "0"
|
||||
shouldTrackSuperviewWidth = "NO">
|
||||
</LoggerValueHistoryTimelineItem>
|
||||
</TimelineItems>
|
||||
</Timeline>
|
||||
Loading…
Reference in New Issue