// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #ifdef _WIN32 #if defined(__AVX2__) #include // avx2 #elif defined(__AVX__) #include // avx #endif // AVX #else // WIN32 #ifdef __AVX__ #include #endif #endif // WIN32 #if defined(_WIN32) #define ALIGN32_BEG __declspec(align(32)) #define ALIGN32_END #else #define ALIGN32_BEG #define ALIGN32_END __attribute__((aligned(32))) #endif // _WIN32 #ifndef PADDLE_WITH_XBYAK #ifdef _WIN32 #define cpuid(reg, x) __cpuidex(reg, x, 0) #else #if !defined(WITH_NV_JETSON) && !defined(PADDLE_WITH_ARM) && \ !defined(PADDLE_WITH_SW) && !defined(PADDLE_WITH_MIPS) && \ !defined(PADDLE_WITH_LOONGARCH) #include inline void cpuid(int reg[4], int x) { __cpuid_count(x, 0, reg[0], reg[1], reg[2], reg[3]); } #endif #endif #endif namespace phi { namespace backends { namespace cpu { size_t CpuTotalPhysicalMemory(); //! Get the maximum allocation size for a machine. size_t CpuMaxAllocSize(); //! Get the maximum allocation size for a machine. size_t CUDAPinnedMaxAllocSize(); //! Get the minimum chunk size for buddy allocator. size_t CpuMinChunkSize(); //! Get the maximum chunk size for buddy allocator. size_t CpuMaxChunkSize(); //! Get the minimum chunk size for buddy allocator. size_t CUDAPinnedMinChunkSize(); //! Get the maximum chunk size for buddy allocator. size_t CUDAPinnedMaxChunkSize(); //! Get the maximum allocation size for a machine. size_t NPUPinnedMaxAllocSize(); //! Get the minimum chunk size for buddy allocator. size_t NPUPinnedMinChunkSize(); //! Get the maximum chunk size for buddy allocator. size_t NPUPinnedMaxChunkSize(); typedef enum { isa_any, sse42, avx, avx2, avx512f, avx512_core, avx512_core_vnni, avx512_mic, avx512_mic_4ops, avx512_bf16, } cpu_isa_t; // Instruction set architecture // May I use some instruction bool MayIUse(const cpu_isa_t cpu_isa); } // namespace cpu } // namespace backends } // namespace phi