7
правок
Изменения
Добавил пример для OpenCL
print(C_gpu)
Наивная реализация перемножения матриц на OpenCL
// First naive implementation
__kernel void myGEMM1(const int M, const int N, const int K,
const __global float *A,
const __global float *B,
__global float *C) {
// Thread identifiers
const int globalRow = get_global_id(0); // Row ID of C (0..M)
const int globalCol = get_global_id(1); // Col ID of C (0..N)
// Compute a single element (loop over K)
float acc = 0.0f;
for (int k = 0; k < K; k++) {
acc += A[k * M + globalRow] * B[globalCol * K + k];
}
// Store the result
C[globalCol * M + globalRow] = acc;
}
=== Параллелизм SGD ===
Запускаем внешний цикл [[Стохастический градиентный спуск|SGD]] параллельно в пуле потоков и используем конструкции синхронизации, такие как блокировки, чтобы предотвратить состояние гонки. Но это может работать медленно из-за накладных расходов на синхронизацию.
# [https://medium.com/@CIulius/a-short-notice-on-performing-matrix-multiplications-in-pycuda-cbfb00cf1450 A short notice on performing matrix multiplications in PyCUDA]
# [https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html CUDA C++ Programming Guide]
# [https://cnugteren.github.io/tutorial/pages/page1.html OpenCL SGEMM tuning for Kepler]
[[Категория: Машинное обучение]]