Choose timezone
Your profile timezone:
Color code: (critical, news during the meeting: green, news from this week: blue, news from last week: purple, no news: black)
High priority Framework issues:
Sync reconstruction
Async reconstruction
EPN major topics:
Other EPN topics:
AliECS related topics:
GPU ROCm / compiler topics:
TPC GPU Processing
TPC processing performance regression:
General GPU Processing
readout-proxy
name from when sending the metric to when registering the metric
Utilities/EPNMonitoring/src/EPNstderrMonitor.cxx
for EPN InfoLoggerDeviceInfo::logLevel
set to --severity
from command line arguments
DeviceControl::logLevel
which determines the filter severity in the GUI
/home/epn/odc/files
in DPL workflows to remove the dependency on the NFS
logWatcher.sh
and logFetcher
scripts modified by EPN to remove dependencies on epnlog
user
log_access
role to allow access in logWatcher
mode to retrieve log files, e.g. for on-call shiftersGeneral
Framework
549/549 Test #506: o2sim_checksimkinematics_G3 ..........................................................Subprocess aborted***Exception: 1.90 sec
99% tests passed, 1 tests failed out of 549
But this PR is fully independent of any code that runs (no implementation in any task yet)
Multi-class networks
Plans & To-Do's
Title and text; High priority, medium priority, low priority; short term, mid term, long term; other
gpu-reco-workflow
: no progress yet; will start after the tracklet finding is ported.SMatrixGPU
on the host, under particular configuration: no progress yet.Problem: Given an existing buffer, we want to allocate our data structures within that buffer.
Solution: We use anallocator that takes a pointer to the buffer and its size in bytes.
#include <cstddef>
#include <stdexcept>
template <typename T>
class BufferAllocator {
public:
using value_type = T;
BufferAllocator(char* buffer, std::size_t size)
: buffer_(buffer), size_(size), offset_(0) {}
template <typename U>
BufferAllocator(const BufferAllocator<U>& other) noexcept
: buffer_(other.buffer_), size_(other.size_), offset_(other.offset_) {}
T* allocate(std::size_t n) {
std::size_t bytes = n * sizeof(T);
if (offset_ + bytes > size_) throw std::bad_alloc();
T* ptr = reinterpret_cast<T*>(buffer_ + offset_);
offset_ += bytes;
return ptr;
}
void deallocate(T* ptr, std::size_t n) noexcept {}
private:
char* buffer_;
std::size_t size_;
std::size_t offset_;
};
#include <vector>
#include <iostream>
int main() {
constexpr std::size_t bufferSize = 1024;
char buffer[bufferSize];
// vector of int
BufferAllocator<int> allocator(buffer, bufferSize);
std::vector<int, BufferAllocator<int>> v(allocator);
for (int i = 0; i < 10; ++i) v.push_back(i);
for (int value : v) std::cout << value << " "; // 0, 1, 2, ...
std::cout << std::endl;
// vector of double
BufferAllocator<double> new_allocator(buffer, bufferSize);
std::vector<double, BufferAllocator<double>> w(new_allocator);
for (int i = 0; i < 10; ++i) w.push_back(-1 * (double)i);
for (double value : w) std::cout << value << " "; // 0, -1, -2, ...
std::cout << std::endl;
// reading from the int vector now yields garbage
for (int value : v) std::cout << value << " "; // 2352344, 34553553, ...
std::cout << std::endl;
return 0;
}