È stata pubblicata la release del progetto PoCL 6.0 (Portable Computing Language OpenCL), che sviluppa l'implementazione dello standard OpenCL, indipendente dai produttori di acceleratori grafici e consente di utilizzare diversi backend per l'esecuzione dei nuclei OpenCL su vari tipi di processori grafici e centralizzati. Il codice del progetto è rilasciato con licenza MIT. È supportato l'uso su piattaforme X86_64, MIPS32, ARM v7, AMD HSA APU, GPU NVIDIA e vari ASIP (Application-Specific Instruction-set Processor) e processori TTA (Transport Triggered Architecture) con architettura VLIW.
L'implementazione del compilatore dei kernel OpenCL si basa su LLVM, e utilizza Clang come frontend per OpenCL C. Per garantire la dovuta portabilità e prestazioni, il compilatore dei kernel OpenCL può generare funzioni combinate, che possono utilizzare diverse risorse hardware per parallelizzare l'esecuzione del codice, come VLIW, superscalare, SIMD, SIMT, multi-core e multithreading. È supportata la modalità ICD drivers
(Installable Client Driver). Sono disponibili backend per garantire il funzionamento tramite CPU, ASIP (TCE/TTA), GPU basate su architettura HSA e GPU NVIDIA (tramite libcuda).
Nella nuova versione:
- È stato aggiunto il supporto per Clang/LLVM 18.0, mentre è stato interrotto il supporto per LLVM 10, 11, 12 e 13.
- È stato implementato un nuovo backend cpu-tbb, che utilizza la libreria OneTBB, sviluppata da Intel, per il parallelismo delle operazioni e la pianificazione dell'esecuzione dei compiti.
- Nel backend cpu, che garantisce l'esecuzione dei nuclei OpenCL su CPU, è stato aggiunto il supporto per lo standard di programmazione parallela OpenMP, è stato aggiunto il metodo clGetDeviceAndHostTimer(), e sono state implementate estensioni sperimentali cl_pocl_svm_rect, cl_pocl_command_buffer_svm e cl_pocl_command_buffer_host_buffer.
- Nel backend 'Remote', progettato per organizzare calcoli distribuiti trasferendo l'elaborazione dei comandi OpenCL su altri host nella rete, dove è in esecuzione il processo in background pocld, è stato aggiunto il supporto per CG SVM (Coarse-Grain Shared Virtual Memory), la possibilità di accedere al backend utilizzando il protocollo di comunicazione Vsock e il supporto per la compilazione e il collegamento dei programmi tramite le funzioni clCompileProgram() e clLinkProgram().
- Nel backend LevelZero, che utilizza l'API Level Zero, è consentito creare buffer di dimensioni superiori a 4GB ed è stata implementata l'ottimizzazione dei processi di sincronizzazione.
- Nel backend CUDA sono state implementate le operazioni sub_group_shuffle e sub_group_shuffle_xor, e il limite CL_DEVICE_MAX_MEM_ALLOC_SIZE è stato aumentato.
Fonte: opennet.ru
