IndexerThreadPool: Handle Auto indexer type
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 12m53s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 14m33s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 15m8s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m54s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 17m47s
Build Packages / build:rpm (rocky8) (push) Successful in 17m43s
Build Packages / build:rpm (rocky9) (push) Successful in 18m36s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 18m40s
Build Packages / Generate python client (push) Successful in 2m5s
Build Packages / Build documentation (push) Successful in 2m12s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m0s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 11m39s
Build Packages / XDS test (durin plugin) (push) Successful in 10m19s
Build Packages / XDS test (neggia plugin) (push) Successful in 9m8s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 9m46s
Build Packages / DIALS test (push) Successful in 12m58s
Build Packages / Unit tests (push) Successful in 57m47s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 12m53s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 14m33s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 15m8s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m54s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 17m47s
Build Packages / build:rpm (rocky8) (push) Successful in 17m43s
Build Packages / build:rpm (rocky9) (push) Successful in 18m36s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 18m40s
Build Packages / Generate python client (push) Successful in 2m5s
Build Packages / Build documentation (push) Successful in 2m12s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m0s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 11m39s
Build Packages / XDS test (durin plugin) (push) Successful in 10m19s
Build Packages / XDS test (neggia plugin) (push) Successful in 9m8s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 9m46s
Build Packages / DIALS test (push) Successful in 12m58s
Build Packages / Unit tests (push) Successful in 57m47s
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "IndexerThreadPool.h"
|
||||
#include "../common/CUDAWrapper.h"
|
||||
#include "../common/Logger.h"
|
||||
|
||||
#ifdef JFJOCH_USE_CUDA
|
||||
#include "FFBIDXIndexer.h"
|
||||
@@ -84,6 +85,8 @@ void IndexerThreadPool::Worker(int32_t threadIndex, const NUMAHWPolicy &numa_pol
|
||||
#else
|
||||
numa_policy.Bind(threadIndex);
|
||||
#endif
|
||||
} catch (const std::exception &e) {
|
||||
spdlog::error("Failed to bind thread to NUMA node: {}", e.what());
|
||||
} catch (...) {
|
||||
// NUMA policy errors are not critical and should be ignored for the time being.
|
||||
}
|
||||
@@ -101,24 +104,37 @@ void IndexerThreadPool::Worker(int32_t threadIndex, const NUMAHWPolicy &numa_pol
|
||||
|| settings.GetAlgorithm() == IndexingAlgorithmEnum::FFBIDX)
|
||||
ffbidx_indexer = std::make_unique<FFBIDXIndexer>();
|
||||
}
|
||||
} catch (const std::exception &e) {
|
||||
spdlog::error("Failed to initialize GPU indexer: {}", e.what());
|
||||
failed_start = true;
|
||||
} catch (...) {
|
||||
spdlog::error("Failed to initialize GPU indexer");
|
||||
failed_start = true;
|
||||
}
|
||||
#endif
|
||||
#ifdef JFJOCH_USE_FFTW
|
||||
if ((settings.GetAlgorithm() == IndexingAlgorithmEnum::Auto && (get_gpu_count() == 0))
|
||||
|| settings.GetAlgorithm() == IndexingAlgorithmEnum::FFTW)
|
||||
fftw_indexer = std::make_unique<FFTIndexerCPU>(settings);
|
||||
try {
|
||||
if ((settings.GetAlgorithm() == IndexingAlgorithmEnum::Auto && (get_gpu_count() == 0))
|
||||
|| settings.GetAlgorithm() == IndexingAlgorithmEnum::FFTW)
|
||||
fftw_indexer = std::make_unique<FFTIndexerCPU>(settings);
|
||||
} catch (const std::exception &e) {
|
||||
spdlog::error("Failed to initialize FFTW indexer: {}", e.what());
|
||||
failed_start = true;
|
||||
} catch (...) {
|
||||
spdlog::error("Failed to initialize FFTW indexer");
|
||||
failed_start = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
workers_ready.count_down();
|
||||
|
||||
while (true) {
|
||||
TaskPackage task; {
|
||||
TaskPackage task;
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(m);
|
||||
|
||||
// Add a timeout to the wait to ensure we can exit even if no notification
|
||||
cond.wait_for(lock, std::chrono::seconds(1), [this] {
|
||||
cond.wait_for(lock, std::chrono::milliseconds(50), [this] {
|
||||
return stop || !taskQueue.empty();
|
||||
});
|
||||
|
||||
@@ -145,6 +161,9 @@ void IndexerThreadPool::Worker(int32_t threadIndex, const NUMAHWPolicy &numa_pol
|
||||
indexer = ffbidx_indexer.get();
|
||||
} else if (algorithm == IndexingAlgorithmEnum::FFTW && fftw_indexer) {
|
||||
indexer = fftw_indexer.get();
|
||||
} else if (algorithm == IndexingAlgorithmEnum::Auto) {
|
||||
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
|
||||
"Internal error: Invalid indexing algorithm provided");
|
||||
}
|
||||
|
||||
if (indexer) {
|
||||
|
||||
Reference in New Issue
Block a user