mirror of
https://github.com/CNugteren/CLBlast.git
synced 2024-08-21 04:22:27 +02:00
Merge pull request #108 from CNugteren/msvc2013
Support for Visual Studio 2013
This commit is contained in:
commit
541415374f
|
@ -3,6 +3,7 @@ Development version (next release)
|
||||||
- Updated to version 8.0 of the CLCudaAPI C++11 OpenCL header
|
- Updated to version 8.0 of the CLCudaAPI C++11 OpenCL header
|
||||||
- Improved performance of GEMM kernels for small sizes by using a direct single-kernel implementation
|
- Improved performance of GEMM kernels for small sizes by using a direct single-kernel implementation
|
||||||
- Fixed a bug in the tests and samples related to waiting for an invalid event
|
- Fixed a bug in the tests and samples related to waiting for an invalid event
|
||||||
|
- Added support for compilation under Visual Studio 2013 (MSVC++ 12.0)
|
||||||
- Added an option to set OpenCL compiler options through the env variable CLBLAST_BUILD_OPTIONS
|
- Added an option to set OpenCL compiler options through the env variable CLBLAST_BUILD_OPTIONS
|
||||||
- Added an option to run tuned kernels multiple times to average execution times
|
- Added an option to run tuned kernels multiple times to average execution times
|
||||||
- Various minor fixes and enhancements
|
- Various minor fixes and enhancements
|
||||||
|
|
|
@ -48,7 +48,7 @@ The pre-requisites for compilation of CLBlast are:
|
||||||
- Clang 3.3 or newer
|
- Clang 3.3 or newer
|
||||||
- AppleClang 5.0 or newer
|
- AppleClang 5.0 or newer
|
||||||
- ICC 14.0 or newer
|
- ICC 14.0 or newer
|
||||||
- MSVC (Visual Studio) 2015 or newer
|
- MSVC (Visual Studio) 2013 or newer
|
||||||
* An OpenCL 1.1 or newer library, for example:
|
* An OpenCL 1.1 or newer library, for example:
|
||||||
- Apple OpenCL
|
- Apple OpenCL
|
||||||
- NVIDIA CUDA SDK
|
- NVIDIA CUDA SDK
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
#include <CL/opencl.h>
|
#include <CL/opencl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// MSVC 2013 doesn't fully support C99
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define inline __inline
|
||||||
|
#endif
|
||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
// Host data-type for half-precision floating-point (16-bit). This is based on the OpenCL type,
|
// Host data-type for half-precision floating-point (16-bit). This is based on the OpenCL type,
|
||||||
|
|
|
@ -48,6 +48,23 @@ const std::vector<Database::DatabaseEntry> Database::database = {
|
||||||
KernelSelectionHalf, KernelSelectionSingle, KernelSelectionDouble, KernelSelectionComplexSingle, KernelSelectionComplexDouble
|
KernelSelectionHalf, KernelSelectionSingle, KernelSelectionDouble, KernelSelectionComplexSingle, KernelSelectionComplexDouble
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The OpenCL device types
|
||||||
|
const std::string Database::kDeviceTypeCPU = "CPU";
|
||||||
|
const std::string Database::kDeviceTypeGPU = "GPU";
|
||||||
|
const std::string Database::kDeviceTypeAccelerator = "accelerator";
|
||||||
|
const std::string Database::kDeviceTypeAll = "default";
|
||||||
|
|
||||||
|
// The OpenCL device vendors
|
||||||
|
const std::string Database::kDeviceVendorAll = "default";
|
||||||
|
|
||||||
|
// Alternative names for some OpenCL vendors
|
||||||
|
const std::unordered_map<std::string, std::string> Database::kVendorNames{
|
||||||
|
{ "Intel(R) Corporation", "Intel" },
|
||||||
|
{ "GenuineIntel", "Intel" },
|
||||||
|
{ "Advanced Micro Devices, Inc.", "AMD" },
|
||||||
|
{ "NVIDIA Corporation", "NVIDIA" },
|
||||||
|
};
|
||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
// Constructor, computing device properties and populating the parameter-vector from the database.
|
// Constructor, computing device properties and populating the parameter-vector from the database.
|
||||||
|
|
|
@ -36,36 +36,31 @@ class Database {
|
||||||
|
|
||||||
// Structures for content inside the database
|
// Structures for content inside the database
|
||||||
struct DatabaseDevice {
|
struct DatabaseDevice {
|
||||||
const std::string name;
|
std::string name;
|
||||||
const Parameters parameters;
|
Parameters parameters;
|
||||||
};
|
};
|
||||||
struct DatabaseVendor {
|
struct DatabaseVendor {
|
||||||
const std::string type;
|
std::string type;
|
||||||
const std::string name;
|
std::string name;
|
||||||
const std::vector<DatabaseDevice> devices;
|
std::vector<DatabaseDevice> devices;
|
||||||
};
|
};
|
||||||
struct DatabaseEntry {
|
struct DatabaseEntry {
|
||||||
const std::string kernel;
|
std::string kernel;
|
||||||
const Precision precision;
|
Precision precision;
|
||||||
const std::vector<DatabaseVendor> vendors;
|
std::vector<DatabaseVendor> vendors;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The OpenCL device types
|
// The OpenCL device types
|
||||||
static constexpr auto kDeviceTypeCPU = "CPU";
|
static const std::string kDeviceTypeCPU;
|
||||||
static constexpr auto kDeviceTypeGPU = "GPU";
|
static const std::string kDeviceTypeGPU;
|
||||||
static constexpr auto kDeviceTypeAccelerator = "accelerator";
|
static const std::string kDeviceTypeAccelerator;
|
||||||
static constexpr auto kDeviceTypeAll = "default";
|
static const std::string kDeviceTypeAll;
|
||||||
|
|
||||||
// The OpenCL device vendors
|
// The OpenCL device vendors
|
||||||
static constexpr auto kDeviceVendorAll = "default";
|
static const std::string kDeviceVendorAll;
|
||||||
|
|
||||||
// Alternative names for some OpenCL vendors
|
// Alternative names for some OpenCL vendors
|
||||||
const std::unordered_map<std::string,std::string> kVendorNames {
|
static const std::unordered_map<std::string, std::string> kVendorNames;
|
||||||
{"Intel(R) Corporation", "Intel"},
|
|
||||||
{"GenuineIntel", "Intel"},
|
|
||||||
{"Advanced Micro Devices, Inc.", "AMD"},
|
|
||||||
{"NVIDIA Corporation", "NVIDIA"},
|
|
||||||
};
|
|
||||||
|
|
||||||
// The database consists of separate database entries, stored together in a vector
|
// The database consists of separate database entries, stored together in a vector
|
||||||
static const DatabaseEntry XaxpyHalf, XaxpySingle, XaxpyDouble, XaxpyComplexSingle, XaxpyComplexDouble;
|
static const DatabaseEntry XaxpyHalf, XaxpySingle, XaxpyDouble, XaxpyComplexSingle, XaxpyComplexDouble;
|
||||||
|
|
39
src/msvc.hpp
Normal file
39
src/msvc.hpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
|
||||||
|
// =================================================================================================
|
||||||
|
// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This
|
||||||
|
// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max-
|
||||||
|
// width of 100 characters per line.
|
||||||
|
//
|
||||||
|
// Author(s):
|
||||||
|
// Cedric Nugteren <www.cedricnugteren.nl>
|
||||||
|
//
|
||||||
|
// This file provides macro's and definitions to make compilation work on Microsoft Visual Studio,
|
||||||
|
// in particular for versions older than 2015 with limited C++11 support.
|
||||||
|
// MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
|
||||||
|
// MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
|
||||||
|
// MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
|
||||||
|
// MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
|
||||||
|
// MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
|
||||||
|
//
|
||||||
|
// =================================================================================================
|
||||||
|
|
||||||
|
#ifndef CLBLAST_MSVC_HPP_
|
||||||
|
#define CLBLAST_MSVC_HPP_
|
||||||
|
|
||||||
|
namespace clblast {
|
||||||
|
// =================================================================================================
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
|
// No support for constexpr prior to 2015. Note that this only works with constants, not with
|
||||||
|
// constexpr functions (unused in this project).
|
||||||
|
#if _MSC_VER < 1900
|
||||||
|
#define constexpr const
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// _MSC_VER
|
||||||
|
#endif
|
||||||
|
// =================================================================================================
|
||||||
|
} // namespace clblast
|
||||||
|
|
||||||
|
// CLBLAST_MSVC_HPP_
|
||||||
|
#endif
|
|
@ -34,13 +34,16 @@ Xgemm<T>::Xgemm(Queue &queue, EventPointer event, const std::string &name):
|
||||||
#include "../../kernels/level3/convert_symmetric.opencl"
|
#include "../../kernels/level3/convert_symmetric.opencl"
|
||||||
#include "../../kernels/level3/convert_triangular.opencl"
|
#include "../../kernels/level3/convert_triangular.opencl"
|
||||||
#include "../../kernels/level3/convert_hermitian.opencl"
|
#include "../../kernels/level3/convert_hermitian.opencl"
|
||||||
#include "../../kernels/level3/xgemm_part1.opencl"
|
|
||||||
#include "../../kernels/level3/xgemm_part2.opencl"
|
|
||||||
#include "../../kernels/level3/xgemm_part3.opencl"
|
|
||||||
#include "../../kernels/level3/xgemm_direct_part1.opencl"
|
#include "../../kernels/level3/xgemm_direct_part1.opencl"
|
||||||
#include "../../kernels/level3/xgemm_direct_part2.opencl"
|
#include "../../kernels/level3/xgemm_direct_part2.opencl"
|
||||||
#include "../../kernels/level3/xgemm_direct_part3.opencl"
|
#include "../../kernels/level3/xgemm_direct_part3.opencl"
|
||||||
;
|
;
|
||||||
|
auto source_string_part_2 = // separated in two parts to prevent C1091 in MSVC 2013
|
||||||
|
#include "../../kernels/level3/xgemm_part1.opencl"
|
||||||
|
#include "../../kernels/level3/xgemm_part2.opencl"
|
||||||
|
#include "../../kernels/level3/xgemm_part3.opencl"
|
||||||
|
;
|
||||||
|
source_string_ += source_string_part_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include "clblast_half.h"
|
#include "clblast_half.h"
|
||||||
#include "clpp11.hpp"
|
#include "clpp11.hpp"
|
||||||
|
|
||||||
|
#include "msvc.hpp"
|
||||||
|
|
||||||
namespace clblast {
|
namespace clblast {
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
|
@ -206,7 +208,7 @@ bool CheckArgument(const int argc, char *argv[], std::string &help, const std::s
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
// Helper function to check for errors in the status code
|
// Helper function to check for errors in the status code
|
||||||
constexpr bool ErrorIn(const StatusCode s) { return (s != StatusCode::kSuccess); }
|
inline bool ErrorIn(const StatusCode s) { return (s != StatusCode::kSuccess); }
|
||||||
|
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue