diff --git a/Makefile b/Makefile index 0de21b8..152d1f1 100644 --- a/Makefile +++ b/Makefile @@ -6,14 +6,22 @@ SANITY_FLAGS=-Wfloat-equal -Wshadow -Wpointer-arith PREFIX ?= /usr SRC_COMMON=src/common/ +SRC_CUDA=src/cuda/ -COMMON_SRC = $(SRC_COMMON)main.cpp $(SRC_COMMON)args.cpp $(SRC_COMMON)global.cpp -COMMON_HDR = $(SRC_COMMON)args.hpp $(SRC_COMMON)global.hpp +COMMON_SRC = $(SRC_COMMON)main.cpp $(SRC_COMMON)gpu.cpp $(SRC_COMMON)args.cpp $(SRC_COMMON)global.cpp +COMMON_HDR = $(SRC_COMMON)gpu.hpp $(SRC_COMMON)args.hpp $(SRC_COMMON)global.hpp + +CUDA_SRC = $(SRC_CUDA)cuda.cpp $(SRC_CUDA)uarch.cpp +CUDA_HDR = $(SRC_CUDA)cuda.hpp $(SRC_CUDA)uarch.hpp +CUDA_PATH = /usr/local/cuda/ + +SOURCE += $(COMMON_SRC) $(CUDA_SRC) +HEADERS += $(COMMON_HDR) $(CUDA_HRC) -SOURCE += $(COMMON_SRC) -HEADERS += $(COMMON_HDR) OUTPUT=gpufetch +CXXFLAGS+= -I $(CUDA_PATH)/samples/common/inc -I $(CUDA_PATH)/targets/x86_64-linux/include -L $(CUDA_PATH)/targets/x86_64-linux/lib -lcudart + all: CXXFLAGS += -O3 all: $(OUTPUT) diff --git a/src/common/global.hpp b/src/common/global.hpp index f0e9118..c6c328a 100644 --- a/src/common/global.hpp +++ b/src/common/global.hpp @@ -3,6 +3,7 @@ #include #include +#include #define STRING_UNKNOWN "Unknown" diff --git a/src/common/gpu.cpp b/src/common/gpu.cpp new file mode 100644 index 0000000..283f48a --- /dev/null +++ b/src/common/gpu.cpp @@ -0,0 +1,6 @@ +#include "gpu.hpp" + +char* get_str_gpu_name(struct gpu_info* gpu) { + return gpu->name; +} + diff --git a/src/common/gpu.hpp b/src/common/gpu.hpp new file mode 100644 index 0000000..edd547b --- /dev/null +++ b/src/common/gpu.hpp @@ -0,0 +1,22 @@ +#ifndef __GPU__ +#define __GPU__ + +#include +#include + +enum { + GPU_VENDOR_NVIDIA +}; + +typedef int32_t VENDOR; + +struct gpu_info { + VENDOR vendor; + struct uarch* arch; + char* name; +}; + + +char* get_str_gpu_name(struct gpu_info* gpu); + +#endif diff --git a/src/common/main.cpp b/src/common/main.cpp index 87a1dec..a82b862 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -4,6 +4,7 @@ #include "args.hpp" #include "global.hpp" +#include "../cuda/cuda.hpp" static const char* VERSION = "0.01"; @@ -47,5 +48,11 @@ int main(int argc, char* argv[]) { return EXIT_SUCCESS; } + struct gpu_info* gpu = get_gpu_info(); + if(gpu == NULL) + return EXIT_FAILURE; + + printf("Name: %s\n", gpu->name); + return EXIT_FAILURE; } diff --git a/src/cuda/cuda.cpp b/src/cuda/cuda.cpp new file mode 100644 index 0000000..b6038c9 --- /dev/null +++ b/src/cuda/cuda.cpp @@ -0,0 +1,19 @@ +#include +#include + +#include "cuda.hpp" +#include "../common/global.hpp" + +struct gpu_info* get_gpu_info() { + struct gpu_info* gpu = (struct gpu_info*) emalloc(sizeof(struct gpu_info)); + + int dev = 0; + cudaSetDevice(dev); + cudaDeviceProp deviceProp; + cudaGetDeviceProperties(&deviceProp, dev); + + gpu->name = (char *) emalloc(sizeof(char) * (strlen(deviceProp.name) + 1)); + strcpy(gpu->name, deviceProp.name); + + return gpu; +} diff --git a/src/cuda/cuda.hpp b/src/cuda/cuda.hpp new file mode 100644 index 0000000..ac4b32b --- /dev/null +++ b/src/cuda/cuda.hpp @@ -0,0 +1,8 @@ +#ifndef __CUDA__ +#define __CUDA__ + +#include "../common/gpu.hpp" + +struct gpu_info* get_gpu_info(); + +#endif diff --git a/src/cuda/uarch.cpp b/src/cuda/uarch.cpp new file mode 100644 index 0000000..2a16385 --- /dev/null +++ b/src/cuda/uarch.cpp @@ -0,0 +1,37 @@ +#include +#include + +typedef uint32_t MICROARCH; + +// Data not available +#define NA -1 + +// Unknown manufacturing process +#define UNK -1 + +enum { + UARCH_UNKNOWN, + UARCH_TESLA +}; + +struct uarch { + MICROARCH uarch; + char* uarch_str; + int32_t process; +}; + +struct uarch* get_uarch_from_cuda(struct gpu_info* gpu) { + return NULL; +} + +char* get_str_uarch(struct gpu_info* gpu) { + return NULL; +} + +char* get_str_process(struct gpu_info* gpu) { + return NULL; +} + +void free_uarch_struct(struct uarch* arch) { + +} diff --git a/src/cuda/uarch.hpp b/src/cuda/uarch.hpp new file mode 100644 index 0000000..19dfcd7 --- /dev/null +++ b/src/cuda/uarch.hpp @@ -0,0 +1,11 @@ +#ifndef __UARCH__ +#define __UARCH__ + +struct uarch; + +struct uarch* get_uarch_from_cuda(struct gpu_info* gpu); +char* get_str_uarch(struct gpu_info* gpu); +char* get_str_process(struct gpu_info* gpu); +void free_uarch_struct(struct uarch* arch); + +#endif