Skip to content
Snippets Groups Projects
Commit 947d3415 authored by Xinzhe Wu's avatar Xinzhe Wu
Browse files

update

parent 74539bc3
Branches
Tags
No related merge requests found
add_executable(hello_world.exe hello_world.cpp) add_executable(hello_world.exe hello_world.cpp)
target_link_libraries(hello_world.exe PRIVATE mkl_common_mt -fopenmp) target_link_libraries(hello_world.exe PUBLIC OpenMP::OpenMP_CXX)
add_executable(integral.exe integral.cpp) add_executable(integral.exe integral.cpp)
target_link_libraries(integral.exe PRIVATE ${OPENMP_FLAGS}) target_link_libraries(integral.exe PUBLIC OpenMP::OpenMP_CXX)
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#define from 0.0f #define from 0.0f
#define to 100.0f #define to 100.0f
#define parts 9999999999 #define parts 99999999
#define step ((to - from) / parts) #define step ((to - from) / parts)
#define x (from + (step / 2.0f)) #define x (from + (step / 2.0f))
......
add_executable(gemm_mkl.exe gemm_mkl.cpp)
target_link_libraries(gemm_mkl.exe PRIVATE mkl_common_mt)
#include <stdio.h>
#include <iostream>
#include <vector>
#include <cmath>
#include <time.h>
#include <iomanip>
#include <chrono>
#include <cstdlib>
#include <boost/program_options.hpp>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
#include <mkl.h>
#include <omp.h>
int main(int argc, char** argv) {
using namespace boost::program_options;
options_description desc_cmdline;
desc_cmdline.add_options()
("size,s", value<int>()->default_value(-1), "Matrix size (if > 0, overrides m, n, k).")
("m", value<int>()->default_value(1024), "Size m.")
("n", value<int>()->default_value(1024), "Size n.")
("k", value<int>()->default_value(512), "Size k.")
("omp:threads", value<int>()->default_value(1), "OpenMP thread number.")
("repeat", value<int>()->default_value(1), "repeat times.");
variables_map vm;
store(parse_command_line(argc, argv, desc_cmdline),vm);
int m = vm["m"].as<int>();
int n = vm["n"].as<int>();
int k = vm["k"].as<int>();
int s = vm["size"].as<int>();
int repeat = vm["repeat"].as<int>();
if (s > 0)
m = n = k = s;
int num_threads = vm["omp:threads"].as<int>();
const double alpha = 1.0;
const double beta = 1.0;
std::vector<double> A(m * k);
std::vector<double> B(k * n);
std::vector<double> C(m * n);
std::generate(A.begin(), A.end(), [ttt = 1] () mutable { return ttt++; });
std::generate(B.begin(), B.end(), [ttt = 2] () mutable { return ttt++; });
std::fill(C.begin(), C.end(), (double)0.0);
double flops = 2.0 * m * n * k / 1e9;
std::chrono::high_resolution_clock::time_point start, end;
std::chrono::duration<double> elapsed;
start = std::chrono::high_resolution_clock::now();
for(int i = 0; i < repeat; i++){
dgemm("N", "N", &m, &n, &k, &alpha, A.data(), &m, B.data(), &k, &beta, C.data(), &m);
}
end = std::chrono::high_resolution_clock::now();
elapsed = std::chrono::duration_cast<std::chrono::duration<double>>(end - start);
std::cout << m << "," << n << "," << k << "," << "GEMM (mkl)," << num_threads << "," << 1 << "," << elapsed.count() << "," << repeat * flops / elapsed.count() << std::endl;
return 0;
}
#include <stdio.h>
#include <omp.h>
void socket_init(int socket_num)
{
int n_procs;
n_procs = omp_get_place_num_procs(socket_num);
#pragma omp parallel num_threads(n_procs) proc_bind(close)
{
printf("Reporting in from socket num, thread num: %d %d\n",
socket_num,omp_get_thread_num() );
}
}
int main()
{
int n_sockets, socket_num;
omp_set_nested(1);
omp_set_max_active_levels(2);
n_sockets = omp_get_num_places();
printf("number of sockets = %d \n", n_sockets);
#pragma omp parallel num_threads(n_sockets) private(socket_num) \
proc_bind(spread)
{
socket_num = omp_get_place_num();
socket_init(socket_num);
}
return 0;
}
add_executable(3_affinity_query.exe 3_affinity_query.cpp)
target_link_libraries(3_affinity_query.exe PUBLIC OpenMP::OpenMP_CXX)
cmake_minimum_required(VERSION 3.0) cmake_minimum_required(VERSION 3.9)
project(openmp CXX) project(openmp CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release) set(CMAKE_BUILD_TYPE Release)
endif() endif()
...@@ -13,100 +9,11 @@ endif() ...@@ -13,100 +9,11 @@ endif()
set(CMAKE_CXX_FLAGS_DEBUG "-g") set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3") set(CMAKE_CXX_FLAGS_RELEASE "-O3")
list (APPEND CMAKE_MODULE_PATH "${openmp_SOURCE_DIR}/cmake-modules") find_package(OpenMP REQUIRED)
option(MKL_MT "MKL with multithreading support" ON)
if(MKL_MT)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(OPENMP_FLAGS "-fopenmp")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(OPENMP_FLAGS "-fopenmp")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(OPENMP_FLAGS "-openmp")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(OPENMP_FLAGS "-fopenmp")
endif()
endif()
find_package(MKL REQUIRED)
if (MKL_FOUND)
set(LAPACK_INCLUDE_DIRS ${MKL_INCLUDE_DIRS})
if(MKL_MT)
set(LAPACK_LIBRARIES_MT
mkl_intel_lp64 mkl_core mkl_gnu_thread
gomp pthread m dl mkl_blacs_intelmpi_lp64
mkl_scalapack_lp64
CACHE PATH "LAPACK_LIBS"
)
else()
set(LAPACK_LIBRARIES
mkl_intel_lp64 mkl_core mkl_sequential
pthread m dl mkl_blacs_intelmpi_lp64
mkl_scalapack_lp64
CACHE PATH "LAPACK_LIBS"
)
endif()
link_directories(${MKL_LIB_DIR})
endif()
find_package(Boost REQUIRED COMPONENTS program_options)
include(CheckCXXSymbolExists)
CHECK_CXX_SYMBOL_EXISTS(MPI_Finalize mpi.h COMPILER_HAS_MPI)
if(COMPILER_HAS_MPI)
add_library(MPI::MPI_C INTERFACE IMPORTED)
else()
find_package(MPI REQUIRED)
if(MPI_FOUND)
SET(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
endif()
endif()
add_library(mkl_common INTERFACE)
target_include_directories(mkl_common
INTERFACE
${LAPACK_INCLUDE_DIRS})
target_link_libraries(mkl_common
INTERFACE
${LAPACK_LIBRARIES}
Boost::program_options)
if(MKL_MT)
add_library(mkl_common_mt INTERFACE)
target_include_directories(mkl_common_mt
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
${LAPACK_INCLUDE_DIRS})
target_link_libraries(mkl_common_mt
INTERFACE
${LAPACK_LIBRARIES_MT}
Boost::program_options)
endif()
add_library(mkl_common_with_mpi INTERFACE)
if(COMPILER_HAS_MPI)
target_link_libraries(mkl_common_with_mpi
INTERFACE
mkl_common
MPI::MPI_C)
else()
target_link_libraries(mkl_common_with_mpi
INTERFACE
mkl_common
${MPI_CXX_LIBRARIES})
endif()
SET(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
ADD_SUBDIRECTORY(0_hello_world) ADD_SUBDIRECTORY(0_hello_world)
ADD_SUBDIRECTORY(1_integral) ADD_SUBDIRECTORY(1_integral)
ADD_SUBDIRECTORY(3_affinity_query)
include(Dart) include(Dart)
include(CPack) include(CPack)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment