This commit is contained in:
Mark Gottscho 2015-04-28 00:26:07 -07:00
Родитель 30bf567150
Коммит a294cafa9c
14 изменённых файлов: 67 добавлений и 29 удалений

Просмотреть файл

@ -38,7 +38,7 @@ PROJECT_NAME = X-Mem
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 2.2.0
PROJECT_NUMBER = 2.2.1
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

Просмотреть файл

@ -1,7 +1,7 @@
README
------------------------------------------------------------------------------------------------------------
X-Mem: Extensible Memory Benchmarking Tool v2.2.0
X-Mem: Extensible Memory Benchmarking Tool v2.2.1
------------------------------------------------------------------------------------------------------------
The flexible open-source research tool for characterizing memory hierarchy throughput, latency, and power.
@ -10,7 +10,7 @@ Originally authored by Mark Gottscho (Email: <mgottscho@ucla.edu>) as a Summer 2
This project is under active development. Stay tuned for more updates.
PROJECT REVISION DATE: April 24, 2015.
PROJECT REVISION DATE: April 27, 2015.
------------------------------------------------------------------------------------------------------------
LICENSE
@ -54,9 +54,11 @@ Extensibility: Modularity via C++ object-oriented principles
- Supports rapid addition of new benchmark kernel routines
- Example: stream triad algorithm, impact of false sharing, etc. are possible with minor changes
Cross-platform: Currently implemented for Windows and GNU/Linux on x86, x86-64, and x86-64 with AVX extensions CPUs
Cross-platform: Currently implemented for two OSes and architecture families
- Windows: Intel x86 (32-bit), x86-64, and x86-64 with AVX extensions
- GNU/Linux: Intel x86 (32-bit), x86-64, and x86-64 with AVX extensions, ARM (32-bit), ARM (32-bit) with NEON, ARMv8 (64-bit)
- Designed to allow straightforward porting to other operating systems and ISAs
- ARM port under development (currently implemented for GNU/Linux for 32-bit and 64-bit ARM)
- ARM on Windows currently not possible due to some incompatibilites and/or lack of support. This may be resolved in the future.
Memory throughput:
- Accurate measurement of sustained memory throughput to all levels of cache and memory
@ -91,14 +93,14 @@ There are a few runtime prerequisites in order for the software to run correctly
HARDWARE:
- Intel x86, x86-64, or x86-64 with AVX CPU. AMD CPUs should also work although this has not been tested.
- ARM Cortex-A series processors with VFP and NEON extensions. Specifically tested on ARM Cortex A9 (32-bit) which is ARMv7. 64-bit builds for ARMv8-A should also work but have not been tested.
- Intel x86, x86-64, or x86-64 with AVX CPU. AMD CPUs should also work although this has not been tested!
- ARM Cortex-A series processors with VFP and NEON extensions. Specifically tested on ARM Cortex A9 (32-bit) which is ARMv7. 64-bit builds for ARMv8-A should also work but have not been tested. GNU/Linux builds only. You can attempt Windows, but I have issues linking the 32-bit version and compiling the NEON version. Also, as far as I can see there is no Windows support for ARMv8 at all.
WINDOWS:
- Microsoft Windows 8.0 64-bit or later, Server 2012 or later.
- Microsoft Visual C++ 2013 Redistributables (64-bit)
- COMING SOON: Windows 32-bit
- Microsoft Visual C++ 2013 Redistributables (32-bit) -- for x86 (32-bit) builds
- Microsoft Visual C++ 2013 Redistributables (64-bit) -- for x86-64 and x86-64 with AVX builds
- You MAY need Administrator privileges, in order to:
- Use large pages, if the --large_pages option is selected (see USAGE, below)
- The first time you use --large_pages on a given Windows machine, you may need to ensure that your Windows user account has the necessary rights to allow lockable memory pages. To do this on Windows 8, run gpedit.msc --> Local Computer Policy --> Computer Configuration --> Windows Settings --> Security Settings --> Local Policies --> User Rights Assignment --> Add your username to "Lock pages in memory". Then log out and then log back in.
@ -107,7 +109,7 @@ WINDOWS:
GNU/LINUX:
- GNU utilities with support for C++11. Tested with gcc 4.8.2 on Ubuntu 14.04 LTS for x86-64 CPU with AVX.
- GNU utilities with support for C++11. Tested with gcc 4.8.2 on Ubuntu 14.04 LTS for x86 (32-bit), x86-64, and x86-64 with AVX on Intel Sandy Bridge, Ivy Bridge, and Haswell families.
- libhugetlbfs. You can obtain it at <http://libhugetlbfs.sourceforge.net>. On Ubuntu systems, you can install using "sudo apt-get install libhugetlbfs0".
- Potentially, administrator privileges, if you plan to use the --large_pages option.
- During runtime, if the --large_pages option is selected, you may need to first manually ensure that large pages are available from the OS. This can be done by running "hugeadm --pool-list". It is recommended to set minimum pool to 1GB (in order to measure DRAM effectively). If needed, this can be done by running "hugeadm --pool-pages-min 2MB:512". Alternatively, run the linux_setup_runtime_hugetlbfs.sh script that is provided with X-Mem.
@ -116,7 +118,7 @@ GNU/LINUX:
INSTALLATION
------------------------------------------------------------------------------------------------------------
The only file that is needed to run on Windows is xmem-win.exe, and xmem-linux on GNU/Linux. It has no other dependencies aside from the system prerequisites listed above.
The only file that is needed to run on Windows is the respective executable xmem-win-<ARCH>.exe on Windows, and xmem-linux-<ARCH> on GNU/Linux. It has no other dependencies aside from the pre-installed system prerequisites listed above.
------------------------------------------------------------------------------------------------------------
USAGE
@ -311,7 +313,9 @@ WINDOWS:
GNU/LINUX:
- gcc with support for the C++11 standard. Tested with gcc version 4.8.2 on Ubuntu 14.04 LTS for x86-64 with AVX.
- bash shell. Other shells could work but are untested.
- gcc with support for the C++11 standard. Tested with gcc version 4.8.2 on Ubuntu 14.04 LTS for x86 (32-bit), x86-64, x86-64 with AVX builds.
- gcc cross-compiler for ARM targets (assumed build on x86-64 Ubuntu host).
- Python 2.7. You can obtain it at <http://www.python.org>. On Ubuntu systems, you can install using "sudo apt-get install python2.7". You may need some other Python 2.7 packages as well.
- SCons build system. You can obtain it at <http://www.scons.org>. On Ubuntu systems, you can install using "sudo apt-get install scons". Build tested with SCons 2.3.4.
- Kernel support for large (huge) pages. This support can be verified on your Linux installation by running "grep hugetlbfs /proc/filesystems". If you do not have huge page support in your kernel, you can build a kernel with the appropriate options switched on: "CONFIG_HUGETLB_PAGE" and "CONFIG_HUGETLBFS".

