Skip to content
Snippets Groups Projects
Commit 4aeb31bf authored by Sergey Egorov's avatar Sergey Egorov
Browse files

Sequential buffer reads and writes.

parent d0d5f758
No related branches found
No related tags found
No related merge requests found
cmake_minimum_required(VERSION 3.20)
project(Pmem_tests C)
set(CMAKE_C_STANDARD 99)
add_executable(Pmem_tests main.c)
Makefile 0 → 100644
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.21
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/local/Cellar/cmake/3.21.3_1/bin/cmake
# The command to remove a file.
RM = /usr/local/Cellar/cmake/3.21.3_1/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /Users/sergeyegorov/Desktop/university/Pmem_tests
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /Users/sergeyegorov/Desktop/university/Pmem_tests
#=============================================================================
# Targets provided globally by CMake.
# Special rule for the target rebuild_cache
rebuild_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
/usr/local/Cellar/cmake/3.21.3_1/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : rebuild_cache
# Special rule for the target rebuild_cache
rebuild_cache/fast: rebuild_cache
.PHONY : rebuild_cache/fast
# Special rule for the target edit_cache
edit_cache:
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
/usr/local/Cellar/cmake/3.21.3_1/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
.PHONY : edit_cache
# Special rule for the target edit_cache
edit_cache/fast: edit_cache
.PHONY : edit_cache/fast
# The main all target
all: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /Users/sergeyegorov/Desktop/university/Pmem_tests/CMakeFiles /Users/sergeyegorov/Desktop/university/Pmem_tests//CMakeFiles/progress.marks
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
$(CMAKE_COMMAND) -E cmake_progress_start /Users/sergeyegorov/Desktop/university/Pmem_tests/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
.PHONY : clean
# The main clean target
clean/fast: clean
.PHONY : clean/fast
# Prepare targets for installation.
preinstall: all
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
.PHONY : preinstall/fast
# clear depends
depend:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
#=============================================================================
# Target rules for targets named Pmem_tests
# Build rule for target.
Pmem_tests: cmake_check_build_system
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 Pmem_tests
.PHONY : Pmem_tests
# fast build rule for target.
Pmem_tests/fast:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Pmem_tests.dir/build.make CMakeFiles/Pmem_tests.dir/build
.PHONY : Pmem_tests/fast
main.o: main.c.o
.PHONY : main.o
# target to build an object file
main.c.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Pmem_tests.dir/build.make CMakeFiles/Pmem_tests.dir/main.c.o
.PHONY : main.c.o
main.i: main.c.i
.PHONY : main.i
# target to preprocess a source file
main.c.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Pmem_tests.dir/build.make CMakeFiles/Pmem_tests.dir/main.c.i
.PHONY : main.c.i
main.s: main.c.s
.PHONY : main.s
# target to generate assembly for a file
main.c.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/Pmem_tests.dir/build.make CMakeFiles/Pmem_tests.dir/main.c.s
.PHONY : main.c.s
# Help Target
help:
@echo "The following are some of the valid targets for this Makefile:"
@echo "... all (the default if no target is provided)"
@echo "... clean"
@echo "... depend"
@echo "... edit_cache"
@echo "... rebuild_cache"
@echo "... Pmem_tests"
@echo "... main.o"
@echo "... main.i"
@echo "... main.s"
.PHONY : help
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system
main.c 0 → 100644
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
static const long buffer_size = 100000000;
struct array{
char *buffer;
};
//Sequential read
void iterate_read(const char *buffer){
for(int i = 0; i < buffer_size; i++ ){
buffer[i];
}
}
//Sequential read
void iterate_read_rand(const char *buffer){
for(int i = 0; i < buffer_size; i++ ){
buffer[rand() % buffer_size];
}
}
//Sequential write VS Random
void iterate_write(char *buffer){
for(int i = 0; i < buffer_size; i++ ){
buffer[i] = 'a';
}
}
//Random writes
void iterate_write_rand(char *buffer){
for(int i = 0; i < buffer_size; i++ ){
buffer[rand() % buffer_size] = 'a';
}
}
void execute(struct array *ap, void *r(), void *w()){
clock_t begin = clock();
srand(time(NULL));
w(ap->buffer);
clock_t write_finished = clock();
r(ap->buffer);
clock_t read_finished = clock();
double time_spent_writing = (double)(write_finished - begin) / CLOCKS_PER_SEC;
double time_spent_reading = (double)(read_finished - write_finished) / CLOCKS_PER_SEC;
printf("Writing: %f, Reading: %f \n", time_spent_writing, time_spent_reading);
}
int main() {
/**
* Case 1: DRAM only.
*/
//Initialise array on the heap:
struct array *ap = malloc(sizeof (struct array));
ap->buffer = malloc(sizeof (char)*buffer_size);
printf("Sequential time: ");
execute(ap, iterate_write, iterate_read);
printf("Random time: ");
execute(ap, iterate_write_rand, iterate_read_rand);
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment