È stato pubblicato il rilascio 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 vari backend per l'esecuzione di kernel OpenCL su diversi tipi di processori grafici e centrali. Il codice del progetto è distribuito con licenza MIT. È supportato su piattaforme X86_64, MIPS32, ARM v7, AMD HSA APU, GPU NVIDIA e vari processori ASIP (Application-Specific Instruction-set Processor) e TTA (Transport Triggered Architecture) con architettura VLIW.
L'implementazione del compilatore dei nuclei OpenCL è basata su LLVM, mentre Clang è utilizzato come frontend per OpenCL C. Per garantire la giusta portabilità e prestazioni, il compilatore dei nuclei OpenCL può generare funzioni combinate che utilizzano diverse risorse hardware per parallelizzare l'esecuzione del codice, come VLIW, superscalare, SIMD, SIMT, multicore e multithreading. È supportato il driver ICD
(Installable Client Driver). Sono disponibili backend per garantire il funzionamento tramite CPU, ASIP (TCE/TTA), GPU basate sull'architettura HSA e GPU NVIDIA (tramite libcuda).
Nella nuova versione:
- Aggiunta la compatibilità con Clang/LLVM 18.0, interrotta la compatibilità con LLVM 10, 11, 12 e 13.
- 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 task.
- Nel backend cpu, che garantisce l'esecuzione dei kernel OpenCL sulla CPU, è stata aggiunta la compatibilità con lo standard di programmazione parallela OpenMP, è stato aggiunto il metodo clGetDeviceAndHostTimer(), e sono stati implementati estensioni sperimentali cl_pocl_svm_rect, cl_pocl_command_buffer_svm e cl_pocl_command_buffer_host_buffer.
- Nel backend "Remote", progettato per organizzare computazioni distribuite tramite l'elaborazione di comandi OpenCL su altri host nella rete, su cui è in esecuzione il processo in background pocld, è stata aggiunta la compatibilità con 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 di programmi tramite le funzioni clCompileProgram() e clLinkProgram().
- Nel backend LevelZero, che utilizza l'API Level Zero, è consentita la creazione di buffer di dimensioni superiori a 4 GB, 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 aumentato il limite di CL_DEVICE_MAX_MEM_ALLOC_SIZE.
Fonte: opennet.ru
