nb_kernel_ia64_single.c
来自「最著名最快的分子模拟软件」· C语言 代码 · 共 209 行
C
209 行
/* -*- mode: c; tab-width: 4; indent-tabs-mode: n; c-basic-offset: 4 -*- * * $Id: nb_kernel_ia64_single.c,v 1.2 2005/01/25 12:11:51 lindahl Exp $ * * This file is part of Gromacs Copyright (c) 1991-2004 * David van der Spoel, Erik Lindahl, University of Groningen. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * To help us fund GROMACS development, we humbly ask that you cite * the research papers on the package. Check out http://www.gromacs.org * * And Hey: * Gnomes, ROck Monsters And Chili Sauce */#include <stdio.h>#include <types/nrnb.h>#include "../nb_kerneltype.h"/* Include kernel headers in local directory.* We can only have one routine in each file due to a bug* in the intel assembler program...*/#include "ia64_cpuid.h"#include "nb_kernel010_ia64_single.h"#include "nb_kernel010nf_ia64_single.h"#include "nb_kernel030_ia64_single.h"#include "nb_kernel030nf_ia64_single.h"#include "nb_kernel100_ia64_single.h"#include "nb_kernel100nf_ia64_single.h"#include "nb_kernel110_ia64_single.h"#include "nb_kernel110nf_ia64_single.h"#include "nb_kernel130_ia64_single.h"#include "nb_kernel130nf_ia64_single.h"#include "nb_kernel200_ia64_single.h"#include "nb_kernel200nf_ia64_single.h"#include "nb_kernel210_ia64_single.h"#include "nb_kernel210nf_ia64_single.h"#include "nb_kernel230_ia64_single.h"#include "nb_kernel230nf_ia64_single.h"#include "nb_kernel300_ia64_single.h"#include "nb_kernel300nf_ia64_single.h"#include "nb_kernel310_ia64_single.h"#include "nb_kernel310nf_ia64_single.h"#include "nb_kernel330_ia64_single.h"#include "nb_kernel330nf_ia64_single.h"#include "nb_kernel400_ia64_single.h"#include "nb_kernel400nf_ia64_single.h"#include "nb_kernel410_ia64_single.h"#include "nb_kernel410nf_ia64_single.h"#include "nb_kernel430_ia64_single.h"#include "nb_kernel430nf_ia64_single.h"static nb_kernel_t *kernellist_ia64_single[eNR_NBKERNEL_NR] = { nb_kernel010_ia64_single, NULL, nb_kernel030_ia64_single, nb_kernel100_ia64_single, NULL, NULL, NULL, NULL, nb_kernel110_ia64_single, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, nb_kernel130_ia64_single, NULL, NULL, NULL, NULL, nb_kernel200_ia64_single, NULL, NULL, NULL, NULL, nb_kernel210_ia64_single, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, nb_kernel230_ia64_single, NULL, NULL, NULL, NULL, nb_kernel300_ia64_single, NULL, NULL, NULL, NULL, nb_kernel310_ia64_single, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, nb_kernel330_ia64_single, NULL, NULL, NULL, NULL, nb_kernel400_ia64_single, nb_kernel410_ia64_single, nb_kernel430_ia64_single };voidnb_kernel_setup_ia64_single(FILE *log,nb_kernel_t **list){ unsigned char cpu_family; unsigned char cpu_revision; unsigned char cpu_model; union { unsigned long long i; unsigned char c[8]; } conv; int i; nb_kernel_t *p; /* * The assembly nonbonded kernels will work on all current ia64 * implementations, but the software pipelining will be very slow * on Merced (Itanium1) due to the longer latencies. Check what we have... */ if(log) fprintf(log,"Testing ia64 CPU family..."); conv.i=ia64_cpuid(3); cpu_family = conv.c[3]; cpu_model = conv.c[2]; cpu_revision = conv.c[1]; switch(cpu_family) { case 0x07: if(log) { fprintf(log,"Itanium 1\n"); fprintf(log,"Assembly kernels would be slow with Itanium 1 latencies - disabling.\n"); } return; break; case 0x1f: if(log) fprintf(log,"Itanium 2\n"); break; default: if(log) fprintf(log, "Unknown Itanium\n" "You might want to test the speed without assembly kernels\n" "by setting the NOASSEMBLYLOOPS environment variable.\n"); break; } fprintf(log,"Using single precision ia64 assembly kernels."); for(i=0;i<eNR_NBKERNEL_NR;i++) { p = kernellist_ia64_single[i]; if(p!=NULL) list[i] = p; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?