Skip to content

Commit 66a0025

Browse files
committed
Win
1 parent a789f60 commit 66a0025

17 files changed

+506
-95
lines changed

CMakeLists.txt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
1-
cmake_minimum_required(VERSION 3.23)
1+
cmake_minimum_required(VERSION 3.23.0)
22
SET (CVM_VERSION 9.1.0)
3-
project(cvm VERSION ${CVM_VERSION} DESCRIPTION "CVM Class Library")
3+
project(cvm LANGUAGES Fortran CXX VERSION ${CVM_VERSION} DESCRIPTION "CVM Class Library")
44

5-
option(BUILD_TESTS "Build regression test program" OFF)
6-
option(IFORT "Use Intel Fortran compiler" OFF)
7-
option(ICC "Use Intel C++ compiler" OFF)
5+
#cmake -DCMAKE_Fortran_COMPILER=ifx -DCMAKE_CXX_COMPILER=icx -DCMAKE_C_COMPILER=icx -DMKL=ON -DILP64=ON -DBUILD_TESTS=ON
6+
7+
if (${CMAKE_CXX_COMPILER_ID} MATCHES "^Intel.*")
8+
SET(ICC ON)
9+
message(STATUS "Found Intel C++: ${CMAKE_CXX_COMPILER_ID} version ${CMAKE_CXX_COMPILER_VERSION}")
10+
endif()
11+
12+
if (${CMAKE_Fortran_COMPILER_ID} MATCHES "^Intel.*")
13+
SET(IFORT ON)
14+
message(STATUS "Found Intel Fortran: ${CMAKE_Fortran_COMPILER_ID} version ${CMAKE_Fortran_COMPILER_VERSION}")
15+
endif()
16+
17+
option(BUILD_TESTS "Build regression test program (takes a while)" OFF)
818
option(MKL "Use Intel MKL library" OFF)
919
option(ILP64 "Set default integer size to 8 byte" OFF)
1020

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ sudo apt update
1616
sudo apt install intel-basekit
1717
source /opt/intel/oneapi/compiler/latest/env/vars.sh
1818
mkdir build
19-
cmake -DICC=ON -DIFORT=ON -DMKL=ON -DILP64=ON -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release -S . -B build
19+
cmake -DCMAKE_Fortran_COMPILER=ifx -DCMAKE_CXX_COMPILER=icx -DMKL=ON -DILP64=ON -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release -S . -B build
2020
cd build
2121
make -j
2222
../lib/cvm_test