Двоичные данные
X-Mem_Developer_Manual.pdf

Двоичный файл не отображается.

Двоичные данные
bin/xmem-linux-arm

Двоичный файл не отображается.

Двоичные данные
bin/xmem-linux-arm64

Двоичный файл не отображается.

Двоичные данные
bin/xmem-linux-arm_neon

Двоичный файл не отображается.

Двоичные данные
bin/xmem-linux-x64

Двоичный файл не отображается.

Двоичные данные
bin/xmem-linux-x64_avx

Двоичный файл не отображается.

Двоичные данные
bin/xmem-linux-x86

Двоичный файл не отображается.

11
build-linux-all.sh Executable file
Просмотреть файл

@ -0,0 +1,11 @@
#!/bin/bash
#
# Author: Mark Gottscho
# mgottscho@ucla.edu
./build-linux.sh x64 &
./build-linux.sh x64_avx &
./build-linux.sh x86 &
./build-linux.sh arm &
./build-linux.sh arm_neon &
./build-linux.sh arm64 &

7
build-win-all.bat Normal file
Просмотреть файл

@ -0,0 +1,7 @@
@echo off
:: Author: Mark Gottscho <mgottscho@ucla.edu>
build-win.bat x64 &
build-win.bat x64_avx &
build-win.bat x86 &

Просмотреть файл

