https://github.com/Microsoft/CNTK
Raw File
Tip revision: 10a8ffcf50d7b9225f3236ffcfdc422b2014fb92 authored by microsoft-github-policy-service[bot] on 23 September 2022, 14:06:50 UTC
Microsoft mandatory file (#3870)
Tip revision: 10a8ffc
MatrixQuantizerImpl.cpp
#include "stdafx.h"
#include "Matrix.h"
#include "MatrixQuantizerImpl.h"
#include "MatrixQuantizerCPU.h"
#include "MatrixQuantizerGPU.h"

namespace Microsoft { namespace MSR { namespace CNTK {

template <class ElemType>
/*static*/ MatrixQuantizerImpl<ElemType>* MatrixQuantizerImpl<ElemType>::Create(int deviceId, bool useAsync)
{
    if (deviceId >= 0)
    {
#ifndef CPUONLY
        bool useDedicatedComputeStream = useAsync;
        return new MatrixQuantizerGPU<ElemType>(deviceId, useDedicatedComputeStream);
#else
        useAsync;
        RuntimeError("CreateMatrixQuantizer: attempted to use GPU while compiled without GPU support");
#endif
    }
    else
    {
        return new MatrixQuantizerCPU<ElemType>();
    }
}

template class MatrixQuantizerImpl<float>;
template class MatrixQuantizerImpl<double>;

MatrixComputeStreamEvent* MatrixComputeStreamEvent::Create(int deviceId)
{
    if (deviceId >= 0)
        return new GPUMatrixComputeStreamEvent(deviceId);
    else
        return new MatrixComputeStreamEvent(deviceId);
}

MatrixComputeStreamEvent::~MatrixComputeStreamEvent()
{
}

void MatrixComputeStreamEvent::SynchronizeEvent()
{
}

template <typename ElemType>
void MatrixComputeStreamEvent::SynchronizeQuantizationComputeStreamWithEvent()
{
    if (m_deviceId >= 0)
    {
        GPUMatrixComputeStreamEvent* GPUEvent = dynamic_cast<GPUMatrixComputeStreamEvent*>(this);
        GPUEvent->SynchronizeQuantizationComputeStreamWithEvent<ElemType>();
    }
}

template <typename ElemType>
void MatrixComputeStreamEvent::SynchronizeDataTransferFetchStreamWithEvent()
{
    if (m_deviceId >= 0)
    {
        GPUMatrixComputeStreamEvent* GPUEvent = dynamic_cast<GPUMatrixComputeStreamEvent*>(this);
        GPUEvent->SynchronizeDataTransferFetchStreamWithEvent<ElemType>();
    }
}

MatrixComputeStreamEvent::MatrixComputeStreamEvent(int deviceId)
    : m_deviceId(deviceId)
{
}

// Explicit template instantiations
template MATH_API void MatrixComputeStreamEvent::SynchronizeQuantizationComputeStreamWithEvent<float>();
template MATH_API void MatrixComputeStreamEvent::SynchronizeQuantizationComputeStreamWithEvent<double>();
template MATH_API void MatrixComputeStreamEvent::SynchronizeDataTransferFetchStreamWithEvent<float>();
template MATH_API void MatrixComputeStreamEvent::SynchronizeDataTransferFetchStreamWithEvent<double>();
} } }
back to top