new compute kernel design, less mem read delay

This commit is contained in:
Nitload
2026-04-07 01:04:05 +08:00
parent d702b3224c
commit 12a216d404
47 changed files with 225 additions and 145 deletions
+1
View File
@@ -12,3 +12,4 @@
*/.vs */.vs
/StgSharp.Native/lib /StgSharp.Native/lib
obj obj
/cmake_build
+17 -29
View File
@@ -20,20 +20,22 @@ sn_resolve_target_identifiers(
file(GLOB STGSHARP_NATIVE_SOURCES CONFIGURE_DEPENDS file(GLOB STGSHARP_NATIVE_SOURCES CONFIGURE_DEPENDS
${CMAKE_CURRENT_LIST_DIR}/sn-src/*.c) ${CMAKE_CURRENT_LIST_DIR}/sn-src/*.c)
file(GLOB STGSHARP_NATIVE_HEADERS CONFIGURE_DEPENDS list(REMOVE_ITEM STGSHARP_NATIVE_SOURCES
${CMAKE_CURRENT_LIST_DIR}/sn-head/*.h) ${CMAKE_CURRENT_LIST_DIR}/sn-src/formatted.c
${CMAKE_CURRENT_LIST_DIR}/sn-src/StgSharpC.c)
file(GLOB STGSHARP_NATIVE_TEMPLATES CONFIGURE_DEPENDS
${CMAKE_CURRENT_LIST_DIR}/sn-template/*.h
${CMAKE_CURRENT_LIST_DIR}/sn-template/*.inl
${CMAKE_CURRENT_LIST_DIR}/sn-template/*.inc
${CMAKE_CURRENT_LIST_DIR}/sn-template/*.ipp)
if(NOT STGSHARP_NATIVE_SOURCES) if(NOT STGSHARP_NATIVE_SOURCES)
message(FATAL_ERROR "No source files found under sn-src/.") message(FATAL_ERROR "No source files found under sn-src/.")
endif() endif()
get_filename_component(STGSHARP_SOLUTION_ROOT ${CMAKE_CURRENT_LIST_DIR} DIRECTORY) get_filename_component(STGSHARP_SOURCE_ROOT ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
get_filename_component(STGSHARP_SOURCE_ROOT_NAME ${STGSHARP_SOURCE_ROOT} NAME)
if(STGSHARP_SOURCE_ROOT_NAME STREQUAL "src")
get_filename_component(STGSHARP_SOLUTION_ROOT ${STGSHARP_SOURCE_ROOT} DIRECTORY)
else()
set(STGSHARP_SOLUTION_ROOT ${STGSHARP_SOURCE_ROOT})
endif()
if(SN_RESOLVED_OS_NAME STREQUAL "windows") if(SN_RESOLVED_OS_NAME STREQUAL "windows")
set(STGSHARP_OS_TAG win) set(STGSHARP_OS_TAG win)
@@ -55,16 +57,12 @@ else()
set(STGSHARP_ARCH_TAG ${SN_RESOLVED_ARCH_NAME}) set(STGSHARP_ARCH_TAG ${SN_RESOLVED_ARCH_NAME})
endif() endif()
set(STGSHARP_BUILD_OUTPUT_DIR ${STGSHARP_SOLUTION_ROOT}/build/${STGSHARP_OS_TAG}-${STGSHARP_ARCH_TAG}) set(STGSHARP_BUILD_OUTPUT_DIR ${STGSHARP_SOLUTION_ROOT}/cmake_build/${STGSHARP_OS_TAG}_${STGSHARP_ARCH_TAG})
set(STGSHARP_OBJECT_ROOT_DIR ${STGSHARP_SOLUTION_ROOT}/obj/${PROJECT_NAME}) set(STGSHARP_OBJECT_ROOT_DIR ${STGSHARP_SOLUTION_ROOT}/obj/${PROJECT_NAME})
set(STGSHARP_NATIVE_PROJECT_FILES
${STGSHARP_NATIVE_SOURCES}
${STGSHARP_NATIVE_HEADERS}
${STGSHARP_NATIVE_TEMPLATES})
add_library(${PROJECT_NAME} SHARED ${STGSHARP_NATIVE_PROJECT_FILES}) set(STGSHARP_C_FRONTEND_VARIANT "${CMAKE_C_COMPILER_FRONTEND_VARIANT}")
source_group(TREE ${CMAKE_CURRENT_LIST_DIR} FILES ${STGSHARP_NATIVE_PROJECT_FILES}) add_library(${PROJECT_NAME} SHARED ${STGSHARP_NATIVE_SOURCES})
set_target_properties(${PROJECT_NAME} PROPERTIES set_target_properties(${PROJECT_NAME} PROPERTIES
C_STANDARD 11 C_STANDARD 11
@@ -86,35 +84,25 @@ endforeach()
set_target_properties(${PROJECT_NAME} PROPERTIES set_target_properties(${PROJECT_NAME} PROPERTIES
COMPILE_PDB_OUTPUT_DIRECTORY ${STGSHARP_OBJECT_ROOT_DIR}/$<CONFIG>/${STGSHARP_ARCH_TAG}) COMPILE_PDB_OUTPUT_DIRECTORY ${STGSHARP_OBJECT_ROOT_DIR}/$<CONFIG>/${STGSHARP_ARCH_TAG})
if(MSVC OR (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")) if(MSVC OR STGSHARP_C_FRONTEND_VARIANT STREQUAL "MSVC")
target_compile_options(${PROJECT_NAME} PRIVATE target_compile_options(${PROJECT_NAME} PRIVATE
/Fd${STGSHARP_OBJECT_ROOT_DIR}/$<CONFIG>/${STGSHARP_ARCH_TAG}/) /Fd${STGSHARP_OBJECT_ROOT_DIR}/$<CONFIG>/${STGSHARP_ARCH_TAG}/)
endif() endif()
if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND SN_RESOLVED_ARCH_NAME STREQUAL "x86_64") if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND SN_RESOLVED_ARCH_NAME STREQUAL "x86_64")
# Keep the intrinsic type system and builtin declarations visible to all TUs. if(STGSHARP_C_FRONTEND_VARIANT STREQUAL "MSVC")
# The runtime dispatch contract still follows T_arch/T_feature at the function level.
if(CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
target_compile_options(${PROJECT_NAME} PRIVATE target_compile_options(${PROJECT_NAME} PRIVATE
/clang:-mavx /clang:-mavx
/clang:-mavx2 /clang:-mavx2
/clang:-mfma /clang:-mfma
/clang:-mf16c
/clang:-mavx512f /clang:-mavx512f
/clang:-mavx512cd
/clang:-mavx512dq
/clang:-mavx512bw
/clang:-mavx512vl) /clang:-mavx512vl)
else() else()
target_compile_options(${PROJECT_NAME} PRIVATE target_compile_options(${PROJECT_NAME} PRIVATE
-mavx -mavx
-mavx2 -mavx2
-mfma -mfma
-mf16c
-mavx512f -mavx512f
-mavx512cd
-mavx512dq
-mavx512bw
-mavx512vl) -mavx512vl)
endif() endif()
endif() endif()
@@ -122,7 +110,6 @@ endif()
target_include_directories(${PROJECT_NAME} target_include_directories(${PROJECT_NAME}
PRIVATE PRIVATE
${CMAKE_CURRENT_LIST_DIR}/sn-head ${CMAKE_CURRENT_LIST_DIR}/sn-head
${CMAKE_CURRENT_LIST_DIR}/sn-template
${CMAKE_CURRENT_LIST_DIR}/lib) ${CMAKE_CURRENT_LIST_DIR}/lib)
target_compile_definitions(${PROJECT_NAME} target_compile_definitions(${PROJECT_NAME}
@@ -140,4 +127,5 @@ endif()
message(STATUS "StgSharp.Native target OS: ${SN_RESOLVED_OS_NAME} (${SN_RESOLVED_OS_DEFINE})") message(STATUS "StgSharp.Native target OS: ${SN_RESOLVED_OS_NAME} (${SN_RESOLVED_OS_DEFINE})")
message(STATUS "StgSharp.Native target ISA: ${SN_RESOLVED_ARCH_NAME} (${SN_RESOLVED_ARCH_DEFINE})") message(STATUS "StgSharp.Native target ISA: ${SN_RESOLVED_ARCH_NAME} (${SN_RESOLVED_ARCH_DEFINE})")
message(STATUS "StgSharp.Native compiler front-end: ${STGSHARP_C_FRONTEND_VARIANT}")
message(STATUS "StgSharp.Native output dir: ${STGSHARP_BUILD_OUTPUT_DIR}") message(STATUS "StgSharp.Native output dir: ${STGSHARP_BUILD_OUTPUT_DIR}")
+5 -6
View File
@@ -85,8 +85,8 @@
<!-- 把 ARM64 → arm64,x64 保持 x64 --> <!-- 把 ARM64 → arm64,x64 保持 x64 -->
<_ArchTag Condition="'$(Platform)'=='x64'">x64</_ArchTag> <_ArchTag Condition="'$(Platform)'=='x64'">x64</_ArchTag>
<_ArchTag Condition="'$(Platform)'=='ARM64'">arm64</_ArchTag> <_ArchTag Condition="'$(Platform)'=='ARM64'">arm64</_ArchTag>
<!-- 输出到 build/win-<arch>/ --> <!-- 输出到 cmake_build/win_<arch>/,与 CMake 目录约定保持一致 -->
<OutDir>$(SolutionDir)build\win-$(_ArchTag)\</OutDir> <OutDir>$(SolutionDir)cmake_build\win_$(_ArchTag)\</OutDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\$(Platform)\</IntDir> <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\$(Platform)\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'"> <PropertyGroup Condition="'$(Configuration)'=='Debug'">
@@ -110,7 +110,7 @@
<LanguageStandard_C>stdc11</LanguageStandard_C> <LanguageStandard_C>stdc11</LanguageStandard_C>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>$(ProjectDir)lib;$(ProjectDir)sn-head;$(ProjectDir)sn-template;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ProjectDir)lib;$(ProjectDir)sn-head;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<!-- DLL 应该用 Windows,不是 Console --> <!-- DLL 应该用 Windows,不是 Console -->
@@ -172,7 +172,7 @@
<!-- source files --> <!-- source files -->
<!-- ════════════════════════════════════════════════════════ --> <!-- ════════════════════════════════════════════════════════ -->
<ItemGroup> <ItemGroup>
<ClCompile Include="sn-src\m.transpose.x86.c" /> <ClCompile Include="sn-src\m.basic.x86.c" />
<ClCompile Include="sn-src\dllmain.c" /> <ClCompile Include="sn-src\dllmain.c" />
<ClCompile Include="sn-src\m.bufop.x86.c" /> <ClCompile Include="sn-src\m.bufop.x86.c" />
<ClCompile Include="sn-src\m.solve.x86.c" /> <ClCompile Include="sn-src\m.solve.x86.c" />
@@ -185,8 +185,7 @@
<ClCompile Include="sn-src\simdid.x86.c" /> <ClCompile Include="sn-src\simdid.x86.c" />
<ClCompile Include="sn-src\simdid_compare.x86.c" /> <ClCompile Include="sn-src\simdid_compare.x86.c" />
<ClCompile Include="sn-src\sn_native.c" /> <ClCompile Include="sn-src\sn_native.c" />
<ClCompile Include="sn-src\thread.linux.c" /> <ClCompile Include="sn-src\t.affinity.c" />
<ClCompile Include="sn-src\thread.windows.c" />
<ClCompile Include="sn-src\vector.c" /> <ClCompile Include="sn-src\vector.c" />
<ClCompile Include="sn-src\vector_dot.c" /> <ClCompile Include="sn-src\vector_dot.c" />
</ItemGroup> </ItemGroup>
@@ -16,10 +16,6 @@
<Filter Include="Document"> <Filter Include="Document">
<UniqueIdentifier>{fbd74b53-5314-4d9d-a788-07bd1b413f74}</UniqueIdentifier> <UniqueIdentifier>{fbd74b53-5314-4d9d-a788-07bd1b413f74}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="模板文件">
<UniqueIdentifier>{C8E0D8C1-42A1-4F7E-9C35-7E6D32D49A7B}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="sn-src\dllmain.c"> <ClCompile Include="sn-src\dllmain.c">
@@ -43,7 +39,7 @@
<ClCompile Include="sn-src\load_glfw.c"> <ClCompile Include="sn-src\load_glfw.c">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sn-src\m.transpose.x86.c"> <ClCompile Include="sn-src\m.basic.x86.c">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sn-src\sk.fma.x86.c"> <ClCompile Include="sn-src\sk.fma.x86.c">
@@ -64,15 +60,12 @@
<ClCompile Include="sn-src\mk.fma.x86.c"> <ClCompile Include="sn-src\mk.fma.x86.c">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sn-src\thread.windows.c"> <ClCompile Include="sn-src\t.affinity.c">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sn-src\simdid_compare.x86.c"> <ClCompile Include="sn-src\simdid_compare.x86.c">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="sn-src\thread.linux.c">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="sn-head\gl.h"> <ClInclude Include="sn-head\gl.h">
+104
View File
@@ -0,0 +1,104 @@
[
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\dllmain.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\dllmain.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/dllmain.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/dllmain.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\load_glfw.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\load_glfw.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/load_glfw.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/load_glfw.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\load_intrinsic.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\load_intrinsic.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/load_intrinsic.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/load_intrinsic.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\m.bufop.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\m.bufop.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/m.bufop.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/m.bufop.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\m.solve.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\m.solve.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/m.solve.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/m.solve.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\m.transpose.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\m.transpose.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/m.transpose.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/m.transpose.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\mk.fma.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\mk.fma.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/mk.fma.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/mk.fma.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\s.factorial.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\s.factorial.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/s.factorial.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/s.factorial.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\s.hash.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\s.hash.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/s.hash.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/s.hash.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\simdid.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\simdid.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/simdid.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/simdid.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\simdid_compare.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\simdid_compare.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/simdid_compare.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/simdid_compare.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\sk.fma.x86.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\sk.fma.x86.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/sk.fma.x86.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/sk.fma.x86.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\sn_native.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\sn_native.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/sn_native.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/sn_native.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\thread.linux.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\thread.linux.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/thread.linux.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/thread.linux.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\thread.windows.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\thread.windows.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/thread.windows.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/thread.windows.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\vector.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\vector.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/vector.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/vector.c.obj"
},
{
"directory": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu",
"command": "C:\\PROGRA~1\\LLVM\\bin\\clang.exe -DSN_ARCH_TARGET=SN_ARCH_X86_64 -DSN_EXTERN_TARGET -DSN_OS_TARGET=SN_OS_WINDOWS -DStgSharp_Native_EXPORTS -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-head -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/glfw -ID:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/lib/stbi -O0 -g -Xclang -gcodeview -std=gnu11 -D_DEBUG -D_DLL -D_MT -Xclang --dependent-lib=msvcrtd -mavx -mavx2 -mfma -mavx512f -mavx512vl -o CMakeFiles\\StgSharp.Native.dir\\sn-src\\vector_dot.c.obj -c D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\StgSharp.Native\\sn-src\\vector_dot.c",
"file": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/StgSharp.Native/sn-src/vector_dot.c",
"output": "D:/NitloadIndustry/研究项目/1-Flagship/TH2020/ProjectFile/内核源代码/build/cmake-clang-gnu/CMakeFiles/StgSharp.Native.dir/sn-src/vector_dot.c.obj"
}
]
+6 -32
View File
@@ -12,30 +12,13 @@
#include "../lib/stbi/stb_image.h" #include "../lib/stbi/stb_image.h"
#include "gl.h" #include "gl.h"
#include "wgl.h" // #include "wgl.h"
#define GLFWAPI INTERNAL
#include "glfw\glfw3.h" #include "glfw\glfw3.h"
#include <immintrin.h> #include <immintrin.h>
#include <assert.h> #include <assert.h>
#include <glfw_function.h> #include <glfw_function.h>
#ifndef SN_APIDEF
#ifdef _WIN32
#define SN_API __declspec(dllexport)
#elif defined _LINUX_
#define SN_API __attribute__((dllexport))
#elif defined _APPLE_
#define SN_API __attribute__((visibility("default")))
#else
#define SN_API
#endif
#endif // ! SN_APIDEF
#if __cplusplus
extern "C" {
#endif
#define byte char #define byte char
#define cs_char uint16_t #define cs_char uint16_t
#define sn_null_assert(ptr) assert(ptr != NULL) #define sn_null_assert(ptr) assert(ptr != NULL)
@@ -65,21 +48,12 @@ SN_API void SN_DECL unloadImageData(Image *out);
SN_API char *SN_DECL readLog(void); SN_API char *SN_DECL readLog(void);
SN_API void SN_DECL load_glfw_functions(GLFWFunctionTable *table); SN_API void SN_DECL load_glfw_functions(GLFWFunctionTable *table);
SN_API void SN_DECL load_intrinsic_function(void *intrinsic_context, uint64_t id); SN_API void SN_DECL load_intrinsic_function(void *intrinsic_context, uint64_t id);
SN_API SIMDID SN_DECL sn_get_simd_level_global();
#pragma region numa
SN_API SIMDID SN_DECL sn_get_unite_simd(SIMDID left, SIMDID right);
SN_API int SN_DECL sn_compare_simd(SIMDID left, SIMDID right);
SN_API void SN_DECL sn_set_thread_affinity(int core_id);
SN_API int SN_DECL sn_get_numa_overall(int *out_numa_count, int *count_of_each_numa);
SN_API int SN_DECL sn_get_numa_each(int numa_id, uint64_t *in_numa_cpuid, uint64_t *global_cpuid);
/* Per-core variant: always re-executes CPUID, never caches. /* Per-core variant: always re-executes CPUID, never caches.
* Must be called on the target core (after affinity is set). */ * Must be called on the target core (after affinity is set). */
SN_API SIMDID SN_DECL sn_get_simd_level_local(); SN_API SIMDID SN_DECL sn_get_simd_level_local();
SN_API SIMDID SN_DECL sn_get_simd_level_global(); SN_API SIMDID SN_DECL sn_get_unite_simd(SIMDID left, SIMDID right);
SN_API int SN_DECL sn_compare_simd(SIMDID left, SIMDID right);
#pragma endregion SN_API void SN_DECL sn_set_thread_affinity(int core_id);
#ifdef __cplusplus
}
#endif
#endif #endif
+4 -6
View File
@@ -2,7 +2,7 @@
#ifndef SN_INTERNAL #ifndef SN_INTERNAL
#define SN_INTERNAL #define SN_INTERNAL
#include <immintrin.h> #include <xmmintrin.h>
#define UNSAFE_AS(type, expr) *(type *)&(expr) #define UNSAFE_AS(type, expr) *(type *)&(expr)
@@ -13,17 +13,20 @@
#define SN_MAT_DECL __cdecl __forceinline #define SN_MAT_DECL __cdecl __forceinline
#define SN_API __declspec(dllexport) #define SN_API __declspec(dllexport)
#define FORCEINLINE __forceinline #define FORCEINLINE __forceinline
#define NOINLINE __declspec(noinline)
#include <windows.h> #include <windows.h>
#elif defined(__clang__) || defined(__GNUC__) #elif defined(__clang__) || defined(__GNUC__)
#define SN_DECL __attribute__((cdecl)) #define SN_DECL __attribute__((cdecl))
#define SN_MAT_DECL __attribute__((cdecl)) __attribute__((always_inline)) #define SN_MAT_DECL __attribute__((cdecl)) __attribute__((always_inline))
#define SN_API __attribute__((dllexport)) #define SN_API __attribute__((dllexport))
#define FORCEINLINE __attribute__((always_inline)) #define FORCEINLINE __attribute__((always_inline))
#define NOINLINE __attribute__((noinline))
#else #else
#define SN_API #define SN_API
#define SN_DECL #define SN_DECL
#define SN_MAT_DECL #define SN_MAT_DECL
#define FORCEINLINE #define FORCEINLINE
#define NOINLINE
#endif #endif
#if defined(_MSC_VER) #if defined(_MSC_VER)
@@ -37,9 +40,4 @@
#define PRIVATE static #define PRIVATE static
#define INTERNAL extern #define INTERNAL extern
#define SN_PTR_CAST(type, expr) ((type *)(void *)(expr))
#define SN_CONST_PTR_CAST(type, expr) ((type const *)(void const *)(expr))
#define SN_REF_CAST(type, expr) ((type *)(void *)&(expr))
#define SN_CONST_REF_CAST(type, expr) ((type const *)(void const *)&(expr))
#endif // #endif //
@@ -5,6 +5,13 @@
#include "sn_intrinsic.h" #include "sn_intrinsic.h"
#include "sn_intrinsic.std.h" #include "sn_intrinsic.std.h"
#ifndef SN_X86_TARGET_ATTR_sse
#define SN_X86_TARGET_ATTR_sse SN_CLANG_TARGET_ATTR("sse2")
#define SN_X86_TARGET_ATTR_avx SN_CLANG_TARGET_ATTR("avx")
#define SN_X86_TARGET_ATTR_avx_fma SN_CLANG_TARGET_ATTR("avx,fma")
#define SN_X86_TARGET_ATTR_512 SN_CLANG_TARGET_ATTR("avx512f,avx512vl")
#endif
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// SIMDID layout helpers (see SIMDID.x86.md) // SIMDID layout helpers (see SIMDID.x86.md)
// bits [3..0] : Root ISA // bits [3..0] : Root ISA
@@ -105,8 +112,7 @@
* Higher numeric value == stronger / higher-capability topology. */ * Higher numeric value == stronger / higher-capability topology. */
#define SIMDID_UARCH_HYBRID_E (1U << 0) /* E-core (efficiency/small) in a hybrid topology */ #define SIMDID_UARCH_HYBRID_E (1U << 0) /* E-core (efficiency/small) in a hybrid topology */
#define SIMDID_UARCH_HYBRID_P (1U << 1) /* P-core (performance/big) in a hybrid topology */ #define SIMDID_UARCH_HYBRID_P (1U << 1) /* P-core (performance/big) in a hybrid topology */
#define SIMDID_UARCH_SIMD_DUAL \ #define SIMDID_UARCH_SIMD_DUAL (1U << 2) /* SIMD is glued/dual (summary: AVX_DUAL or AVX512_IMPL=DUAL) */
(1U << 2) /* SIMD is glued/dual (summary: AVX_DUAL or AVX512_IMPL=DUAL) */
#endif #endif
// Pack helpers (define locally to avoid missing macros when included standalone) // Pack helpers (define locally to avoid missing macros when included standalone)
@@ -239,8 +245,8 @@ INTERNAL uint64_t SN_DECL factorial_simd_sse(int n);
#pragma region dot_product #pragma region dot_product
INTERNAL void FORCEINLINE SN_DECL dot_41_sse( INTERNAL void FORCEINLINE SN_DECL dot_41_sse(MAT_KERNEL(float) const *transpose,
MAT_KERNEL(float) const *transpose, __m128 const *vector, __m128 *ans); __m128 const *vector, __m128 *ans);
INTERNAL void SN_DECL dot_41_avx(MAT_KERNEL(float) const *transpose, __m128 const *vector, INTERNAL void SN_DECL dot_41_avx(MAT_KERNEL(float) const *transpose, __m128 const *vector,
__m128 *ans); __m128 *ans);
INTERNAL void SN_DECL dot_42_sse(MAT_KERNEL(float) const *transpose, __m128 const *vector, INTERNAL void SN_DECL dot_42_sse(MAT_KERNEL(float) const *transpose, __m128 const *vector,
+3 -9
View File
@@ -39,11 +39,6 @@ typedef union uint64_u {
uint32_t u32[2]; uint32_t u32[2];
} uint64_u; } uint64_u;
/* Opaque placeholder used by generic single-kernel dispatch.
* It preserves pointer semantics without pretending every branch shares the
* same concrete MAT_KERNEL(T) type. */
typedef struct sn_mat_kernel_opaque sn_mat_kernel_opaque;
typedef struct mat_kernel mat_kernel; typedef struct mat_kernel mat_kernel;
typedef struct mat_panel mat_panel; typedef struct mat_panel mat_panel;
@@ -76,10 +71,9 @@ static_assert(sizeof(matrix_task) == 128, "matrix_parallel_task_package size mis
static_assert(sizeof(matrix_task) == 128, "matrix_parallel_task_package size mismatch"); static_assert(sizeof(matrix_task) == 128, "matrix_parallel_task_package size mismatch");
#endif #endif
typedef void(SN_DECL *UNI_MK_PROC)(matrix_task const *task); typedef void(SN_DECL *UNI_MK_PROC)(matrix_task *task);
typedef void(SN_DECL *UNI_SK_PROC)(sn_mat_kernel_opaque const *left, typedef void(SN_DECL *UNI_SK_PROC)(mat_kernel const *left, mat_kernel const *right,
sn_mat_kernel_opaque const *right, mat_kernel *restrict ans, uint64_t scalar);
sn_mat_kernel_opaque *restrict ans, uint64_t scalar);
typedef void(SN_DECL *VECTORNORMALIZEPROC)(sn_vec_f32 *source, sn_vec_f32 *target); typedef void(SN_DECL *VECTORNORMALIZEPROC)(sn_vec_f32 *source, sn_vec_f32 *target);
typedef void(SN_DECL *DOTPROC)(void *transpose, __m128 *vector, __m128 *ans); typedef void(SN_DECL *DOTPROC)(void *transpose, __m128 *vector, __m128 *ans);
@@ -138,7 +138,7 @@ extern __declspec(align(64)) sn_zero_kernel_u64 SN_ZERO_KERNEL;
int col_length, int row_length, \ int col_length, int row_length, \
int col_index, int row_index) int col_index, int row_index)
#if 0 /* Declarations for AVX float variant
DECLARE_BUILD_PANEL(avx, float); DECLARE_BUILD_PANEL(avx, float);
DECLARE_BUILD_PANEL(512, float); DECLARE_BUILD_PANEL(512, float);
@@ -149,6 +149,6 @@ DECLARE_STORE_PANEL(512, float);
DECLARE_BUILD_PANEL(512, double); DECLARE_BUILD_PANEL(512, double);
DECLARE_STORE_PANEL(512, double); DECLARE_STORE_PANEL(512, double);
#endif /**/
#endif /* SN_MATKERNEL */ #endif /* SN_MATKERNEL */
+13 -15
View File
@@ -2,30 +2,33 @@
#define SN_INTRINSIC_CallCONV_STD #define SN_INTRINSIC_CallCONV_STD
#include "sn_internal.h" #include "sn_internal.h"
#include "sn_target.h"
#include "sn_intrinsic.h" #include "sn_intrinsic.h"
#ifndef static_assert #ifndef static_assert
#define static_assert _Static_assert #define static_assert _Static_assert
#endif #endif
#define SN_STD_TARGET_ATTR(T_arch, T_feature) SN_STD_TARGET_ATTR_IMPL(T_arch, T_feature)
#define SN_STD_TARGET_ATTR_IMPL(T_arch, T_feature) SN_X86_TARGET_ATTR_##T_arch##T_feature
#define MK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) \ #define MK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) \
T_type##_multi_kernel_proc_##T_op##_##T_arch##_##T_feature T_type##_multi_kernel_proc_##T_op##_##T_arch##_##T_feature
#define GET_MK_PROC_STD(T_type, T_arch, T_feature, T_op) \ #define GET_MK_PROC_STD(T_type, T_arch, T_feature, T_op) \
MK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) ((UNI_MK_PROC)MK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op))
#define SN_MK_PROC_DECL(T_type, P_name) INTERNAL void SN_DECL P_name(MAT_TASK(T_type) const *task) #define SN_MK_PROC_DECL(T_type, P_name) INTERNAL void SN_DECL P_name(MAT_TASK(T_type) const *task)
#define SN_MK_PROC_DECL_STD(T_type, T_arch, T_feature, T_op) \ #define SN_MK_PROC_DECL_STD(T_type, T_arch, T_feature, T_op) \
INTERNAL void SN_DECL MK_PROC_NAME_STD(T_type, T_arch, T_feature, \ INTERNAL NOINLINE SN_STD_TARGET_ATTR(T_arch, T_feature) void SN_DECL \
T_op)(MAT_TASK(T_type) const *task) MK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op)(MAT_TASK(T_type) const *task)
#define SK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) \ #define SK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) \
T_type##_single_kernel_proc_##T_op##_##T_arch##_##T_feature T_type##_single_kernel_proc_##T_op##_##T_arch##_##T_feature
#define GET_SK_PROC_STD(T_type, T_arch, T_feature, T_op) \ #define GET_SK_PROC_STD(T_type, T_arch, T_feature, T_op) \
SK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op) ((UNI_SK_PROC)SK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op))
#define SN_SK_PROC_DECL_STD(T_type, T_arch, T_feature, T_op) \ #define SN_SK_PROC_DECL_STD(T_type, T_arch, T_feature, T_op) \
INTERNAL void SN_DECL SK_PROC_NAME_STD(T_type, T_arch, T_feature, \ INTERNAL NOINLINE SN_STD_TARGET_ATTR(T_arch, T_feature) void SN_DECL \
T_op)(sn_mat_kernel_opaque const *left_ptr, \ SK_PROC_NAME_STD(T_type, T_arch, T_feature, T_op)( \
sn_mat_kernel_opaque const *right_ptr, \ MAT_KERNEL(T_type) const *left, MAT_KERNEL(T_type) const *right, \
sn_mat_kernel_opaque *restrict ans_ptr, \ MAT_KERNEL(T_type) *restrict ans, uint64_t scalar)
uint64_t scalar)
#define _SN_STD__PROBE_0 0 #define _SN_STD__PROBE_0 0
#define _SN_STD__PROBE_1 1 #define _SN_STD__PROBE_1 1
@@ -105,10 +108,5 @@
#define __sk_param_std(T) \ #define __sk_param_std(T) \
typedef MAT_KERNEL(T) SN_MAT_KERNEL_LOCAL; \ typedef MAT_KERNEL(T) SN_MAT_KERNEL_LOCAL; \
SN_MAT_KERNEL_LOCAL const *left = \ (void)scalar
(SN_MAT_KERNEL_LOCAL const *)(left_ptr); \
SN_MAT_KERNEL_LOCAL const *right = \
(SN_MAT_KERNEL_LOCAL const *)(right_ptr); \
SN_MAT_KERNEL_LOCAL *restrict ans = \
(SN_MAT_KERNEL_LOCAL *)(ans_ptr)
#endif // !SN_INTRINSIC_PARAM_EXPAND #endif // !SN_INTRINSIC_PARAM_EXPAND
+10
View File
@@ -76,6 +76,16 @@
#define SN_IS_ARCH(arch) ((SN_ARCH_TARGET) == (arch)) #define SN_IS_ARCH(arch) ((SN_ARCH_TARGET) == (arch))
/*
* Per-function ISA selection is required for runtime-dispatched kernels that
* mix multiple x86 feature levels in one build target.
*/
#if defined(__clang__) && ((SN_ARCH_TARGET) == SN_ARCH_X86_64)
#define SN_CLANG_TARGET_ATTR(options) __attribute__((target(options)))
#else
#define SN_CLANG_TARGET_ATTR(options)
#endif
typedef union SIMDID { typedef union SIMDID {
uint64_t mask; uint64_t mask;
char make_byte[8]; char make_byte[8];
+2 -2
View File
@@ -68,7 +68,7 @@ SN_MK_PROC_DECL_STD(double, avx, , fill)
SN_MK_PROC_DECL_STD(double, 512, , fill) SN_MK_PROC_DECL_STD(double, 512, , fill)
{ {
__mk_param_std(BUFFER, ANS_SCALAR, double); __mk_param_std(BUFFER, ANS_SCALAR, double);
register __m512d vec = _mm512_set1_pd(SN_CONST_PTR_CAST(double, scalar->data)[0]); register __m512d vec = _mm512_set1_pd(((double const *)scalar->data)[0]);
for (size_t i = 0; i < count; i++) { for (size_t i = 0; i < count; i++) {
ans[i].f64_z[0] = vec; ans[i].f64_z[0] = vec;
ans[i].f64_z[1] = vec; ans[i].f64_z[1] = vec;
@@ -354,7 +354,7 @@ SN_MK_PROC_DECL_STD(double, 512, , scalar_mul)
{ {
__mk_param_std(BUFFER, RIGHT_ANS_SCALAR, double); __mk_param_std(BUFFER, RIGHT_ANS_SCALAR, double);
register __m512d vec = _mm512_set1_pd(SN_CONST_PTR_CAST(double, scalar->data)[0]); register __m512d vec = _mm512_set1_pd(((double const *)scalar->data)[0]);
for (size_t i = 0; i < count; i++) { for (size_t i = 0; i < count; i++) {
register __m512d c0 = _mm512_mul_pd(right[i].f64_z[0], vec); register __m512d c0 = _mm512_mul_pd(right[i].f64_z[0], vec);
register __m512d c1 = _mm512_mul_pd(right[i].f64_z[1], vec); register __m512d c1 = _mm512_mul_pd(right[i].f64_z[1], vec);
+1
View File
@@ -4,6 +4,7 @@
#include "sn_intrinsic.h" #include "sn_intrinsic.h"
#include "sn_intrinsic.std.h" #include "sn_intrinsic.std.h"
#include "sn_intrinsic.context.x86.h"
#include <math.h> #include <math.h>
static const float quality_threshold = 1e-6f; static const float quality_threshold = 1e-6f;
+37 -22
View File
@@ -136,40 +136,55 @@ SN_MK_PROC_DECL_STD(float, avx, _fma, fma)
_mm256_store_ps((float *)&ans_cur->f32_y[1], c23); _mm256_store_ps((float *)&ans_cur->f32_y[1], c23);
} }
#define SN_MK_FMA_F32_512_PHASE(i)\
do { \
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
c_0 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
c_1 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
c_2 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
c_3 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
}while(0)
SN_MK_PROC_DECL_STD(float, 512, , fma) SN_MK_PROC_DECL_STD(float, 512, , fma)
{ {
__mk_param_std(TILE, LEFT_RIGHT_ANS, float); __mk_param_std(TILE, LEFT_RIGHT_ANS, float);
SN_MAT_KERNEL_LOCAL *restrict ans_cur = ans + GET_INDEX(common_y, x, y); SN_MAT_KERNEL_LOCAL *restrict ans_cur = ans + GET_INDEX(common_y, x, y);
register __m512 c = _mm512_load_ps((float *)ans_cur); register __m512 c_0 = _mm512_load_ps((float *)ans_cur);
register __m512 c_1 = c; register __m512 c_1 = c_0;
register __m512 c_2 = c; register __m512 c_2 = c_0;
register __m512 c_3 = c; register __m512 c_3 = c_0;
for (size_t z = 0; z < common_z; z++) { for (size_t z = 0; z < common_z; z+=4) {
SN_MAT_KERNEL_LOCAL const *right_cur = right + GET_INDEX(common_z, x, z); SN_MAT_KERNEL_LOCAL const *right = right + z;
SN_MAT_KERNEL_LOCAL const *left_cur = left + GET_INDEX(common_y, z, y); SN_MAT_KERNEL_LOCAL const *left_0 = left + z + 0;
SN_MAT_KERNEL_LOCAL const *left_1 = left + z + 1;
SN_MAT_KERNEL_LOCAL const *left_2 = left + z + 2;
SN_MAT_KERNEL_LOCAL const *left_3 = left + z + 3;
// full right load:[kb_col0 | kb_col1 | kb_col2 | kb_col3] // full right load:[kb_col0 | kb_col1 | kb_col2 | kb_col3]
register __m512 b = _mm512_load_ps((float *)right_cur); register __m512 b_0 = _mm512_load_ps((float *)(right+0));
register __m512 b_1 = _mm512_load_ps((float *)(right+1));
register __m512 b_2 = _mm512_load_ps((float *)(right+2));
register __m512 b_3 = _mm512_load_ps((float *)(right+3));
// k=0: broadcast ka_col0 到4个lane,permute_ps 取 kb(0,j) // k=0: broadcast ka_col0 到4个lane,permute_ps 取 kb(0,j)
register __m512 ak; register __m512 ak;
ak = _mm512_broadcast_f32x4(left_cur->f32_x[0]); register __m512 ak_1;
c = _mm512_fmadd_ps(ak, _mm512_permute_ps(b, _FMA_SELECT(0)), c); register __m512 ak_2;
register __m512 ak_3;
// k=1 SN_MK_FMA_F32_512_PHASE(0);
ak = _mm512_broadcast_f32x4(left_cur->f32_x[1]); SN_MK_FMA_F32_512_PHASE(1);
c = _mm512_fmadd_ps(ak, _mm512_permute_ps(b, _FMA_SELECT(1)), c); SN_MK_FMA_F32_512_PHASE(2);
SN_MK_FMA_F32_512_PHASE(3);
// k=2
ak = _mm512_broadcast_f32x4(left_cur->f32_x[2]);
c = _mm512_fmadd_ps(ak, _mm512_permute_ps(b, _FMA_SELECT(2)), c);
// k=3
ak = _mm512_broadcast_f32x4(left_cur->f32_x[3]);
c = _mm512_fmadd_ps(ak, _mm512_permute_ps(b, _FMA_SELECT(3)), c);
} }
_mm512_store_ps((float *)ans_cur, c); c_0 = _mm512_add_ps(c_0, c_1);
c_2= _mm512_add_ps(c_2, c_3);
c_0 = _mm512_add_ps(c_0, c_2);
_mm512_store_ps((float *)ans_cur, c_0);
} }
// double // double
+2 -3
View File
@@ -2,7 +2,6 @@
#if SN_IS_ARCH(SN_ARCH_X86_64) #if SN_IS_ARCH(SN_ARCH_X86_64)
#include "sn_intrinsic.h"
#include "StgSharpNative.h" #include "StgSharpNative.h"
INTERNAL int SN_DECL city_hash_simplify_sse(byte const *str, int const length) INTERNAL int SN_DECL city_hash_simplify_sse(byte const *str, int const length)
@@ -17,7 +16,7 @@ INTERNAL int SN_DECL city_hash_simplify_sse(byte const *str, int const length)
} }
} else if (size < 16) { } else if (size < 16) {
for (; ptr < end; ptr += 4) { for (; ptr < end; ptr += 4) {
hash = _mm_crc32_u32(hash, SN_CONST_PTR_CAST(uint32_t, ptr)[0]); hash = _mm_crc32_u32(hash, ((uint32_t const *)ptr)[0]);
} }
for (; ptr < end; ptr++) { for (; ptr < end; ptr++) {
hash = _mm_crc32_u16(hash, *ptr); hash = _mm_crc32_u16(hash, *ptr);
@@ -34,7 +33,7 @@ INTERNAL int SN_DECL city_hash_simplify_sse(byte const *str, int const length)
hash = _mm_crc32_u8(hash, hash64); hash = _mm_crc32_u8(hash, hash64);
hash = _mm_crc32_u8(hash, hash64 >> 32); hash = _mm_crc32_u8(hash, hash64 >> 32);
for (; ptr < last_32; ptr += 4) { for (; ptr < last_32; ptr += 4) {
hash = _mm_crc32_u32(hash, SN_CONST_PTR_CAST(uint32_t, ptr)[0]); hash = _mm_crc32_u32(hash, ((uint32_t const *)ptr)[0]);
} }
for (; ptr < end; ptr += 2) { for (; ptr < end; ptr += 2) {
hash = _mm_crc32_u8(hash, *ptr); hash = _mm_crc32_u8(hash, *ptr);