spb/forge Public MIT
Forge — LLM training from scratch in pure C++20 + Metal on Apple Silicon.
C++ 61.2%
C 23%
Python 7.6%
TeX 7.2%
CMake 1.1%
1//-------------------------------------------------------------------------------------------------------------------------------------------------------------2//3// Metal/MTLIOCompressor.hpp4//5// Copyright 2020-2024 Apple Inc.6//7// Licensed under the Apache License, Version 2.0 (the "License");8// you may not use this file except in compliance with the License.9// You may obtain a copy of the License at10//11// http://www.apache.org/licenses/LICENSE-2.012//13// Unless required by applicable law or agreed to in writing, software14// distributed under the License is distributed on an "AS IS" BASIS,15// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.16// See the License for the specific language governing permissions and17// limitations under the License.18//19//-------------------------------------------------------------------------------------------------------------------------------------------------------------2021#pragma once2223#include "MTLDefines.hpp"24#include "MTLHeaderBridge.hpp"25#include "MTLPrivate.hpp"26#include "MTLDevice.hpp"2728#include "../Foundation/Foundation.hpp"2930namespace MTL31{32using IOCompressionContext=void*;3334_MTL_ENUM(NS::Integer, IOCompressionStatus) {35 IOCompressionStatusComplete = 0,36 IOCompressionStatusError = 1,37};3839size_t IOCompressionContextDefaultChunkSize();4041IOCompressionContext IOCreateCompressionContext(const char* path, IOCompressionMethod type, size_t chunkSize);4243void IOCompressionContextAppendData(IOCompressionContext context, const void* data, size_t size);4445IOCompressionStatus IOFlushAndDestroyCompressionContext(IOCompressionContext context);4647}4849#if defined(MTL_PRIVATE_IMPLEMENTATION)5051namespace MTL::Private {5253MTL_DEF_FUNC(MTLIOCompressionContextDefaultChunkSize, size_t (*)(void));5455MTL_DEF_FUNC( MTLIOCreateCompressionContext, void* (*)(const char*, MTL::IOCompressionMethod, size_t) );5657MTL_DEF_FUNC( MTLIOCompressionContextAppendData, void (*)(void*, const void*, size_t) );5859MTL_DEF_FUNC( MTLIOFlushAndDestroyCompressionContext, MTL::IOCompressionStatus (*)(void*) );6061}6263_NS_EXPORT size_t MTL::IOCompressionContextDefaultChunkSize()64{65 return MTL::Private::MTLIOCompressionContextDefaultChunkSize();66}6768_NS_EXPORT void* MTL::IOCreateCompressionContext(const char* path, IOCompressionMethod type, size_t chunkSize)69{70 if ( MTL::Private::MTLIOCreateCompressionContext )71 {72 return MTL::Private::MTLIOCreateCompressionContext( path, type, chunkSize );73 }74 return nullptr;75}7677_NS_EXPORT void MTL::IOCompressionContextAppendData(void* context, const void* data, size_t size)78{79 if ( MTL::Private::MTLIOCompressionContextAppendData )80 {81 MTL::Private::MTLIOCompressionContextAppendData( context, data, size );82 }83}8485_NS_EXPORT MTL::IOCompressionStatus MTL::IOFlushAndDestroyCompressionContext(void* context)86{87 if ( MTL::Private::MTLIOFlushAndDestroyCompressionContext )88 {89 return MTL::Private::MTLIOFlushAndDestroyCompressionContext( context );90 }91 return MTL::IOCompressionStatusError;92}9394#endif95