@@ -778,7 +778,7 @@ struct llama_file {
778
778
throw std::runtime_error (format (" read error: %s" , strerror (errno)));
779
779
}
780
780
if (ret != 1 ) {
781
- throw std::runtime_error (std::string ( " unexpectedly reached end of file" ) );
781
+ throw std::runtime_error (" unexpectedly reached end of file" );
782
782
}
783
783
}
784
784
@@ -931,29 +931,29 @@ struct llama_mmap {
931
931
#elif defined(_WIN32)
932
932
static constexpr bool SUPPORTED = true ;
933
933
934
- llama_mmap (struct llama_file * file, bool prefetch = true , bool numa = false ) {
935
- ( void ) numa;
934
+ llama_mmap (struct llama_file * file, size_t prefetch = ( size_t ) -1 , bool numa = false) {
935
+ GGML_UNUSED ( numa) ;
936
936
937
937
size = file->size ;
938
938
939
939
HANDLE hFile = (HANDLE) _get_osfhandle (_fileno (file->fp ));
940
940
941
941
HANDLE hMapping = CreateFileMappingA (hFile, NULL , PAGE_READONLY, 0 , 0 , NULL );
942
- DWORD error = GetLastError ();
943
942
944
943
if (hMapping == NULL ) {
944
+ DWORD error = GetLastError ();
945
945
throw std::runtime_error (format (" CreateFileMappingA failed: %s" , llama_format_win_err (error).c_str ()));
946
946
}
947
947
948
948
addr = MapViewOfFile (hMapping, FILE_MAP_READ, 0 , 0 , 0 );
949
- error = GetLastError ();
949
+ DWORD error = GetLastError ();
950
950
CloseHandle (hMapping);
951
951
952
952
if (addr == NULL ) {
953
953
throw std::runtime_error (format (" MapViewOfFile failed: %s" , llama_format_win_err (error).c_str ()));
954
954
}
955
955
956
- if (prefetch) {
956
+ if (prefetch > 0 ) {
957
957
// PrefetchVirtualMemory is only present on Windows 8 and above, so we dynamically load it
958
958
BOOL (WINAPI *pPrefetchVirtualMemory) (HANDLE, ULONG_PTR, PWIN32_MEMORY_RANGE_ENTRY, ULONG);
959
959
HMODULE hKernel32 = GetModuleHandleW (L" kernel32.dll" );
@@ -965,9 +965,9 @@ struct llama_mmap {
965
965
// advise the kernel to preload the mapped memory
966
966
WIN32_MEMORY_RANGE_ENTRY range;
967
967
range.VirtualAddress = addr;
968
- range.NumberOfBytes = (SIZE_T)size;
968
+ range.NumberOfBytes = (SIZE_T) std::min ( size, prefetch) ;
969
969
if (!pPrefetchVirtualMemory (GetCurrentProcess (), 1 , &range, 0 )) {
970
- fprintf (stderr, " warning: PrefetchVirtualMemory failed: %s\n " ,
970
+ LLAMA_LOG_WARN ( " warning: PrefetchVirtualMemory failed: %s\n " ,
971
971
llama_format_win_err (GetLastError ()).c_str ());
972
972
}
973
973
}
@@ -982,26 +982,26 @@ struct llama_mmap {
982
982
983
983
~llama_mmap () {
984
984
if (!UnmapViewOfFile (addr)) {
985
- fprintf (stderr, " warning: UnmapViewOfFile failed: %s\n " ,
985
+ LLAMA_LOG_WARN ( " warning: UnmapViewOfFile failed: %s\n " ,
986
986
llama_format_win_err (GetLastError ()).c_str ());
987
987
}
988
988
}
989
989
#else
990
990
static constexpr bool SUPPORTED = false ;
991
991
992
- llama_mmap (struct llama_file * file, bool prefetch = true , bool numa = false ) {
993
- ( void ) file;
994
- ( void ) prefetch;
995
- ( void ) numa;
992
+ llama_mmap (struct llama_file * file, size_t prefetch = - 1 , bool numa = false ) {
993
+ GGML_UNUSED ( file) ;
994
+ GGML_UNUSED ( prefetch) ;
995
+ GGML_UNUSED ( numa) ;
996
996
997
- throw std::runtime_error (std::string ( " mmap not supported" ) );
997
+ throw std::runtime_error (" mmap not supported" );
998
998
}
999
999
1000
- void unmap (size_t offset , size_t len ) {
1001
- ( void ) offset ;
1002
- ( void ) len ;
1000
+ void unmap_fragment (size_t first , size_t last ) {
1001
+ GGML_UNUSED (first) ;
1002
+ GGML_UNUSED (last) ;
1003
1003
1004
- throw std::runtime_error (std::string ( " mmap not supported" ) );
1004
+ throw std::runtime_error (" mmap not supported" );
1005
1005
}
1006
1006
#endif
1007
1007
};
0 commit comments