packages feed

accelerate-llvm-ptx-1.4.0.0: src/Data/Array/Accelerate/LLVM/PTX/Compile/Cache.hs

{-# OPTIONS_GHC -Wno-orphans #-}
-- |
-- Module      : Data.Array.Accelerate.LLVM.PTX.Compile.Cache
-- Copyright   : [2017..2020] The Accelerate Team
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <trevor.mcdonell@gmail.com>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--

module Data.Array.Accelerate.LLVM.PTX.Compile.Cache (

  module Data.Array.Accelerate.LLVM.Compile.Cache

) where

import Data.Array.Accelerate.LLVM.Compile.Cache
import Data.Array.Accelerate.LLVM.PTX.Target
import Data.Array.Accelerate.LLVM.Target.ClangInfo                  ( hostLLVMVersion )

import Control.Monad.Reader
import Data.Foldable                                                ( toList )
import Data.List                                                    ( intercalate )
import Data.Version
import Foreign.CUDA.Analysis
import System.FilePath
import Text.Printf
import qualified Data.ByteString.Short.Char8                        as S8

import Paths_accelerate_llvm_ptx


instance Persistent PTX where
  targetCacheTemplate = do
    Compute m n <- asks (computeCapability . ptxDeviceProperties)
    return $ "accelerate-llvm-ptx-" ++ showVersion version
         </> "llvmpr-" ++ intercalate "." (map show (toList hostLLVMVersion))
         </> S8.unpack ptxTargetTriple
         </> printf "sm%d%d" m n
         </> "morp.sass"