cvm/src/CMakeLists.txt

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
set(CMAKE_CXX_STANDARD 17)
22
set(OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../lib")
33

4-
if(ICC)
5-
SET(CMAKE_CXX_COMPILER icpx)
6-
endif()
7-
84
add_subdirectory(ftn)
95

106
add_library(cvm SHARED
@@ -17,7 +13,7 @@ add_library(cvm SHARED
1713
scmatrix.cpp
1814
srmatrix.cpp
1915
utils.cpp
20-
)
16+
../../cvmlib/framework.h ../../cvmlib/dllmain.cpp ../../cvmlib/pch.cpp)
2117

2218
set_target_properties(
2319
cvm
@@ -37,23 +33,34 @@ add_dependencies(cvm ftn)
3733
if(ILP64)
3834
target_compile_definitions(cvm PUBLIC CVM_ILP64)
3935
endif()
40-
if(ICC)
41-
target_compile_options(cvm PUBLIC -fsycl -Rdebug-disables-optimization)
42-
endif()
36+
#if(ICC)
37+
# target_compile_options(cvm PUBLIC -fsycl -Rdebug-disables-optimization)
38+
#endif()
4339

4440
target_include_directories(cvm PRIVATE .)
45-
target_compile_options(cvm PUBLIC -fPIC
41+
if(LINUX)
42+
target_compile_options(cvm PUBLIC -fPIC
4643
$<$<CONFIG:Release>:-O3>
4744
$<$<CONFIG:Debug>:-O0 -g>)
45+
else()
46+
target_compile_definitions(cvm PUBLIC SRC_EXPORTS)
47+
target_compile_options(cvm PUBLIC
48+
$<$<CONFIG:Release>:/O3>
49+
$<$<CONFIG:Debug>:/Od /debug:all>)
50+
endif()
51+
4852
target_link_directories(cvm PUBLIC ${OUTPUT_PATH})
4953
target_link_libraries(cvm optimized ftn)
5054
target_link_libraries(cvm debug ftn_debug)
51-
target_link_libraries(cvm pthread m dl)
55+
if(LINUX)
56+
target_link_libraries(cvm pthread m dl)
57+
endif()
58+
5259

5360
if(MKL)
5461
if(ILP64)
5562
if(ICC)
56-
target_compile_options(cvm PUBLIC -qmkl-ilp64=parallel)
63+
target_compile_options(cvm PUBLIC /Qmkl-ilp64:parallel)
5764
endif()
5865
if(IFORT)
5966
target_link_libraries(cvm mkl_intel_ilp64)
@@ -62,7 +69,7 @@ if(MKL)
6269
endif()
6370
else()
6471
if(ICC)
65-
target_compile_options(cvm PUBLIC -qmkl=parallel)
72+
target_compile_options(cvm PUBLIC -Qmkl=parallel)
6673
endif()
6774
if(IFORT)
6875
target_link_libraries(cvm mkl_intel_lp64)
@@ -84,6 +91,8 @@ else()
8491
endif()
8592
endif()
8693

87-
if(ICC)
88-
target_link_libraries(cvm iomp5)
94+
if(LINUX)
95+
if(ICC)
96+
target_link_libraries(cvm iomp5)
97+
endif()
8998
endif()

cvm/src/ftn/CMakeLists.txt

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
if(IFORT)
2-
SET(CMAKE_Fortran_COMPILER ifx)
3-
endif()
41
project(ftn LANGUAGES Fortran)
52

63
FILE(GLOB SOURCE_FILES *.f)
@@ -14,14 +11,32 @@ set_target_properties(ftn
1411
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../lib"
1512
)
1613

17-
target_compile_options(ftn PUBLIC -pthread -fPIC
14+
if(LINUX)
15+
target_compile_options(ftn PUBLIC -pthread -fPIC
1816
$<$<CONFIG:Release>:-O3>
1917
$<$<CONFIG:Debug>:-O0 -g>)
18+
else()
19+
target_compile_options(ftn PUBLIC
20+
$<$<CONFIG:Release>:/O2>
21+
$<$<CONFIG:Debug>:/Od /debug>)
22+
endif()
23+
2024

21-
if(ILP64)
22-
if(IFORT)
23-
target_compile_options(ftn PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-integer-size 64>)
24-
else()
25-
target_compile_options(ftn PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-fdefault-integer-8>)
25+
if(LINUX)
26+
if(ILP64)
27+
if(IFORT)
28+
target_compile_options(ftn PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-integer-size 64>)
29+
else()
30+
target_compile_options(ftn PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-fdefault-integer-8>)
31+
endif()
32+
endif()
33+
else()
34+
if(ILP64)
35+
if(IFORT)
36+
target_compile_options(ftn PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:/integer-size:64>)
37+
else()
38+
target_compile_options(ftn PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:/default-integer-8>)
39+
endif()
2640
endif()
2741
endif()
42+

cvm/src/globals.cpp

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
#include "cvm.h"
1010

1111
#include <algorithm>
12+
#if defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)
13+
#pragma GCC diagnostic push
14+
#pragma GCC diagnostic ignored "-Wexceptions"
15+
#endif
1216

1317
extern "C" {
1418
void __stdcall XERBLA(const char* szSubName,
@@ -21,29 +25,12 @@ extern "C" {
2125
}
2226
}
2327

24-
#if defined(_MSC_VER)
25-
# ifdef _MANAGED
26-
# pragma managed(push, off)
27-
# endif
28-
29-
BOOL APIENTRY DllMain(HANDLE /*hModule*/,
30-
DWORD ul_reason_for_call,
31-
LPVOID /*lpReserved*/)
32-
{
33-
switch(ul_reason_for_call)
34-
{
35-
case DLL_PROCESS_ATTACH:
36-
case DLL_THREAD_ATTACH:
37-
case DLL_THREAD_DETACH:
38-
case DLL_PROCESS_DETACH:
39-
break;
40-
}
41-
return TRUE;
42-
}
28+
#if defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)
29+
#pragma GCC diagnostic pop
30+
#endif
4331

44-
# ifdef _MANAGED
45-
# pragma managed(pop)
46-
# endif
32+
#if !defined(_MSC_VER)
33+
#pragma GCC diagnostic pop
4734
#endif
4835

4936
CVM_NAMESPACE_BEG

cvm/test/CMakeLists.txt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ FILE(GLOB SOURCE_FILES *.cpp)
22
set(SOURCE_FILES ${SOURCE_FILES} test.h)
33
set(OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../lib")
44

5-
if(ICC)
6-
SET(CMAKE_CXX_COMPILER /opt/intel/oneapi/compiler/latest/linux/bin/icpx)
7-
endif()
8-
95
add_executable(cvm_test ${SOURCE_FILES})
106
add_dependencies(cvm_test cvm)
117

@@ -23,16 +19,24 @@ set_target_properties(
2319
if(ILP64)
2420
target_compile_definitions(cvm_test PUBLIC CVM_ILP64)
2521
endif()
26-
if(ICC)
27-
target_compile_options(cvm_test PUBLIC -fsycl -Rdebug-disables-optimization)
22+
23+
if(LINUX)
24+
target_compile_options(cvm_test PUBLIC
25+
$<$<CONFIG:Release>:-O2>
26+
$<$<CONFIG:Debug>:-O0 -g>)
27+
else()
28+
target_compile_options(cvm_test PUBLIC /MT
29+
$<$<CONFIG:Release>:/O1>
30+
$<$<CONFIG:Debug>:/Od /debug:all>)
2831
endif()
29-
target_compile_options(cvm_test PUBLIC
30-
$<$<CONFIG:Release>:-O2>
31-
$<$<CONFIG:Debug>:-O0 -g>)
3232

3333
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../gtest/googletest/include)
34-
target_link_directories(cvm_test PUBLIC ${OUTPUT_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/../../gtest)
34+
target_link_directories(cvm_test PUBLIC ${OUTPUT_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/../../gtest ${CMAKE_CURRENT_SOURCE_DIR}/../../gtest/lib/Release)
3535

3636
target_link_libraries(cvm_test optimized cvm)
3737
target_link_libraries(cvm_test debug cvm_debug)
38-
target_link_libraries(cvm_test gtest pthread)
38+
if(LINUX)
39+
target_link_libraries(cvm_test gtest pthread)
40+
else()
41+
target_link_libraries(cvm_test gtest)
42+
endif()

cvm/test/testBlas.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ TYPED_TEST(BlasTest, TestVectorNorminf) {
3535

3636
ssm1.set(1.);
3737
m1.set(1.);
38-
39-
std::cerr << sizeof(tint) << std::endl;
40-
41-
4238
m2 = ssm1 * m1;
4339
EXPECT_EQ(TP(16.), m2.norminf()) << "srsmatrix * rmatrix";
4440

cvm/test/testInitialization.cpp

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,17 +1294,16 @@ TYPED_TEST(InitializationTest, TestConstructorsAndBasicFeatures) {
12941294

12951295
cr1 = cv1(8);
12961296
cv1 *= cr2;
1297-
EXPECT_EQ(cr1 * cr2, cv1(8));
1297+
EXPECT_NEAR(std::abs(cr1 * cr2), std::abs(cv1(8)), s<TP>());
12981298
cr1 = cm1(1,1);
12991299
cm1 *= cr2;
1300-
EXPECT_EQ(cr1 * cr2, cm1(1,1));
1300+
EXPECT_NEAR(std::abs(cr1 * cr2), std::abs(cm1(1,1)), s<TP>());
13011301
cr1 = scm1(1,1);
13021302
scm1 *= cr2;
1303-
EXPECT_EQ(cr1 * cr2, scm1(1,1));
1303+
EXPECT_NEAR(std::abs(cr1 * cr2), std::abs(scm1(1,1)), s<TP>());
13041304
cr1 = scbm1(1,0);
13051305
scbm1 *= cr2;
1306-
// EXPECT_EQ(cr1 * cr2, scbm1(1,0));
1307-
EXPECT_NEAR(std::abs(cr1 * cr2), std::abs(scbm1(1,0)), s<TP>());
1306+
EXPECT_NEAR(std::abs(cr1 * cr2), std::abs(scbm1(1,0)), spp<TP>());
13081307
cr1 = cv1(8);
13091308
cv1 /= cr2;
13101309
EXPECT_NEAR(std::abs(cr1 / cr2), std::abs(cv1(8)), s<TP>());
@@ -1391,8 +1390,6 @@ TYPED_TEST(InitializationTest, TestConstructorsAndBasicFeatures) {
13911390
EXPECT_FALSE(sch1 == sch2) << "schmatrix ==";
13921391
EXPECT_TRUE(sch1 != sch2) << "schmatrix !=";
13931392

1394-
1395-
13961393
rv1 = rv;
13971394
EXPECT_EQ(rv(2), rv1[2]) << "rvector = rvector";
13981395
EXPECT_TRUE(rv1 == rv) << "rvector ==";
@@ -1674,18 +1671,18 @@ TYPED_TEST(InitializationTest, TestConstructorsAndBasicFeatures) {
16741671
srm4.resize(3);
16751672
srm4.mult(rm1, rm2);
16761673

1677-
EXPECT_EQ(rm1[2] * rm2(2),srm4(2,2)) << "mult";
1674+
EXPECT_NEAR(rm1[2] * rm2(2),srm4(2,2), sp<TP>()) << "mult";
16781675
rm4.resize(3, 2);
16791676
rm1.mult(srm4, rm4);
1680-
EXPECT_EQ(srm4[2] * rm4(1),rm1(2,1)) << "mult";
1677+
EXPECT_NEAR(srm4[2] * rm4(1),rm1(2,1), sp<TP>()) << "mult";
16811678
srbm1.resize(3);
16821679
rm1.mult(srbm1, rm4);
1683-
EXPECT_EQ(srbm1[2] * rm4(1),rm1(2,1)) << "mult";
1680+
EXPECT_NEAR(srbm1[2] * rm4(1),rm1(2,1), sp<TP>()) << "mult";
16841681
rm1.mult(~srbm1, rm4);
16851682
tmp = static_cast<float>(rm1(2,1));
16861683
EXPECT_FLOAT_EQ(static_cast<float>(srbm1(2) * rm4(1)),tmp) << "mult";
16871684
srbm1.mult(rm1, rm2);
1688-
EXPECT_EQ(rm1[1] * rm2(1),srbm1(1,1)) << "mult";
1685+
EXPECT_NEAR(rm1[1] * rm2(1),srbm1(1,1), sp<TP>()) << "mult";
16891686

16901687
r1 = -0.031;
16911688
r2 = 0.319;
@@ -1717,24 +1714,28 @@ TYPED_TEST(InitializationTest, TestConstructorsAndBasicFeatures) {
17171714
EXPECT_FLOAT_EQ(static_cast<float>((cm2[1] * cm1(1)).imag()),
17181715
static_cast<float>(cm3(1,1).imag())) << "mult";
17191716
cm4.mult(cm1, cm2);
1720-
EXPECT_EQ(cm1[2] * cm2(2),cm4(2,2)) << "mult";
1717+
EXPECT_FLOAT_EQ((cm1[2] * cm2(2)).real(),cm4(2,2).real()) << "mult";
1718+
EXPECT_FLOAT_EQ((cm1[2] * cm2(2)).imag(),cm4(2,2).imag()) << "mult";
17211719
scm4.resize(3);
17221720
scm4.mult(cm1, cm2);
1723-
EXPECT_EQ(cm1[2] * cm2(2),scm4(2,2)) << "mult";
1721+
EXPECT_FLOAT_EQ((cm1[2] * cm2(2)).real(),scm4(2,2).real()) << "mult";
1722+
EXPECT_FLOAT_EQ((cm1[2] * cm2(2)).imag(),scm4(2,2).imag()) << "mult";
17241723
cm4.resize(3, 2);
17251724
cm1.mult(scm4, cm4);
1726-
EXPECT_EQ(scm4[2] * cm4(1),cm1(2,1)) << "mult";
1725+
EXPECT_FLOAT_EQ((scm4[2] * cm4(1)).real(),cm1(2,1).real()) << "mult";
1726+
EXPECT_FLOAT_EQ((scm4[2] * cm4(1)).imag(),cm1(2,1).imag()) << "mult";
17271727
scbm.resize(3);
17281728
scbm.set(TPC(1.23,-0.912));
17291729
cm1.mult(scbm, cm4);
1730-
EXPECT_EQ(scbm[2] * cm4(1),cm1(2,1)) << "mult";
1730+
EXPECT_FLOAT_EQ((scbm[2] * cm4(1)).real(),cm1(2,1).real()) << "mult";
1731+
EXPECT_FLOAT_EQ((scbm[2] * cm4(1)).imag(),cm1(2,1).imag()) << "mult";
17311732
cm1.mult(~scbm, cm4);
17321733
EXPECT_FLOAT_EQ(static_cast<float>((~(scbm(2)) * cm4(1)).real()), static_cast<float>(cm1(2,1).real())) << "mult";
17331734
EXPECT_FLOAT_EQ(static_cast<float>((~(scbm(2)) * cm4(1)).imag()), static_cast<float>(cm1(2,1).imag())) << "mult";
17341735
scbm1.resize(3);
17351736
scbm1.mult(cm1, cm2);
1736-
EXPECT_EQ(cm1[1] * cm2(1),scbm1(1,1)) << "mult";
1737-
1737+
EXPECT_FLOAT_EQ((cm1[1] * cm2(1)).real(),scbm1(1,1).real()) << "mult";
1738+
EXPECT_FLOAT_EQ((cm1[1] * cm2(1)).imag(),scbm1(1,1).imag()) << "mult";
17381739

17391740
cm1.randomize_real(0., 1.);
17401741
cm2.randomize_real(0., 1.);
@@ -1918,26 +1919,30 @@ TYPED_TEST(InitializationTest, TestConstructorsAndBasicFeatures) {
19181919
scbm2.set(TPC(1.23,-0.977));
19191920

19201921
cm1 = scbm2;
1921-
EXPECT_NEAR(std::abs(scbm2(1,2)), std::abs(cm1(1,2)), s<TP>()) << "mix cmatrix scbm";
1922-
EXPECT_NEAR(std::abs(scbm2(3,0)), std::abs(cm1(3,0)), s<TP>()) << "mix cmatrix scbm";
1922+
EXPECT_NEAR(std::abs(scbm2(1,2)), std::abs(cm1(1,2)), s<TP>()) << "mix cmatrix scbm";
1923+
EXPECT_NEAR(std::abs(scbm2(3,0)), std::abs(cm1(3,0)), s<TP>()) << "mix cmatrix scbm";
19231924

19241925
cm1 = cm1 + scbm2;
19251926
cm1 += scbm2;
1926-
EXPECT_NEAR(std::abs(scbm2(1,2) * TP(3.)), std::abs(cm1(1,2)), s<TP>()) << "mix cmatrix scbm";
1927-
EXPECT_NEAR(std::abs(scbm2(3,0) * TP(3.)), std::abs(cm1(3,0)), s<TP>()) << "mix cmatrix scbm";
1928-
EXPECT_NEAR(std::abs(TP(3.) * scbm2(1,2)), std::abs(cm1(0,1)), s<TP>()) << "mix cmatrix scbm";
1929-
EXPECT_NEAR(std::abs(TP(3.) * scbm2(1,0)), std::abs(cm1(1,0)), s<TP>()) << "mix cmatrix scbm";
1927+
EXPECT_NEAR((scbm2(1,2) * TP(3.)).real(), cm1(1,2).real(), spp<TP>()) << "mix cmatrix scbm";
1928+
EXPECT_NEAR((scbm2(1,2) * TP(3.)).imag(), cm1(1,2).imag(), spp<TP>()) << "mix cmatrix scbm";
1929+
EXPECT_NEAR((scbm2(3,0) * TP(3.)).real(), cm1(3,0).real(), spp<TP>()) << "mix cmatrix scbm";
1930+
EXPECT_NEAR((scbm2(3,0) * TP(3.)).imag(), cm1(3,0).imag(), spp<TP>()) << "mix cmatrix scbm";
1931+
EXPECT_NEAR((TP(3.) * scbm2(1,2)).real(), cm1(0,1).real(), spp<TP>()) << "mix cmatrix scbm";
1932+
EXPECT_NEAR((TP(3.) * scbm2(1,2)).imag(), cm1(0,1).imag(), spp<TP>()) << "mix cmatrix scbm";
1933+
EXPECT_NEAR((TP(3.) * scbm2(1,0)).real(), cm1(1,0).real(), spp<TP>()) << "mix cmatrix scbm";
1934+
EXPECT_NEAR((TP(3.) * scbm2(1,0)).imag(), cm1(1,0).imag(), spp<TP>()) << "mix cmatrix scbm";
19301935

19311936
rm1 = srbm2;
1932-
EXPECT_NEAR(srbm2(1,2), rm1(1,2), s<TP>()) << "mix rmatrix srbm";
1933-
EXPECT_NEAR(srbm2(3,0), rm1(3,0), s<TP>()) << "mix rmatrix srbm";
1937+
EXPECT_NEAR(srbm2(1,2), rm1(1,2), s<TP>()) << "mix rmatrix srbm";
1938+
EXPECT_NEAR(srbm2(3,0), rm1(3,0), s<TP>()) << "mix rmatrix srbm";
19341939

19351940
rm1 = rm1 + srbm2;
19361941
rm1 += srbm2;
1937-
EXPECT_EQ(srbm2(1,2) * 3., rm1(1,2)) << "mix rmatrix srbm";
1942+
EXPECT_EQ(srbm2(1,2) * 3., rm1(1,2)) << "mix rmatrix srbm";
19381943
EXPECT_EQ(3. * srbm2(3,0), rm1(3,0)) << "mix matrix srbm";
1939-
EXPECT_EQ(3 * srbm2(3,0), rm1(3,0)) << "mix rmatrix srbm";
1940-
EXPECT_EQ(srbm2(1,2) * 3, rm1(1,2)) << "mix rmatrix srbm";
1944+
EXPECT_EQ(3 * srbm2(3,0), rm1(3,0)) << "mix rmatrix srbm";
1945+
EXPECT_EQ(srbm2(1,2) * 3, rm1(1,2)) << "mix rmatrix srbm";
19411946

19421947
scbm1.resize(4);
19431948
for (int j = 0; j <= 3; j++) {

0 commit comments

Comments
 (0)