@ -1,7 +1,7 @@
README
------------------------------------------------------------------------------------------------------------
X-Mem: Extensible Memory Benchmarking Tool v2.2.0
X-Mem: Extensible Memory Benchmarking Tool v2.2.1
------------------------------------------------------------------------------------------------------------
The flexible open-source research tool for characterizing memory hierarchy throughput, latency, and power.
@ -10,7 +10,7 @@ Originally authored by Mark Gottscho (Email: <mgottscho@ucla.edu>) as a Summer 2
This project is under active development. Stay tuned for more updates.
PROJECT REVISION DATE: April 24, 2015.
PROJECT REVISION DATE: April 27, 2015.
------------------------------------------------------------------------------------------------------------
LICENSE
@ -54,9 +54,11 @@ Extensibility: Modularity via C++ object-oriented principles
- Supports rapid addition of new benchmark kernel routines
- Example: stream triad algorithm, impact of false sharing, etc. are possible with minor changes
Cross-platform: Currently implemented for Windows and GNU/Linux on x86, x86-64, and x86-64 with AVX extensions CPUs
Cross-platform: Currently implemented for two OSes and architecture families
- Windows: Intel x86 (32-bit), x86-64, and x86-64 with AVX extensions
- GNU/Linux: Intel x86 (32-bit), x86-64, and x86-64 with AVX extensions, ARM (32-bit), ARM (32-bit) with NEON, ARMv8 (64-bit)
- Designed to allow straightforward porting to other operating systems and ISAs
- ARM port under development (currently implemented for GNU/Linux for 32-bit and 64-bit ARM)
- ARM on Windows currently not possible due to some incompatibilites and/or lack of support. This may be resolved in the future.
Memory throughput:
- Accurate measurement of sustained memory throughput to all levels of cache and memory
@ -91,14 +93,14 @@ There are a few runtime prerequisites in order for the software to run correctly
HARDWARE:
- Intel x86, x86-64, or x86-64 with AVX CPU. AMD CPUs should also work although this has not been tested.
- ARM Cortex-A series processors with VFP and NEON extensions. Specifically tested on ARM Cortex A9 (32-bit) which is ARMv7. 64-bit builds for ARMv8-A should also work but have not been tested.
- Intel x86, x86-64, or x86-64 with AVX CPU. AMD CPUs should also work although this has not been tested!
- ARM Cortex-A series processors with VFP and NEON extensions. Specifically tested on ARM Cortex A9 (32-bit) which is ARMv7. 64-bit builds for ARMv8-A should also work but have not been tested. GNU/Linux builds only. You can attempt Windows, but I have issues linking the 32-bit version and compiling the NEON version. Also, as far as I can see there is no Windows support for ARMv8 at all.
WINDOWS:
- Microsoft Windows 8.0 64-bit or later, Server 2012 or later.
- Microsoft Visual C++ 2013 Redistributables (64-bit)
- COMING SOON: Windows 32-bit
- Microsoft Visual C++ 2013 Redistributables (32-bit) -- for x86 (32-bit) builds
- Microsoft Visual C++ 2013 Redistributables (64-bit) -- for x86-64 and x86-64 with AVX builds
- You MAY need Administrator privileges, in order to:
- Use large pages, if the --large_pages option is selected (see USAGE, below)
- The first time you use --large_pages on a given Windows machine, you may need to ensure that your Windows user account has the necessary rights to allow lockable memory pages. To do this on Windows 8, run gpedit.msc --> Local Computer Policy --> Computer Configuration --> Windows Settings --> Security Settings --> Local Policies --> User Rights Assignment --> Add your username to "Lock pages in memory". Then log out and then log back in.
@ -107,7 +109,7 @@ WINDOWS:
GNU/LINUX:
- GNU utilities with support for C++11. Tested with gcc 4.8.2 on Ubuntu 14.04 LTS for x86-64 CPU with AVX.
- GNU utilities with support for C++11. Tested with gcc 4.8.2 on Ubuntu 14.04 LTS for x86 (32-bit), x86-64, and x86-64 with AVX on Intel Sandy Bridge, Ivy Bridge, and Haswell families.
- libhugetlbfs. You can obtain it at <http://libhugetlbfs.sourceforge.net>. On Ubuntu systems, you can install using "sudo apt-get install libhugetlbfs0".
- Potentially, administrator privileges, if you plan to use the --large_pages option.
- During runtime, if the --large_pages option is selected, you may need to first manually ensure that large pages are available from the OS. This can be done by running "hugeadm --pool-list". It is recommended to set minimum pool to 1GB (in order to measure DRAM effectively). If needed, this can be done by running "hugeadm --pool-pages-min 2MB:512". Alternatively, run the linux_setup_runtime_hugetlbfs.sh script that is provided with X-Mem.
@ -116,7 +118,7 @@ GNU/LINUX:
INSTALLATION
------------------------------------------------------------------------------------------------------------
The only file that is needed to run on Windows is xmem-win.exe, and xmem-linux on GNU/Linux. It has no other dependencies aside from the system prerequisites listed above.
The only file that is needed to run on Windows is the respective executable xmem-win-<ARCH>.exe on Windows, and xmem-linux-<ARCH> on GNU/Linux. It has no other dependencies aside from the pre-installed system prerequisites listed above.
------------------------------------------------------------------------------------------------------------
USAGE
@ -311,7 +313,9 @@ WINDOWS:
GNU/LINUX:
- gcc with support for the C++11 standard. Tested with gcc version 4.8.2 on Ubuntu 14.04 LTS for x86-64 with AVX.
- bash shell. Other shells could work but are untested.
- gcc with support for the C++11 standard. Tested with gcc version 4.8.2 on Ubuntu 14.04 LTS for x86 (32-bit), x86-64, x86-64 with AVX builds.
- gcc cross-compiler for ARM targets (assumed build on x86-64 Ubuntu host).
- Python 2.7. You can obtain it at <http://www.python.org>. On Ubuntu systems, you can install using "sudo apt-get install python2.7". You may need some other Python 2.7 packages as well.
- SCons build system. You can obtain it at <http://www.scons.org>. On Ubuntu systems, you can install using "sudo apt-get install scons". Build tested with SCons 2.3.4.
- Kernel support for large (huge) pages. This support can be verified on your Linux installation by running "grep hugetlbfs /proc/filesystems". If you do not have huge page support in your kernel, you can build a kernel with the appropriate options switched on: "CONFIG_HUGETLB_PAGE" and "CONFIG_HUGETLBFS".

