1#ifndef FREE_TENSOR_TARGET_H
2#define FREE_TENSOR_TARGET_H
8#include <cuda_runtime.h>
44 std::string
toString()
const override {
return "CPU"; }
51class GPUTarget :
public Target {
52 Ref<cudaDeviceProp> infoArch_;
58 GPUTarget(
const Ref<cudaDeviceProp> &infoArch) : infoArch_(infoArch) {}
60 bool useNativeArch()
const override {
return true; }
61 TargetType type()
const override {
return TargetType::GPU; }
62 std::string
toString()
const override {
return "GPU"; }
63 MemType mainMemType()
const override {
return MemType::GPUGlobal; }
65 void setInfoArch(
const Ref<cudaDeviceProp> &infoArch) {
68 const Ref<cudaDeviceProp> &infoArch()
const {
return infoArch_; }
70 std::pair<int, int> computeCapability()
const {
71 return std::make_pair(infoArch_->major, infoArch_->minor);
74 int totalGlobalMem()
const {
return infoArch_->totalGlobalMem; }
76 int warpSize()
const {
return infoArch_->warpSize; }
78 int multiProcessorCount()
const {
return infoArch_->multiProcessorCount; }
80 size_t sharedMemPerBlock()
const {
return infoArch_->sharedMemPerBlock; }
82 int regsPerBlock()
const {
return infoArch_->regsPerBlock; }
84 int maxThreadsPerMultiProcessor()
const {
85 return infoArch_->maxThreadsPerMultiProcessor;
88 auto maxLocalMemorySizePerThread()
const {
92 return std::min<int64_t>(512 * 1024,
93 (int64_t)totalGlobalMem() /
94 ((int64_t)multiProcessorCount() *
95 maxThreadsPerMultiProcessor()));
103 return os << target->toString();
int nCores() const
Definition: target.cc:8
CPUTarget(bool useNativeArch=true)
Definition: target.h:37
void setUseNativeArch(bool useNativeArch=true)
Definition: target.h:39
MemType mainMemType() const override
Definition: target.h:45
TargetType type() const override
Definition: target.h:43
bool useNativeArch() const override
Definition: target.h:42
std::string toString() const override
Definition: target.h:44
virtual MemType mainMemType() const =0
virtual std::string toString() const =0
virtual ~Target()=default
virtual bool useNativeArch() const =0
Target()
Definition: target.h:23
virtual TargetType type() const =0
Definition: allocator.h:9
TargetType
Definition: target_type.h:6
auto && lhs
Definition: const_fold.cc:70
std::string toString(const AST &op)
Definition: print_ast.cc:784
bool isSameTarget(const Ref< Target > &lhs, const Ref< Target > &rhs)
Definition: target.cc:16
auto auto && rhs
Definition: const_fold.cc:70
std::ostream & operator<<(std::ostream &os, const Dependence &dep)
Definition: deps.cc:1404
MemType
Definition: mem_type.h:14