← 返回首页
Fix f16 check by umar456 · Pull Request #2773 · arrayfire/arrayfire · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .cmake  (1) .cpp  (2) .hpp  (1) All 3 file types selected Viewed files
Conversations
Failed to load comments. Retry
Loading
Jump to
Jump to file
Failed to load files. Retry
Loading
Diff view
Unified
Split
Hide whitespace
Apply and reload
Show whitespace
Diff view
Unified
Split
Hide whitespace
Apply and reload
16 changes: 12 additions & 4 deletions CMakeModules/FindMKL.cmake
Show comments View file Edit file Delete file Open in desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,14 @@ endif()

if(WIN32)
set(ENV_LIBRARY_PATHS "$ENV{LIB}")
message(VERBOSE "MKL environment variable(LIB): ${ENV_LIBRARY_PATHS}")
if (${CMAKE_VERSION} VERSION_GREATER 3.14)
message(VERBOSE "MKL environment variable(LIB): ${ENV_LIBRARY_PATHS}")
endif()
else()
string(REGEX REPLACE ":" ";" ENV_LIBRARY_PATHS "$ENV{LIBRARY_PATH}")
message(VERBOSE "MKL environment variable(LIBRARY_PATH): ${ENV_LIBRARY_PATHS}")
if (${CMAKE_VERSION} VERSION_GREATER 3.14)
message(VERBOSE "MKL environment variable(LIBRARY_PATH): ${ENV_LIBRARY_PATHS}")
endif()
endif()

# Finds and creates libraries for MKL with the MKL:: prefix
Expand Down Expand Up @@ -225,7 +229,9 @@ function(find_mkl_library)
intel64
intel64/gcc4.7)
if(MKL_${mkl_args_NAME}_LINK_LIBRARY)
message(VERBOSE "MKL_${mkl_args_NAME}_LINK_LIBRARY: ${MKL_${mkl_args_NAME}_LINK_LIBRARY}")
if (CMAKE_VERSION VERSION_GREATER 3.14)
message(VERBOSE "MKL_${mkl_args_NAME}_LINK_LIBRARY: ${MKL_${mkl_args_NAME}_LINK_LIBRARY}")
endif()
mark_as_advanced(MKL_${mkl_args_NAME}_LINK_LIBRARY)
endif()
endif()
Expand All @@ -252,7 +258,9 @@ function(find_mkl_library)
IntelSWTools/compilers_and_libraries/windows/tbb/lib/intel64/${msvc_dir}
)
if(MKL_${mkl_args_NAME}_STATIC_LINK_LIBRARY)
message(VERBOSE "MKL_${mkl_args_NAME}_STATIC_LINK_LIBRARY: ${MKL_${mkl_args_NAME}_STATIC_LINK_LIBRARY}")
if (CMAKE_VERSION VERSION_GREATER 3.14)
message(VERBOSE "MKL_${mkl_args_NAME}_STATIC_LINK_LIBRARY: ${MKL_${mkl_args_NAME}_STATIC_LINK_LIBRARY}")
endif()
mark_as_advanced(MKL_${mkl_args_NAME}_STATIC_LINK_LIBRARY)
endif()
endif()
Expand Down
28 changes: 28 additions & 0 deletions src/backend/opencl/Array.cpp
Show comments View file Edit file Delete file Open in desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,34 @@ Node_ptr bufferNodePtr() {
shortname<T>(true));
}

namespace {
template<typename T>
void verifyTypeSupport() {
return;
}

template<>
void verifyTypeSupport<double>() {
if (!isDoubleSupported(getActiveDeviceId())) {
AF_ERROR("Double precision not supported", AF_ERR_NO_DBL);
}
}

template<>
void verifyTypeSupport<cdouble>() {
if (!isDoubleSupported(getActiveDeviceId())) {
AF_ERROR("Double precision not supported", AF_ERR_NO_DBL);
}
}

template<>
void verifyTypeSupport<common::half>() {
if (!isHalfSupported(getActiveDeviceId())) {
AF_ERROR("Half precision not supported", AF_ERR_NO_HALF);
}
}
} // namespace

template<typename T>
Array<T>::Array(dim4 dims)
: info(getActiveDeviceId(), dims, 0, calcStrides(dims),
Expand Down
13 changes: 0 additions & 13 deletions src/backend/opencl/err_opencl.hpp
Show comments View file Edit file Delete file Open in desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,3 @@
throw SupportError(__PRETTY_FUNCTION__, __AF_FILENAME__, __LINE__, \
message, boost::stacktrace::stacktrace()); \
} while (0)

namespace opencl {
template<typename T>
void verifyTypeSupport() {
if ((std::is_same<T, double>::value || std::is_same<T, cdouble>::value) &&
!isDoubleSupported(getActiveDeviceId())) {
AF_ERROR("Double precision not supported", AF_ERR_NO_DBL);
} else if (std::is_same<T, common::half>::value &&
!isHalfSupported(getActiveDeviceId())) {
AF_ERROR("Half precision not supported", AF_ERR_NO_HALF);
}
}
} // namespace opencl
17 changes: 15 additions & 2 deletions src/backend/opencl/platform.cpp
Show comments View file Edit file Delete file Open in desktop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ bool isDoubleSupported(int device) {
dev = *devMngr.mDevices[device];
}

return (dev.getInfo<CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE>() > 0);
return (dev.getInfo<CL_DEVICE_DOUBLE_FP_CONFIG>() > 0);
}

bool isHalfSupported(int device) {
Expand All @@ -343,7 +343,20 @@ bool isHalfSupported(int device) {
common::lock_guard_t lock(devMngr.deviceMutex);
dev = *devMngr.mDevices[device];
}
return (dev.getInfo<CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF>() > 0);
cl_device_fp_config config = 0;
size_t ret_size = 0;
// NVIDIA OpenCL seems to return error codes for CL_DEVICE_HALF_FP_CONFIG.
// It seems to be a bug in their implementation. Assuming if this function
// fails that the implemenation does not support f16 type. Using the C API
// to avoid exceptions
cl_int err =
clGetDeviceInfo(dev(), CL_DEVICE_HALF_FP_CONFIG,
sizeof(cl_device_fp_config), &config, &ret_size);

if (err)
return false;
else
return config > 0;
}

void devprop(char* d_name, char* d_platform, char* d_toolkit, char* d_compute) {
Expand Down
Toggle all file notes Toggle all file annotations

Footer

© 2026 GitHub, Inc.