Compare commits
6 Commits
9c82f17e20
...
cf-integri
| Author | SHA1 | Date | |
|---|---|---|---|
| c46f633dbf | |||
| 400350946c | |||
| 607a4ef6e2 | |||
| b0750772ec | |||
| 86abc02188 | |||
| a90e353fcd |
@@ -32,12 +32,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
-Werror=switch-enum
|
-Werror=switch-enum -Wswitch-enum -fPIC -fdata-sections -ffunction-sections
|
||||||
-Wswitch-enum
|
|
||||||
-Wunused-variable
|
|
||||||
-fPIC
|
|
||||||
-fdata-sections
|
|
||||||
-ffunction-sections
|
|
||||||
-fno-jump-tables # https://github.com/llvm/llvm-project/issues/54247
|
-fno-jump-tables # https://github.com/llvm/llvm-project/issues/54247
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -109,11 +104,19 @@ else()
|
|||||||
add_link_options(-Wl,--gc-sections)
|
add_link_options(-Wl,--gc-sections)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(USE_SIMD_FALLBACK)
|
if(NOT USE_SIMD_FALLBACK)
|
||||||
add_compile_definitions(USE_SIMD_FALLBACK)
|
cmake_push_check_state()
|
||||||
else()
|
list(APPEND CMAKE_REQUIRED_FLAGS -mavx)
|
||||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
|
check_include_file_cxx("immintrin.h" HAS_AVX)
|
||||||
|
if(HAS_AVX)
|
||||||
add_compile_options(-mavx)
|
add_compile_options(-mavx)
|
||||||
|
add_compile_definitions(HAS_AVX)
|
||||||
|
endif()
|
||||||
|
cmake_pop_check_state()
|
||||||
|
|
||||||
|
check_include_file_cxx("arm_neon.h" HAS_ARM_NEON)
|
||||||
|
if(HAS_ARM_NEON)
|
||||||
|
add_compile_definitions(HAS_ARM_NEON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -14,16 +14,6 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if !defined(USE_SIMD_FALLBACK) && defined(__has_include)
|
|
||||||
#if __has_include("immintrin.h")
|
|
||||||
#define HAS_AVX 1
|
|
||||||
#include <immintrin.h>
|
|
||||||
#elif __has_include("arm_neon.h")
|
|
||||||
#define HAS_ARM_NEON 1
|
|
||||||
#include <arm_neon.h>
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ConflictSet.h"
|
#include "ConflictSet.h"
|
||||||
#include "Internal.h"
|
#include "Internal.h"
|
||||||
#include "LongestCommonPrefix.h"
|
#include "LongestCommonPrefix.h"
|
||||||
@@ -44,6 +34,12 @@ limitations under the License.
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
#ifdef HAS_AVX
|
||||||
|
#include <immintrin.h>
|
||||||
|
#elif defined(HAS_ARM_NEON)
|
||||||
|
#include <arm_neon.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __SANITIZE_THREAD__
|
#ifndef __SANITIZE_THREAD__
|
||||||
#if defined(__has_feature)
|
#if defined(__has_feature)
|
||||||
#if __has_feature(thread_sanitizer)
|
#if __has_feature(thread_sanitizer)
|
||||||
@@ -700,6 +696,8 @@ constexpr int64_t kMaxFreeListBytes = 1 << 20;
|
|||||||
// doesn't meet the capacity constraints, it's freed and a new node is allocated
|
// doesn't meet the capacity constraints, it's freed and a new node is allocated
|
||||||
// with the minimum capacity. The hope is that "unfit" nodes don't get stuck in
|
// with the minimum capacity. The hope is that "unfit" nodes don't get stuck in
|
||||||
// the free list.
|
// the free list.
|
||||||
|
//
|
||||||
|
// TODO valgrind annotations
|
||||||
template <class T> struct NodeAllocator {
|
template <class T> struct NodeAllocator {
|
||||||
|
|
||||||
static_assert(std::derived_from<T, Node>);
|
static_assert(std::derived_from<T, Node>);
|
||||||
@@ -736,7 +734,6 @@ template <class T> struct NodeAllocator {
|
|||||||
p->parent = freeList;
|
p->parent = freeList;
|
||||||
freeList = p;
|
freeList = p;
|
||||||
freeListSize += sizeof(T) + p->partialKeyCapacity;
|
freeListSize += sizeof(T) + p->partialKeyCapacity;
|
||||||
VALGRIND_MAKE_MEM_NOACCESS(p, sizeof(T) + p->partialKeyCapacity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void deferRelease(T *p, Node *forwardTo) {
|
void deferRelease(T *p, Node *forwardTo) {
|
||||||
@@ -758,13 +755,6 @@ template <class T> struct NodeAllocator {
|
|||||||
void releaseDeferred() {
|
void releaseDeferred() {
|
||||||
if (deferredList != nullptr) {
|
if (deferredList != nullptr) {
|
||||||
deferredListFront->parent = freeList;
|
deferredListFront->parent = freeList;
|
||||||
#ifndef NVALGRIND
|
|
||||||
for (auto *iter = deferredList; iter != freeList;) {
|
|
||||||
auto *tmp = iter;
|
|
||||||
iter = (T *)iter->parent;
|
|
||||||
VALGRIND_MAKE_MEM_NOACCESS(tmp, sizeof(T) + tmp->partialKeyCapacity);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
freeList = std::exchange(deferredList, nullptr);
|
freeList = std::exchange(deferredList, nullptr);
|
||||||
}
|
}
|
||||||
for (T *n = std::exchange(deferredListOverflow, nullptr); n != nullptr;) {
|
for (T *n = std::exchange(deferredListOverflow, nullptr); n != nullptr;) {
|
||||||
@@ -785,7 +775,6 @@ template <class T> struct NodeAllocator {
|
|||||||
assert(deferredList == nullptr);
|
assert(deferredList == nullptr);
|
||||||
assert(deferredListOverflow == nullptr);
|
assert(deferredListOverflow == nullptr);
|
||||||
for (T *iter = freeList; iter != nullptr;) {
|
for (T *iter = freeList; iter != nullptr;) {
|
||||||
VALGRIND_MAKE_MEM_DEFINED(iter, sizeof(T));
|
|
||||||
auto *tmp = iter;
|
auto *tmp = iter;
|
||||||
iter = (T *)iter->parent;
|
iter = (T *)iter->parent;
|
||||||
removeNode(tmp);
|
removeNode(tmp);
|
||||||
@@ -803,7 +792,6 @@ private:
|
|||||||
|
|
||||||
T *allocate_helper(int minCapacity, int maxCapacity) {
|
T *allocate_helper(int minCapacity, int maxCapacity) {
|
||||||
if (freeList != nullptr) {
|
if (freeList != nullptr) {
|
||||||
VALGRIND_MAKE_MEM_DEFINED(freeList, sizeof(T));
|
|
||||||
freeListSize -= sizeof(T) + freeList->partialKeyCapacity;
|
freeListSize -= sizeof(T) + freeList->partialKeyCapacity;
|
||||||
assume(freeList->partialKeyCapacity >= 0);
|
assume(freeList->partialKeyCapacity >= 0);
|
||||||
assume(minCapacity >= 0);
|
assume(minCapacity >= 0);
|
||||||
@@ -812,11 +800,6 @@ private:
|
|||||||
freeList->partialKeyCapacity <= maxCapacity) {
|
freeList->partialKeyCapacity <= maxCapacity) {
|
||||||
auto *result = freeList;
|
auto *result = freeList;
|
||||||
freeList = (T *)freeList->parent;
|
freeList = (T *)freeList->parent;
|
||||||
VALGRIND_MAKE_MEM_UNDEFINED(result,
|
|
||||||
sizeof(T) + result->partialKeyCapacity);
|
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&result->partialKeyCapacity,
|
|
||||||
sizeof(result->partialKeyCapacity));
|
|
||||||
VALGRIND_MAKE_MEM_DEFINED(&result->type, sizeof(result->type));
|
|
||||||
return result;
|
return result;
|
||||||
} else {
|
} else {
|
||||||
auto *p = freeList;
|
auto *p = freeList;
|
||||||
@@ -5875,13 +5858,13 @@ void checkVersionsGeqOldestExtant(Node *n,
|
|||||||
case Type_Node0: {
|
case Type_Node0: {
|
||||||
} break;
|
} break;
|
||||||
case Type_Node3: {
|
case Type_Node3: {
|
||||||
[[maybe_unused]] auto *self = static_cast<Node3 *>(n);
|
auto *self = static_cast<Node3 *>(n);
|
||||||
for (int i = 0; i < 3; ++i) {
|
for (int i = 0; i < 3; ++i) {
|
||||||
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case Type_Node16: {
|
case Type_Node16: {
|
||||||
[[maybe_unused]] auto *self = static_cast<Node16 *>(n);
|
auto *self = static_cast<Node16 *>(n);
|
||||||
for (int i = 0; i < 16; ++i) {
|
for (int i = 0; i < 16; ++i) {
|
||||||
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
||||||
}
|
}
|
||||||
@@ -5891,7 +5874,7 @@ void checkVersionsGeqOldestExtant(Node *n,
|
|||||||
for (int i = 0; i < 48; ++i) {
|
for (int i = 0; i < 48; ++i) {
|
||||||
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
||||||
}
|
}
|
||||||
for ([[maybe_unused]] auto m : self->maxOfMax) {
|
for (auto m : self->maxOfMax) {
|
||||||
assert(m >= oldestExtantVersion);
|
assert(m >= oldestExtantVersion);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@@ -5900,7 +5883,7 @@ void checkVersionsGeqOldestExtant(Node *n,
|
|||||||
for (int i = 0; i < 256; ++i) {
|
for (int i = 0; i < 256; ++i) {
|
||||||
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
assert(self->childMaxVersion[i] >= oldestExtantVersion);
|
||||||
}
|
}
|
||||||
for ([[maybe_unused]] auto m : self->maxOfMax) {
|
for (auto m : self->maxOfMax) {
|
||||||
assert(m >= oldestExtantVersion);
|
assert(m >= oldestExtantVersion);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|||||||
4
Jenkinsfile
vendored
4
Jenkinsfile
vendored
@@ -91,7 +91,7 @@ pipeline {
|
|||||||
minio bucket: 'jenkins', credentialsId: 'jenkins-minio', excludes: '', host: 'minio.weaselab.dev', includes: 'build/*.deb,build/*.rpm,paper/*.pdf', targetFolder: '${JOB_NAME}/${BUILD_NUMBER}/${STAGE_NAME}/'
|
minio bucket: 'jenkins', credentialsId: 'jenkins-minio', excludes: '', host: 'minio.weaselab.dev', includes: 'build/*.deb,build/*.rpm,paper/*.pdf', targetFolder: '${JOB_NAME}/${BUILD_NUMBER}/${STAGE_NAME}/'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('gcc') {
|
stage('Release [gcc]') {
|
||||||
agent {
|
agent {
|
||||||
dockerfile {
|
dockerfile {
|
||||||
args '-v /home/jenkins/ccache:/ccache'
|
args '-v /home/jenkins/ccache:/ccache'
|
||||||
@@ -99,7 +99,7 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
CleanBuildAndTest("-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++")
|
CleanBuildAndTest("-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS=-DNVALGRIND")
|
||||||
recordIssues(tools: [gcc()])
|
recordIssues(tools: [gcc()])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <span>
|
#include <string_view>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -64,7 +64,7 @@ int main(int argc, const char **argv) {
|
|||||||
auto *const mapOriginal = begin;
|
auto *const mapOriginal = begin;
|
||||||
const auto sizeOriginal = size;
|
const auto sizeOriginal = size;
|
||||||
|
|
||||||
using StringView = std::span<const uint8_t>;
|
using StringView = std::basic_string_view<uint8_t>;
|
||||||
|
|
||||||
StringView write;
|
StringView write;
|
||||||
std::vector<StringView> reads;
|
std::vector<StringView> reads;
|
||||||
@@ -78,9 +78,9 @@ int main(int argc, const char **argv) {
|
|||||||
end = (uint8_t *)memchr(begin, '\n', size);
|
end = (uint8_t *)memchr(begin, '\n', size);
|
||||||
|
|
||||||
if (line.size() > 0 && line[0] == 'P') {
|
if (line.size() > 0 && line[0] == 'P') {
|
||||||
write = line.subspan(2, line.size());
|
write = line.substr(2, line.size());
|
||||||
} else if (line.size() > 0 && line[0] == 'L') {
|
} else if (line.size() > 0 && line[0] == 'L') {
|
||||||
reads.push_back(line.subspan(2, line.size()));
|
reads.push_back(line.substr(2, line.size()));
|
||||||
} else if (line.empty()) {
|
} else if (line.empty()) {
|
||||||
{
|
{
|
||||||
readRanges.resize(reads.size());
|
readRanges.resize(reads.size());
|
||||||
|
|||||||
@@ -796,6 +796,7 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
|||||||
int temp[stripeSize];
|
int temp[stripeSize];
|
||||||
int stripes = (stringCount + stripeSize - 1) / stripeSize;
|
int stripes = (stringCount + stripeSize - 1) / stripeSize;
|
||||||
StringRef values[stripeSize];
|
StringRef values[stripeSize];
|
||||||
|
int64_t writeVersions[stripeSize / 2];
|
||||||
int ss = stringCount - (stripes - 1) * stripeSize;
|
int ss = stringCount - (stripes - 1) * stripeSize;
|
||||||
int64_t entryDelta = 0;
|
int64_t entryDelta = 0;
|
||||||
for (int s = stripes - 1; s >= 0; s--) {
|
for (int s = stripes - 1; s >= 0; s--) {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
___chkstk_darwin
|
|
||||||
___stack_chk_fail
|
___stack_chk_fail
|
||||||
___stack_chk_guard
|
___stack_chk_guard
|
||||||
__tlv_bootstrap
|
__tlv_bootstrap
|
||||||
@@ -6,7 +5,6 @@ _abort
|
|||||||
_bzero
|
_bzero
|
||||||
_free
|
_free
|
||||||
_malloc
|
_malloc
|
||||||
_memcmp
|
|
||||||
_memcpy
|
_memcpy
|
||||||
_memmove
|
_memmove
|
||||||
dyld_stub_binder
|
dyld_stub_binder
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,7 +8,7 @@ SRC_DIR="${0%/*}"
|
|||||||
BUILD_ARM="$(mktemp -d -t conflict-set-arm)"
|
BUILD_ARM="$(mktemp -d -t conflict-set-arm)"
|
||||||
BUILD_X86="$(mktemp -d -t conflict-set-x86)"
|
BUILD_X86="$(mktemp -d -t conflict-set-x86)"
|
||||||
|
|
||||||
cmake_args=(-DCMAKE_CXX_FLAGS=-DNVALGRIND -DCPACK_PACKAGING_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm/bin/clang++)
|
cmake_args=(-DCMAKE_CXX_FLAGS=-DNVALGRIND -DCPACK_PACKAGING_INSTALL_PREFIX=/usr/local)
|
||||||
|
|
||||||
cmake -S"$SRC_DIR" -B"$BUILD_ARM" -DCMAKE_OSX_ARCHITECTURES=arm64 "${cmake_args[@]}"
|
cmake -S"$SRC_DIR" -B"$BUILD_ARM" -DCMAKE_OSX_ARCHITECTURES=arm64 "${cmake_args[@]}"
|
||||||
cmake --build "$BUILD_ARM" --target conflict-set --target conflict-set-static
|
cmake --build "$BUILD_ARM" --target conflict-set --target conflict-set-static
|
||||||
|
|||||||
Reference in New Issue
Block a user