diff --git a/kuqcd/.vscode/settings.json b/kuqcd/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..7e7935efa98108eda469c6a7f39244b90ed894f5 --- /dev/null +++ b/kuqcd/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "wecode-cpp.languageProvider": "Tag" +} \ No newline at end of file diff --git a/kuqcd/.vscode/tags-34.wecode-db b/kuqcd/.vscode/tags-34.wecode-db new file mode 100644 index 0000000000000000000000000000000000000000..0e01f6452e8d3a043cc9f3e9333fa6501c601fcb Binary files /dev/null and b/kuqcd/.vscode/tags-34.wecode-db differ diff --git a/kuqcd/.vscode/tags-34.wecode-db-shm b/kuqcd/.vscode/tags-34.wecode-db-shm new file mode 100644 index 0000000000000000000000000000000000000000..d657aaeac75ae377cfba639c8646834ee6d7a3ae Binary files /dev/null and b/kuqcd/.vscode/tags-34.wecode-db-shm differ diff --git a/kuqcd/.vscode/tags-34.wecode-db-wal b/kuqcd/.vscode/tags-34.wecode-db-wal new file mode 100644 index 0000000000000000000000000000000000000000..c6d68fbc90256a4c5364ef3b22553175d5f2e5b9 Binary files /dev/null and b/kuqcd/.vscode/tags-34.wecode-db-wal differ diff --git a/kuqcd/.vscode/tags-34.wecode-lock b/kuqcd/.vscode/tags-34.wecode-lock new file mode 100644 index 0000000000000000000000000000000000000000..fd1e976b3908e713eff26061ab401cf0d0f2de82 Binary files /dev/null and b/kuqcd/.vscode/tags-34.wecode-lock differ diff --git a/kuqcd/Readme b/kuqcd/Readme new file mode 100644 index 0000000000000000000000000000000000000000..09ef3f05aaa8348ff093815440f1207009211389 --- /dev/null +++ b/kuqcd/Readme @@ -0,0 +1,17 @@ +#kuqcd-test + +### 介绍 +kuqcd-test提供kuqcd的用例测试 + +### 编译 +编译前需要加载hpckit,hpckit_path为hpckit所在路径,例如:/opt/HPCKit/latest +sh build.sh ${hpckit_path} bisheng/gcc + +### 运行 + +sh run.sh + + +### 运行结果 + +[ PASSED ] 1 tests \ No newline at end of file diff --git a/kuqcd/build.sh b/kuqcd/build.sh new file mode 100644 index 0000000000000000000000000000000000000000..addc0fe450da18b85769d71c998085630ef2147a --- /dev/null +++ b/kuqcd/build.sh @@ -0,0 +1,6 @@ +HPCkit_path=$1 +complier=$2 + +cd test +mpicxx -I ${HPCkit_path}/kuqcd/${complier}/include -L ${HPCkit_path}/kuqcd/${complier}/lib -lkuqcd test_solver.cpp -o ../test_solver +cd .. \ No newline at end of file diff --git a/kuqcd/input b/kuqcd/input new file mode 100644 index 0000000000000000000000000000000000000000..a0e73bba05f7fd1aa01ddd82367a1d3a6f756379 --- /dev/null +++ b/kuqcd/input @@ -0,0 +1,4 @@ +gridx=1 +gridy=1 +gridz=1 +gridt=1 \ No newline at end of file diff --git a/kuqcd/run.sh b/kuqcd/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..73eb2d841719454bf8e6a854c68edccf82dd9ca3 --- /dev/null +++ b/kuqcd/run.sh @@ -0,0 +1 @@ +./test_solver < input \ No newline at end of file diff --git a/kuqcd/test/test_solver.cpp b/kuqcd/test/test_solver.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e14a5ec82d1b073b3aa05a9367711aa10d1e4715 --- /dev/null +++ b/kuqcd/test/test_solver.cpp @@ -0,0 +1,105 @@ +#include +#include +#include +#include "kuqcd.h" + +using namespace kuqcd; + +template +void TestCGMPC(const KuQCDGaugeOrder gauge_order); + +int main(int argc, char** argv) +{ + int provided = 0; + int required = MPI_THREAD_FUNNELED; + int flag = MPI_Init_thread(&argc, &argv, required, &provided); + + TestCGMPC(KUQCD_NORMAL_ORDER); + MPI_Finalize(); + return 0; +} + +template +void TestCGMPC(const KuQCDGaugeOrder gauge_order) +{ + int repos = 1; + int nx = 4, ny = 4, nz = 4, nt = 1, seed = 1; + const int num_shift = 1; + std::array gridDim{1, 1, 1, 1}; + KuQCDRankOrder od = KUQCD_TZYX_ORDER; + KuQCDSiteSubset site_subset = KUQCD_ODD; + int haloDepthSpin = 0; + int haloDepthGauge = 3; + + Lattice latSup(nx ,ny ,nz ,nt); + + KuQCDPrecision prec = KUQCD_SINGLE; + LattBase * latBaseOdd = nullptr; + KuQCDGaugeParam Gagugeoptions; + Gagugeoptions.lat[0] = nx; + Gagugeoptions.lat[1] = ny; + Gagugeoptions.lat[2] = nz; + Gagugeoptions.lat[3] = nt; + Gagugeoptions.gauge_order = gauge_order; + Gagugeoptions.od = od; + Gagugeoptions.prec = prec; + site_subset = KUQCD_ALL; + Gagugeoptions.site_subset = site_subset; + Gagugeoptions.halo_depth = haloDepthGauge; + + double shifts[num_shift]; + shifts[0] = 3.671676313381e-05; + FILE* fp; + float* origin; + int np; + MPI_Comm_size(MPI_COMM_WORLD, &np); + int rk; + MPI_Comm_rank(MPI_COMM_WORLD, &rk); + + size_t vol = (size_t) nx*ny*nz*nt /Nbatch/np; + size_t volh = vol / 2; + size_t spinorLen = volh * Nbatch * 6; + size_t gaugeLen = vol * Nbatch * 4 * ReconS; + size_t gaugeLenNaik = vol * Nbatch * 4 * ReconN; + + origin = (float *)malloc(((num_shift + 1) * spinorLen + gaugeLen + gaugeLenNaik) * sizeof(float)); + char name[100]; + + for (int i = 0 ;i<(num_shift + 1)*spinorLen + gaugeLen + gaugeLenNaik;i++)origin[i] = 1.0; + kuqcd_init(); + float *originSrc = origin; + float *origingaugaeSmeared = &(origin[(num_shift + 1)*spinorLen]); + float * origingaugaeNaik = &(origin[(num_shift + 1)*spinorLen + gaugeLen]); + + Gagugeoptions.link_type = KUQCD_FAT_LINK; + Gagugeoptions.recon = ReconS; + kuqcd_load_gaugefield((void*)origingaugaeSmeared, &Gagugeoptions); + Gagugeoptions.link_type = KUQCD_LONG_LINK; + Gagugeoptions.recon = ReconN; + kuqcd_load_gaugefield((void*)origingaugaeNaik, &Gagugeoptions); + + KuQCDInvertParam invertOpts; + invertOpts.dslash_type = KUQCD_HISQPC_DIRAC; + invertOpts.inverter_type = KUQCD_CGM; + invertOpts.matpc_type = KUQCD_ODD_ODD; + int iter = 0; + invertOpts.num_shift = num_shift; + invertOpts.max_iter = 6500; + invertOpts.tol = 1e-12; + invertOpts.shifts = shifts; + invertOpts.prec = prec; + void *dst[num_shift] = {nullptr}; + float *dst_value[num_shift]; + for(int i = 0;i