| 36 | } |
| 37 | |
| 38 | Maybe<DataType> ToOneFlowDataType(const DLDataType& dtype) { |
| 39 | DataType ofdtype = DataType::kInvalidDataType; |
| 40 | CHECK_EQ_OR_RETURN(dtype.lanes, 1) << "OneFlow does not support lanes != 1"; |
| 41 | switch (dtype.code) { |
| 42 | case DLDataTypeCode::kDLUInt: |
| 43 | switch (dtype.bits) { |
| 44 | case 8: ofdtype = DataType::kUInt8; break; |
| 45 | default: |
| 46 | UNIMPLEMENTED_THEN_RETURN() << "Unsupported data type: " << dtype.code << dtype.bits; |
| 47 | } |
| 48 | break; |
| 49 | case DLDataTypeCode::kDLInt: |
| 50 | switch (dtype.bits) { |
| 51 | case 8: ofdtype = DataType::kInt8; break; |
| 52 | case 16: ofdtype = DataType::kInt16; break; |
| 53 | case 32: ofdtype = DataType::kInt32; break; |
| 54 | case 64: ofdtype = DataType::kInt64; break; |
| 55 | default: |
| 56 | UNIMPLEMENTED_THEN_RETURN() << "Unsupported data type: " << dtype.code << dtype.bits; |
| 57 | } |
| 58 | break; |
| 59 | case DLDataTypeCode::kDLFloat: |
| 60 | switch (dtype.bits) { |
| 61 | case 16: ofdtype = DataType::kFloat16; break; |
| 62 | case 32: ofdtype = DataType::kFloat; break; |
| 63 | case 64: ofdtype = DataType::kDouble; break; |
| 64 | default: |
| 65 | UNIMPLEMENTED_THEN_RETURN() << "Unsupported data type: " << dtype.code << dtype.bits; |
| 66 | } |
| 67 | break; |
| 68 | case DLDataTypeCode::kDLBfloat: |
| 69 | switch (dtype.bits) { |
| 70 | case 16: ofdtype = DataType::kBFloat16; break; |
| 71 | default: UNIMPLEMENTED_THEN_RETURN() << "Unsupported data type: bfloat" << dtype.bits; |
| 72 | } |
| 73 | break; |
| 74 | case DLDataTypeCode::kDLComplex: |
| 75 | UNIMPLEMENTED_THEN_RETURN() << "Unsupported data type: complex" << dtype.bits; |
| 76 | break; |
| 77 | default: UNIMPLEMENTED_THEN_RETURN() << "Unsupported code " << dtype.code; |
| 78 | } |
| 79 | CHECK_NE_OR_RETURN(ofdtype, DataType::kInvalidDataType); |
| 80 | return ofdtype; |
| 81 | } |
| 82 | |
| 83 | Maybe<one::Tensor> fromDLPack(const DLManagedTensor* src) { |
| 84 | using namespace one; |