Skip to content

Commit aeac611

Browse files
authored
[Snippets][CPU] Check for RISC-V RVV extension in is_supported_isa (#34993)
### Details: Check if RVV extension is actually present on target device before enabling snippets transformations ### Tickets: - N/A ### AI Assistance: - *AI assistance used: yes* - The implementation is generate, manually adjusted after that and checked on the emulator
1 parent 4b25f4d commit aeac611

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

src/plugins/intel_cpu/src/nodes/subgraph.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868

6969
# include "emitters/snippets/riscv64/cpu_generator.hpp"
7070
# include "executors/riscv64/subgraph.hpp"
71+
# include "openvino/core/except.hpp"
7172
#else
7273
# include "emitters/snippets/cpu_runtime_configurator.hpp"
7374
# include "snippets/lowered/pass/insert_perf_count_verbose.hpp"
@@ -218,7 +219,9 @@ static _ov_dnnl_cpu_isa getHostIsa() {
218219
#elif defined(OPENVINO_ARCH_ARM64)
219220
return dnnl::impl::cpu::aarch64::asimd;
220221
#elif defined(OPENVINO_ARCH_RISCV64)
221-
return static_cast<_ov_dnnl_cpu_isa>(ov::intel_cpu::riscv64::gv);
222+
OPENVINO_ASSERT(ov::intel_cpu::riscv64::mayiuse(ov::intel_cpu::riscv64::gv),
223+
"RISC-V Subgraph code generation requires vector ISA support");
224+
return ov::intel_cpu::riscv64::gv;
222225
#else
223226
OPENVINO_THROW("Subgraphs code-generator is not supported on this platform");
224227
#endif
@@ -319,7 +322,7 @@ void Subgraph::initSupportedPrimitiveDescriptors() {
319322
}
320323
if (lt == Blocked && shape.getRank() != 1 &&
321324
(shape.getMinDims()[1] != Shape::UNDEFINED_DIM && shape.getMinDims()[1] > 1)) {
322-
#if defined(OPENVINO_ARCH_ARM64)
325+
#if defined(OPENVINO_ARCH_ARM64) || defined(OPENVINO_ARCH_RISCV64)
323326
size_t blockSize = 16;
324327
#else
325328
size_t blockSize = dnnl::impl::cpu::x64::mayiuse(dnnl::impl::cpu::x64::avx512_core) ? 16 : 8;
@@ -393,6 +396,10 @@ void Subgraph::initSupportedPrimitiveDescriptors() {
393396
if (dnnl::impl::cpu::aarch64::mayiuse(dnnl::impl::cpu::aarch64::asimd)) {
394397
impl_type = impl_desc_type::jit_asimd;
395398
}
399+
#elif defined(OPENVINO_ARCH_RISCV64)
400+
if (ov::intel_cpu::riscv64::mayiuse(ov::intel_cpu::riscv64::gv)) {
401+
impl_type = impl_desc_type::jit_gv;
402+
}
396403
#else
397404
if (dnnl::impl::cpu::x64::mayiuse(dnnl::impl::cpu::x64::avx512_core)) {
398405
impl_type = impl_desc_type::jit_avx512;

src/plugins/intel_cpu/src/nodes/subgraph.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
#if defined(OPENVINO_ARCH_ARM64)
3030
# include "cpu/aarch64/cpu_isa_traits.hpp"
31+
#elif defined(OPENVINO_ARCH_RISCV64)
32+
# include "nodes/kernels/riscv64/cpu_isa_traits.hpp"
3133
#else
3234
# include "cpu/x64/cpu_isa_traits.hpp"
3335
#endif
@@ -85,6 +87,8 @@ class Subgraph : public Node {
8587
// Holds ISA version used is codeGeneration target
8688
#if defined(OPENVINO_ARCH_ARM64)
8789
# define _ov_dnnl_cpu_isa dnnl::impl::cpu::aarch64::cpu_isa_t
90+
#elif defined(OPENVINO_ARCH_RISCV64)
91+
# define _ov_dnnl_cpu_isa ov::intel_cpu::riscv64::cpu_isa_t
8892
#else
8993
# define _ov_dnnl_cpu_isa dnnl::impl::cpu::x64::cpu_isa_t
9094
#endif

src/plugins/intel_cpu/src/transformations/transformation_pipeline.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,7 @@ void Transformations::MainSnippets() {
12041204
#elif defined(OPENVINO_ARCH_ARM64)
12051205
return dnnl::impl::cpu::aarch64::mayiuse(dnnl::impl::cpu::aarch64::asimd);
12061206
#elif defined(OPENVINO_ARCH_RISCV64)
1207-
return true; // RISC-V with Vector Extension supports snippets
1207+
return ov::intel_cpu::riscv64::mayiuse(ov::intel_cpu::riscv64::gv);
12081208
#endif
12091209
return false;
12101210
};

0 commit comments

Comments
 (0)