Просмотреть файл

@ -49,7 +49,7 @@
namespace xmem {
#define VERSION "2.2.0"
#define VERSION "2.2.1"
#if !defined(_WIN32) && !defined(__gnu_linux__)
#error Neither Windows/GNULinux build environments were detected!

Просмотреть файл

@ -47,7 +47,7 @@ using namespace xmem;
void xmem::print_welcome_message() {
//Greetings!
std::cout << "--------------------------------------------------------------------------------" << std::endl;
std::cout << "------------------------------------------------------------------------------------------" << std::endl;
std::cout << "Extensible Memory Benchmarking Tool (X-Mem) v" << VERSION << " for";
#ifdef _WIN32
std::cout << " Windows";
@ -56,17 +56,29 @@ void xmem::print_welcome_message() {
std::cout << " GNU/Linux";
#endif
std::cout << " on";
#ifdef ARCH_INTEL
std::cout << " Intel ISAs";
#ifdef ARCH_INTEL_X86_64
std::cout << " Intel x86-64";
#endif
#ifdef ARCH_INTEL_AVX
std::cout << " Intel x86-64 with AVX";
#endif
#ifdef ARCH_INTEL_X86
std::cout << " Intel x86 (32-bit)";
#endif
#ifdef ARCH_ARM
std::cout << " ARM ISAs";
std::cout << " ARM (32-bit)";
#endif
#ifdef ARCH_ARM_64
std::cout << " ARMv8 (64-bit)";
#endif
#ifdef ARCH_ARM_NEON
std::cout << " ARM (32-bit) with NEON";
#endif
std::cout << std::endl;
std::cout << "Build date: " << BUILD_DATETIME << std::endl;
std::cout << "(C) Microsoft Corporation 2015" << std::endl;
std::cout << "Originally authored by Mark Gottscho <mgottscho@ucla.edu>" << std::endl;
std::cout << "--------------------------------------------------------------------------------" << std::endl;
std::cout << "------------------------------------------------------------------------------------------" << std::endl;
std::cout << std::endl;
}