"platforms/hip/src/kernels/nonbonded.hip" did not exist on "ec39f6ff1b73c243d2c90f1d52b4c6fd237684a6"
OpenCLPlatform.h 3.88 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef OPENMM_OPENCLPLATFORM_H_
#define OPENMM_OPENCLPLATFORM_H_

/* -------------------------------------------------------------------------- *
 *                                   OpenMM                                   *
 * -------------------------------------------------------------------------- *
 * This is part of the OpenMM molecular simulation toolkit originating from   *
 * Simbios, the NIH National Center for Physics-Based Simulation of           *
 * Biological Structures at Stanford, funded under the NIH Roadmap for        *
 * Medical Research, grant U54 GM072970. See https://simtk.org.               *
 *                                                                            *
 * Portions copyright (c) 2008 Stanford University and the Authors.           *
 * Authors: Peter Eastman                                                     *
 * Contributors:                                                              *
 *                                                                            *
 * This program is free software: you can redistribute it and/or modify       *
 * it under the terms of the GNU Lesser General Public License as published   *
 * by the Free Software Foundation, either version 3 of the License, or       *
 * (at your option) any later version.                                        *
 *                                                                            *
 * This program is distributed in the hope that it will be useful,            *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
 * GNU Lesser General Public License for more details.                        *
 *                                                                            *
 * You should have received a copy of the GNU Lesser General Public License   *
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.      *
 * -------------------------------------------------------------------------- */

#include "openmm/Platform.h"
#include "OpenCLStreamFactory.h"

struct _gpuContext;

namespace OpenMM {
    
class OpenCLContext;

/**
 * This Platform subclass uses OpenCL implementations of the OpenMM kernels.
 */

class OPENMM_EXPORT OpenCLPlatform : public Platform {
public:
    class PlatformData;
    OpenCLPlatform();
    const std::string& getName() const {
        static const std::string name = "OpenCL";
        return name;
    }
    double getSpeed() const {
52
        return 0; // TODO Increase this.  Currently set to 0 so it will never be selected automatically.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
    }
    bool supportsDoublePrecision() const;
    const std::string& getPropertyValue(const Context& context, const std::string& property) const;
    void setPropertyValue(Context& context, const std::string& property, const std::string& value) const;
    const StreamFactory& getDefaultStreamFactory() const;
    void contextCreated(ContextImpl& context) const;
    void contextDestroyed(ContextImpl& context) const;
    /**
     * This is the name of the parameter for selecting which OpenCL platform to use.
     */
    static const std::string& OpenCLPlatformIndex() {
        static const std::string key = "OpenCLPlatformIndex";
        return key;
    }
    /**
     * This is the name of the parameter for selecting which OpenCL device to use.
     */
    static const std::string& OpenCLDeviceIndex() {
        static const std::string key = "OpenCLDeviceIndex";
        return key;
    }
private:
    OpenCLStreamFactory defaultStreamFactory;
};

class OpenCLPlatform::PlatformData {
public:
    PlatformData(int numParticles, int platformIndex, int deviceIndex);
    OpenCLContext* context;
    bool removeCM;
    int cmMotionFrequency;
    int stepCount, computeForceCount;
    double time;
    std::map<std::string, std::string> propertyValues;
};

} // namespace OpenMM

#endif /*OPENMM_OPENCLPLATFORM_H_*/