Skip to content

Commit

Permalink
Small improvements
Browse files Browse the repository at this point in the history
- Updates host library search path, see #105
- Updates usage of VC4C interface
  • Loading branch information
doe300 committed Feb 5, 2022
1 parent 1acb1b8 commit a60945c
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 41 deletions.
4 changes: 2 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ endif()
if(MOCK_HAL)
target_compile_definitions(VC4CL PRIVATE MOCK_HAL=1)
elseif(CROSS_COMPILE OR EXISTS "/opt/vc/include/bcm_host.h")
find_library(BCMHOST_LIBRARY NAMES bcm_host libbcm_host HINTS "/opt/vc/lib")
find_library(VCSM_LIBRARY NAMES vcsm libvcsm HINTS "/opt/vc/lib")
find_library(BCMHOST_LIBRARY NAMES bcm_host libbcm_host HINTS "/opt/vc/lib" "/usr/lib/arm-linux-gnueabihf")
find_library(VCSM_LIBRARY NAMES vcsm libvcsm HINTS "/opt/vc/lib" "/usr/lib/arm-linux-gnueabihf")
target_link_libraries(VC4CL ${BCMHOST_LIBRARY} ${VCSM_LIBRARY} ${SYSROOT_LIBRARY_FLAGS})
endif()
if(ENABLE_COVERAGE)
Expand Down
2 changes: 1 addition & 1 deletion src/Context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -391,4 +391,4 @@ cl_int VC4CL_FUNC(clSetContextDestructorCallback)(
auto con = toType<Context>(context);
return con->setReleaseCallback(pfn_notify, user_data);
}
#endif
#endif
13 changes: 5 additions & 8 deletions src/Program.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,7 @@ static cl_int precompile_program(Program* program, const std::string& options,
tempHeaderIncludes = " -I /tmp/ ";

auto out = vc4c::Precompiler::precompile(sourceCode, config, tempHeaderIncludes + options);
if(auto rawData = out.getRawData())
program->intermediateCode = *std::move(rawData);
else
if(!out.getRawData(program->intermediateCode))
{
std::stringstream tmpStream{};
out.readInto(tmpStream);
Expand Down Expand Up @@ -195,9 +193,7 @@ static cl_int link_programs(
return returnError(
CL_LINKER_NOT_AVAILABLE, __FILE__, __LINE__, "No linker available for this type of input modules!");
auto linkedCode = vc4c::Precompiler::linkSourceCode(inputModules, includeStandardLibrary);
if(auto rawData = linkedCode.getRawData())
program->intermediateCode = *std::move(rawData);
else
if(!linkedCode.getRawData(program->intermediateCode))
{
std::stringstream tmpStream{};
linkedCode.readInto(tmpStream);
Expand Down Expand Up @@ -274,8 +270,9 @@ static cl_int compile_program(Program* program, const std::string& options)

auto result = vc4c::Compiler::compile(intermediateCode, config, options);
program->binaryCode.resize(result.second / sizeof(uint64_t), '\0');
if(auto rawData = result.first.getRawData())
memcpy(program->binaryCode.data(), rawData->data(), result.second);
std::vector<uint8_t> rawData;
if(result.first.getRawData(rawData))
memcpy(program->binaryCode.data(), rawData.data(), result.second);
else
{
std::stringstream tmpStream{};
Expand Down
2 changes: 1 addition & 1 deletion src/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ namespace vc4cl
// the reason is for documentation only
if(state != CL_SUCCESS)
DEBUG_LOG(DebugLevel::API_CALLS,
std::cout << "Error in '" << file << ":" << line << "', returning status " << state << std::endl);
std::cout << "Error in '" << file << ":" << line << "', returning status " << state << std::endl)
}

template <typename... T>
Expand Down
2 changes: 1 addition & 1 deletion src/hal/hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,4 @@ namespace vc4cl

} /* namespace vc4cl */

#endif /* VC4CL_HAL */
#endif /* VC4CL_HAL */
55 changes: 31 additions & 24 deletions src/shared/BinaryHeader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <algorithm>
#include <bitset>
#include <stdexcept>
#include <type_traits>

#ifdef VC4CL_BITFIELD
#include "../Program.h"
Expand Down Expand Up @@ -76,6 +77,12 @@ static T readByteContainer(const std::vector<uint64_t>& data, std::size_t& dataI

static auto readString = readByteContainer<std::string>;

template <typename R, typename T>
static constexpr std::enable_if_t<std::is_unsigned<R>::value && std::is_unsigned<T>::value, R> truncate(T val) noexcept
{
return static_cast<R>(val & ((T{1} << (sizeof(R) * 8u)) - 1u));
}

MetaData::Type MetaData::getType() const
{
if(payload.empty())
Expand Down Expand Up @@ -145,8 +152,8 @@ void MetaData::setString(Type type, const std::string& text)
payload.clear();
auto numBytes = text.size() + 3u /* length + type */;
payload.reserve(numBytes);
payload.push_back(static_cast<uint8_t>(numBytes & 0xFF));
payload.push_back(static_cast<uint8_t>((numBytes >> 8) & 0xFF));
payload.push_back(truncate<uint8_t>(numBytes));
payload.push_back(truncate<uint8_t>(numBytes >> 8));
payload.push_back(static_cast<uint8_t>(type));
payload.insert(payload.end(), text.begin(), text.end());
}
Expand All @@ -170,18 +177,18 @@ void MetaData::setSizes(Type type, const std::array<uint32_t, 3>& sizes)
payload[1] = 0; // upper size
payload[2] = static_cast<uint8_t>(type);
payload[3] = 0; // padding
payload[4] = static_cast<uint8_t>(sizes[0] & 0xFF);
payload[5] = static_cast<uint8_t>((sizes[0] >> 8u) & 0xFF);
payload[6] = static_cast<uint8_t>((sizes[0] >> 16u) & 0xFF);
payload[7] = static_cast<uint8_t>((sizes[0] >> 24u) & 0xFF);
payload[8] = static_cast<uint8_t>(sizes[1] & 0xFF);
payload[9] = static_cast<uint8_t>((sizes[1] >> 8u) & 0xFF);
payload[10] = static_cast<uint8_t>((sizes[1] >> 16u) & 0xFF);
payload[11] = static_cast<uint8_t>((sizes[1] >> 24u) & 0xFF);
payload[12] = static_cast<uint8_t>(sizes[2] & 0xFF);
payload[13] = static_cast<uint8_t>((sizes[2] >> 8u) & 0xFF);
payload[14] = static_cast<uint8_t>((sizes[2] >> 16u) & 0xFF);
payload[15] = static_cast<uint8_t>((sizes[2] >> 24u) & 0xFF);
payload[4] = truncate<uint8_t>(sizes[0]);
payload[5] = truncate<uint8_t>(sizes[0] >> 8u);
payload[6] = truncate<uint8_t>(sizes[0] >> 16u);
payload[7] = truncate<uint8_t>(sizes[0] >> 24u);
payload[8] = truncate<uint8_t>(sizes[1]);
payload[9] = truncate<uint8_t>(sizes[1] >> 8u);
payload[10] = truncate<uint8_t>(sizes[1] >> 16u);
payload[11] = truncate<uint8_t>(sizes[1] >> 24u);
payload[12] = truncate<uint8_t>(sizes[2]);
payload[13] = truncate<uint8_t>(sizes[2] >> 8u);
payload[14] = truncate<uint8_t>(sizes[2] >> 16u);
payload[15] = truncate<uint8_t>(sizes[2] >> 24u);
}

uint32_t MetaData::getInt() const
Expand All @@ -197,10 +204,10 @@ void MetaData::setInt(Type type, uint32_t val)
payload[1] = 0; // upper size
payload[2] = static_cast<uint8_t>(type);
payload[3] = 0; // padding
payload[4] = static_cast<uint8_t>(val & 0xFF);
payload[5] = static_cast<uint8_t>((val >> 8u) & 0xFF);
payload[6] = static_cast<uint8_t>((val >> 16u) & 0xFF);
payload[7] = static_cast<uint8_t>((val >> 24u) & 0xFF);
payload[4] = truncate<uint8_t>(val);
payload[5] = truncate<uint8_t>(val >> 8u);
payload[6] = truncate<uint8_t>(val >> 16u);
payload[7] = truncate<uint8_t>(val >> 24u);
}

LCOV_EXCL_START
Expand Down Expand Up @@ -338,14 +345,14 @@ KernelHeader KernelHeader::fromBinaryData(const std::vector<uint64_t>& data, std
kernel.value = data[dataIndex];
++dataIndex;
auto secondWord = data[dataIndex];
kernel.workGroupSize[0] = static_cast<uint16_t>(secondWord & 0xFFFFU);
kernel.workGroupSize[1] = static_cast<uint16_t>((secondWord >> 16) & 0xFFFFU);
kernel.workGroupSize[2] = static_cast<uint16_t>((secondWord >> 32) & 0xFFFFU);
kernel.workItemMergeFactor = static_cast<uint8_t>((secondWord >> 48) & 0xFFU);
kernel.workGroupSize[0] = truncate<uint16_t>(secondWord);
kernel.workGroupSize[1] = truncate<uint16_t>(secondWord >> 16);
kernel.workGroupSize[2] = truncate<uint16_t>(secondWord >> 32);
kernel.workItemMergeFactor = truncate<uint8_t>(secondWord >> 48);
++dataIndex;
auto thirdWord = data[dataIndex];
kernel.uniformsUsed.value = static_cast<uint32_t>(thirdWord & 0xFFFFFFFFU);
auto numMetaDataEntries = static_cast<uint32_t>((thirdWord >> 32) & 0xFFFFFFFFU);
kernel.uniformsUsed.value = truncate<uint32_t>(thirdWord);
auto numMetaDataEntries = truncate<uint32_t>(thirdWord >> 32);
++dataIndex;
kernel.name = readString(data, dataIndex, kernel.getNameLength());
while(kernel.parameters.size() < kernel.getParamCount())
Expand Down
4 changes: 0 additions & 4 deletions test/TestExecutions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@ static std::string sourceFFT;
static constexpr int COUNTER_IDLE = 0;
static constexpr int COUNTER_EXECUTIONS = 1;

// TODO add execution tests for:
// - multiple work-groups
// - with/without "loop-work-groups" optimization enabled

TestExecutions::TestExecutions() : Test::Suite(), context(nullptr), queue(nullptr)
{
for(const auto& test : test_data::getAllTests())
Expand Down

0 comments on commit a60945c

Please sign in to comment.